你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 托管实例 for Apache Cassandra 中启用 LDAP 身份验证

Azure Managed Instance for Apache Cassandra 为托管的开源 Apache Cassandra 数据中心提供自动部署和缩放操作。 本文介绍如何对群集和数据中心启用轻型目录访问协议(LDAP)身份验证。

重要说明

LDAP 身份验证以公共预览版提供。

此功能不附带服务级别协议。 建议不要将它用于生产工作负载。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

Prerequisites

在 Azure 中部署 LDAP 服务器

在本部分中,将在 Azure 中的虚拟机上创建一个简单的 LDAP 服务器。 如果已运行 LDAP 服务器,可以跳到 启用 LDAP 身份验证

  1. 使用 Ubuntu Server 18.04 Long-Term 支持(LTS)在 Azure 中部署虚拟机。 有关详细说明,请参阅 部署 Ubuntu 服务器

  2. 为服务器提供域名系统(DNS)名称。

    显示 Azure 门户中虚拟机 DNS 名称的屏幕截图。

  3. 在虚拟机上安装 Docker。 有关教程,请参阅 在 Ubuntu 18.04 上安装和使用 Docker

  4. 在主目录中,复制并粘贴以下文本,然后选择 Enter。 此命令创建一个包含测试 LDAP 用户帐户的文件。

    mkdir ldap-user && cd ldap-user && cat >> user.ldif <<EOL
    dn: uid=admin,dc=example,dc=org
    uid: admin
    cn: admin
    sn: 3
    objectClass: top
    objectClass: posixAccount
    objectClass: inetOrgPerson
    loginShell: /bin/bash
    homeDirectory: /home/admin
    uidNumber: 14583102
    gidNumber: 14564100
    userPassword: admin
    mail: admin@example.com
    gecos: admin
    EOL 
    
  5. 返回到主目录。

    cd ..
    
  6. 运行以下命令。 将 <dnsname> 替换为你之前为 LDAP 服务器创建的 DNS 名称。 此命令将启用了传输层安全性 (TLS) 的 LDAP 服务器部署到 Docker 容器,并将之前创建的用户文件复制到容器。

    sudo docker run --hostname <dnsname>.uksouth.cloudapp.azure.com --name <dnsname> -v $(pwd)/ldap-user:/container/service/slapd/assets/test --detach osixia/openldap:1.5.0
    
  7. 从容器中复制证书文件夹。 将 <dnsname> 替换为你为 LDAP 服务器创建的 DNS 名称。

    sudo docker cp <dnsname>:/container/service/slapd/assets/certs certs
    
  8. 验证 DNS 名称是否正确。

    openssl x509 -in certs/ldap.crt -text
    

    显示用于验证证书的命令输出的屏幕截图。

  9. ldap.crt 文件复制到 Azure CLI 中的 clouddrive ,供以后使用。

  10. 将用户添加到 LDAP。 将 <dnsname> 替换为你为 LDAP 服务器创建的 DNS 名称。

    sudo docker container exec <dnsname> ldapadd -H ldap://<dnsname>.uksouth.cloudapp.azure.com -D "cn=admin,dc=example,dc=org" -w admin -f /container/service/slapd/assets/test/user.ldif
    

启用 LDAP 身份验证

重要说明

如果因为已有 LDAP 服务器而跳过了上一部分,请确保它已启用服务器安全套接字层证书。 为 subject alternative name (dns name) 证书指定的证书还必须与托管 LDAP 的服务器域匹配,否则身份验证将失败。

  1. 目前,LDAP 身份验证是公共预览版功能。 运行以下命令以添加所需的 Azure CLI 扩展:

    az extension add --upgrade --name cosmosdb-preview
    
  2. 将群集的身份验证方法设置为 Ldap。 将 <resource group><cluster name> 替换为相应的值。

    az managed-cassandra cluster update -g <resource group> -c <cluster name> --authentication-method "Ldap"
    
  3. 现在,在数据中心级别设置属性。 将 <resource group><cluster name> 替换为相应的值。 用您为 LDAP 服务器创建的 DNS 名称替换 <dnsname>

    以下命令基于前面部分中的 LDAP 设置。 如果由于已有一个 LDAP 服务器而跳过该部分,请改为提供该服务器的对应值。 确保已在 Azure CLI 中将 ldap.crt 之类的证书文件上传到云驱动器

    ldap_search_base_distinguished_name='dc=example,dc=org'
    ldap_server_certificates='/usr/csuser/clouddrive/ldap.crt'
    ldap_server_hostname='<dnsname>.uksouth.cloudapp.azure.com'
    ldap_service_user_distinguished_name='cn=admin,dc=example,dc=org'
    ldap_service_user_password='admin'
    
    az managed-cassandra datacenter update -g `<resource group>` -c `<cluster name>` -d datacenter-1 \
      --ldap-search-base-dn $ldap_search_base_distinguished_name \
      --ldap-server-certs $ldap_server_certificates \
      --ldap-server-hostname $ldap_server_hostname \
      --ldap-service-user-dn $ldap_service_user_distinguished_name \
      --ldap-svc-user-pwd $ldap_service_user_password
    
  4. 此命令完成后,应能够使用 CQLSH 或任何 Apache Cassandra 开源客户端驱动程序连接到托管实例数据中心,并在上一步中添加用户。

    export SSL_VALIDATE=false
    cqlsh --debug --ssl <data-node-ip> -u <user> -p <password>