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

如何在 Azure Managed Instance for Apache Cassandra 中启用 LDAP 身份验证

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

重要

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

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

先决条件

在 Azure 中部署 LDAP 服务器

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

  1. 使用 Ubuntu Server 18.04 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. 运行以下命令。 使用您之前为 LDAP 服务器创建的 DNS 名称替换 <dnsname>。 此命令将启用了 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 服务器而跳过了上一部分,请确保它已启用服务器 SSL 证书。 为 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> 替换为适当的值,将 <dnsname> 替换为你为 LDAP 服务器创建的 DNS 名称。

    注意

    以下命令基于前面部分中的 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>
    

后续步骤