[英]Azure key vault create in Python
我正在尝试使用本教程( https://docs.microsoft.com/en-us/python/api/overview/azure/key-vault?view=azure-python )以编程方式在 python 中创建密钥库。 直到我调用 client.vaults.create_or_update() 时它抛出异常的最后一步都没有错误,因为我可能没有为 ALLOW_OBJECT_ID 和 ALLOW_TENANT_ID 使用正确的值。 文档说这些值可以在门户网站上找到,但我找不到,有没有办法以编程方式获取它?
错误:srest.exceptions.AuthenticationError:,AdalError:获取令牌请求返回 http 错误:400 和服务器响应:{“error”:“unauthorized_client”,“error_description”:“AADSTS700016:在目录 YY 中找不到标识符为 XXX 的应用程序
代码:
import subprocess
import json
from azure.mgmt.keyvault import KeyVaultManagementClient
from azure.common.credentials import ServicePrincipalCredentials
def get_subscription():
subs = json.loads(subprocess.check_output('az account list',
shell=True).decode('utf-8'))
subscription = subs[1]['id']
cmd = 'az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/%s"' % subscription
creds = json.loads(subprocess.check_output(cmd, shell=True).decode('utf-8'))
return subscription, creds
def create_key_vault(vault_name='TestKeyVault'):
subscription_id, creds = get_subscription()
client_id = creds['appId']
secret = creds['password']
tenant = creds['tenant']
credentials = ServicePrincipalCredentials(client_id=client_id, secret=secret, tenant=tenant)
client = KeyVaultManagementClient(credentials, subscription_id)
ALLOW_OBJECT_ID = client_id
ALLOW_TENANT_ID = tenant
RESOURCE_GROUP = 'SomeRG'
VAULT_NAME = vault_name
# Vault properties may also be created by using the
# azure.mgmt.keyvault.models.VaultCreateOrUpdateParameters
# class, rather than a map.
operation = client.vaults.create_or_update(
RESOURCE_GROUP,
VAULT_NAME,
{
'location': 'eastus',
'properties': {
'sku': {
'name': 'standard'
},
'tenant_id': ALLOW_TENANT_ID,
'access_policies': [{
'object_id': ALLOW_OBJECT_ID,
'tenant_id': ALLOW_TENANT_ID,
'permissions': {
'keys': ['all'],
'secrets': ['all']
}
}]
}
}
)
vault = operation.result()
print(f'New vault URI: {vault.properties.vault_uri}')
好吧,对象可能是 Azure AD 租户中的用户、安全组、服务主体,如果您不熟悉 keyvault 中的访问策略,请查看此文档。
要从语法上获取它们,最简单的方法是在 python 中使用 Azure CLI。
使用az account show
获取tenantId
。
使用az ad user list
获取用户的objectId
。
使用az ad group list
获取安全组的objectId
。
使用az ad sp list
获取服务主体的objectId
。
然后,您应该使用您需要的任何objectId
和上面的tenantId
指定ALLOW_OBJECT_ID
和ALLOW_TENANT_ID
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.