你当前正在访问 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 中部署虚拟机。 可以按照此处的说明操作。

  2. 为服务器提供一个 DNS 名称:

    Screenshot of virtual machine d n s name in Azure portal.

  3. 在虚拟机上安装 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
    

    Screenshot of output from command to verify certificate.

  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)上传到你的 clouddrive

    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>
    

后续步骤