问题描述
在使用Azure Key Vault的过程中,遇见无法获取机密信息,在不方便直接写代码的情况下,快速使用Azure CLI指令来验证当前使用的认证是否可以获取到正确的机密值。
使用CLI的指令为:
第一步:设置azure 的云环境参数,指定为中国区云服务
az cloud set --name AzureChinaCloud
第二步:使用az login并且指定 servie principal来完成登录
az login --service-principal --tenant <Tenant-ID> --username <Client-ID> --password <Client-secret> --output table
第三步:获取azure key vault的机密,但是遇见server principal因为没有权限绑定订阅号而无法完成。
az keyvault secret show --name "ExamplePassword" --vault-name "<your-unique-keyvault-name>" --query "value"
结果却无法获取到机密值:
问题解答
因为需要快速的办法来使用Service Principal账号是否有权限,是否能成功获取到Key Vault机密信息,在不写代码的情况下,处理CLI指令外,还有REST API可以调用。所以想到了使用curl指令直接调用API。
第一步:安全curl
- 在Windows系统中,下载到本地后即可使用:https://curl.se/windows/
- 在Linux系统中,使用命令:sudo apt-get install curl 进行安装。
第二步:通过Service Principal的账号信息在AAD中获取到Token
curl https://login.partner.microsoftonline.cn/<Tenant-ID>/oauth2/token --data "grant_type=client_credentials&client_id=<Client-ID>&client_secret=<Client-secret>&resource=https://vault.azure.cn"
- 替换 <Tenant-ID>,<Client-ID>,<Client-secret>为真实值
第三步:调用Key Vault API获取结果
curl https://<your-key-vault-name>.vault.azure.cn/secrets/<your-secret-name>?api-version=7.4 -H "Authorization: Bearer <your-token-in-step-2>"
- 替换 <your-key-vault-name>,<your-secret-name>,<your-token-in-step-2>为真实值
执行结果
附录:Azure CLI 和 CURL 合集
# Azure CLI: az cloud set --name AzureChinaCloud az login --service-principal --tenant <Tenant-ID> --username <Client-ID> --password <Client-secret> --output table az keyvault secret show --name "ExamplePassword" --vault-name "<your-unique-keyvault-name>" --query "value" # CURL: curl https://login.partner.microsoftonline.cn/<Tenant-ID>/oauth2/token --data "grant_type=client_credentials&client_id=<Client-ID>&client_secret=<Client-secret>&resource=https://vault.azure.cn" curl https://<your-key-vault-name>.vault.azure.cn/secrets/<your-secret-name>?api-version=7.4 -H "Authorization: Bearer <your-token-in-step-2>"
参考资料
1: https://docs.azure.cn/zh-cn/key-vault/secrets/quick-create-cli
2: https://learn.microsoft.com/en-us/azure/databricks/dev-tools/azure-cli-login-service-principal
3: https://jiasli.github.io/azure-notes/aad/Service-Principal-get-token-with-curl.html