python - Python SDK 未经授权访问 Key Vault
问题描述
def auth_callback(server, resource, scope):
credentials = ServicePrincipalCredentials(
client_id = os.getenv('ARM_CLIENT_ID'),
secret = os.getenv('ARM_CLIENT_SECRET'),
tenant = os.getenv('ARM_TENANT_ID'),
resource = "https://vault.azure.net/"
)
token = credentials.token
return token['token_type'], token['access_token']
kv_client = KeyVaultClient(KeyVaultAuthentication(auth_callback))
secret = kv_client.get_secret("https://xxx.vault.azure.net/", "CLIENT-SECRET", KeyVaultId.version_none).value.encode()
完全相同的代码适用于 2 个不同的租户(在第三个租户中不起作用)。应用程序服务主体被授予订阅的所有者权限(只是为了确定),授予特定的秘密权限,尝试所有权限,还尝试启用高级权限(请注意,我正在按下save
按钮),使用两个门户授予访问权限和powershell(相同的最终结果)。
我看到了这些:
以编程方式创建 Azure KeyVault 机密时,如何修复“不允许操作‘设置’”错误?
Azure 密钥保管库:访问被拒绝
确切的错误:
secret = kv_client.get_secret("https://xxx.vault.azure.net/", "CLIENT-SECRET", KeyVaultId.version_none).value.
File "/usr/local/lib/python3.6/site-packages/azure/keyvault/v7_0/key_vault_client.py", line 1846, in get_secret
raise models.KeyVaultErrorException(self._deserialize, response)
azure.keyvault.v7_0.models.key_vault_error_py3.KeyVaultErrorException: Operation returned an invalid status code 'Unauthorized'
解决方案
看起来是这样的:
resource = "https://vault.azure.net/"
需要是这样的:
resource = "https://vault.azure.net"
否则没有任何作用。
推荐阅读
- java - SoundBoard 将音频输出更改为虚拟音频电缆
- ajax - 带有ajax的highcharts折线图
- c# - Marshal.Copy 引发 ArgumentOutOfRangeException
- android - Velocity Tracker 为 android 9.0 返回不同的值
- excel - 在尝试使代码更快时键入不匹配
- c++ - 向量范围构造函数如何在下面的类中工作?
- excel - 如何在 Excel 中嵌入 PDF 而不是作为图标?
- php - laravel ColumnDefinition 类中的方法在哪里实现?
- javascript - 如何使用scrollmagic和Gsap并排使用水平和垂直滚动
- swift - 从图像资产中获取数据