【问题标题】:How can I pass a service principal password stored in vault to the az aks create --client-secret parameter如何将存储在保管库中的服务主体密码传递给 az aks create --client-secret 参数
【发布时间】:2018-12-30 21:01:31
【问题描述】:

我无法为 az aks create --client-secret 参数传递存储在保管库中的服务主体密码

复制 1.) 创建一个保管库

az keyvault create \
    --name ${AZURE_VAULT_NAME} \
    --resource-group ${AZURE_RESOURCE_GROUP} \
    --location ${AZURE_LOCATION} \
    --enabled-for-deployment 'true'

2.) 使用保管库创建服务主体帐户

az ad sp create-for-rbac \
    --skip-assignment \
    --name ${AZURE_SERVICE_PRINCIPAL_NAME} \
    --create-cert \
    --cert ${AZURE_VAULT_SERVICE_PRINCIPAL_KEY_NAME} \
    --keyvault ${AZURE_VAULT_NAME}

3.) 到 az ad sp create 的输出显示为

{
  "appId": "d216c019-cd17-4350-a467-77be6e76c135",
  "displayName": "aksServicePrincipalPOC",
  "name": "http://aksServicePrincipalPOC",
  "password": null,
  "tenant": "06dd2342-6928-44d9-bd0f-bfb06b15a097"
}

注意密码为空。

4.) 使用服务主体创建 aks 集群。似乎没有办法为 az aks create 命令传递机密或保管库名称。我没有设置 --client-secret 的价值,因为它在创建服务主体帐户时没有返回。

az aks create \
    --resource-group ${AZURE_RESOURCE_GROUP} \
    --name ${AKS_CLUSTER_NAME} \
    --admin-username ${AKS_NODE_ADMIN_USERNAME} \
    --node-count ${AKS_MIN_NUMBER_OF_NODES} \
    --service-principal ${AZURE_SERVICE_PRINCIPAL} \
    --client-secret ??????????? \
    --ssh-key-value ${AKS_VM_SSH_KEY_FILE_DIR}/${AKS_VM_SSH_KEY_FILE_NAME}.pub \    
    --network-plugin azure \
    --vnet-subnet-id ${AZURE_PRIVATE_SUBNET_ID} \
    --docker-bridge-address ${AZURE_AKS_DOCKER_BRIDGE_ADDRESS} \
    --dns-service-ip ${AZURE_AKS_DNS_SERVICE_IP} \
    --service-cidr ${AZURE_AKS_SERVICE_CIDR}

预期行为: az aks create 应该有一个选项,可以让它从维护该机密的保管库中提取服务主体密码。

【问题讨论】:

    标签: azure-keyvault azure-cli azure-aks


    【解决方案1】:

    这不起作用,因为这会为服务主体创建证书身份验证,而不是密码身份验证(因此它不会返回任何密码值)。

    因为您要求它创建启用证书身份验证的服务主体。

    【讨论】:

    • 您如何建议这样做,使 aks 集群中的节点能够从保管库中检索机密,而不必将保管库凭证存储在某个第三个站点中以供 aks 节点提取它下来访问保险库。
    • AKS 无法自行从 KV 中提取任何凭据。所以我不太确定你想在这里实现什么。您的选择是:带密码的服务主体,仅此而已。您不能以任何其他方式创建 AKS 群集。如果您希望您的 pod 能够从 KV 中提取机密信息,则可以使用诸如 KV“适配器”之类的选项用于 kubernetes 和\或用于工作节点的托管服务标识。
    • @4c74356b41 今天(2020 年 1 月 6 日)使用 terraform 进行了尝试,效果非常好。我能够成功地将存储在 keyvault 中的服务主体客户端 ID 和机密传递给 AKS,并且它也可以完美启动。
    • 您传递了什么作为客户端密码?你是怎么通过证书的? @vishal.k
    • @4c74356b41 不,我没有使用证书。我使用带密码的服务主体。客户端 ID 作为密钥存储在密钥库中,密码作为单独的密钥存储在同一密钥库中。在 terraform 脚本中,我只是提到了秘密的名称,它就起作用了。就是这样。即使我没想到它会起作用,但只是想尝试看看 o/p 错误是什么。令我惊讶的是,它接受并奏效了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多