设置 Azure EnvironmentCredential()
Setting Azure EnvironmentCredential()
我在具有动态 IP 地址的 Azure VM 上。登录后,我可以使用以下 python 代码毫无问题地检索机密;
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
credential = DefaultAzureCredential()
secret_client = SecretClient(vault_url="https://xxxx/", credential=credential)
secret = secret_client.get_secret("testSecret")
我需要在 VM 启动时检索机密,但当我未登录以启用其他进程时 运行。当我注销时,我注意到上面的代码失败了。系统管理员给了我 AZURE_CLIENT_ID
、AZURE_CLIENT_SECRET
、AZURE_TENANT_ID
和 VAULT_URL
让我将它们设置为 EnvironmentCredentials。
我在CMD中设置如下;
SETX AZURE_CLIENT_ID "pppp"
SETX AZURE_CLIENT_SECRET "mmmm"
SETX AZURE_TENANT_ID "kkkk"
SETX VAULT_URL "xxxx"
当我查看系统环境设置时,我可以看到它们已经设置好
我尝试使用此代码检索我的秘密,
from azure.keyvault.secrets import SecretClient
VAULT_URL = os.environ["VAULT_URL"]
credential = EnvironmentCredential()
client = SecretClient(vault_url=VAULT_URL, credential=credential)
password = client.get_secret("testSecret").value
我遇到了这个错误
raise HttpResponseError(response=response, model=error)
azure.core.exceptions.HttpResponseError: (Forbidden) The user, group or application 'pppp;iss=https://sts.windows.net/kkkk/' does not have secrets get permission on key vault 'name of my vault-vault;location=australiasoutheast'. For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287
问题
系统管理员确认颁发的凭据是服务主体的正确详细信息。
- 如何纠正这个或者我做错了什么?
- 有没有办法让我打印 DefaultAzureCredentials 以便我设置与 EnvironmentCredential 相同,因为我相信为什么我在登录时恢复机密是在我登录时缓存凭据?
非常感谢您的帮助。
How can correct this or what am I doing wrong?
该错误表示您的服务主体在您的密钥库中没有正确的秘密权限 -> Access policies
,要解决此问题,请将错误消息中提到的应用程序(服务主体)添加到 Access policies
在 Azure 门户的密钥库中具有 Get
秘密权限。如果仍然无法正常工作,请尝试在 System variables
中设置环境变量,而不是 User variables for xxx
,如您的屏幕截图所示。
Is there a way for me to print DefaultAzureCredentials so that I set the same as EnvironmentCredential because I believe why I recover secrets when I am logged in is that the credentials are cached when I sign in?
不需要这样做,DefaultAzureCredential
尝试按此顺序通过以下机制进行身份验证,请参阅 here。如果您之前没有设置环境变量,它应该使用您的 VM 的托管身份进行身份验证。
我在具有动态 IP 地址的 Azure VM 上。登录后,我可以使用以下 python 代码毫无问题地检索机密;
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
credential = DefaultAzureCredential()
secret_client = SecretClient(vault_url="https://xxxx/", credential=credential)
secret = secret_client.get_secret("testSecret")
我需要在 VM 启动时检索机密,但当我未登录以启用其他进程时 运行。当我注销时,我注意到上面的代码失败了。系统管理员给了我 AZURE_CLIENT_ID
、AZURE_CLIENT_SECRET
、AZURE_TENANT_ID
和 VAULT_URL
让我将它们设置为 EnvironmentCredentials。
我在CMD中设置如下;
SETX AZURE_CLIENT_ID "pppp"
SETX AZURE_CLIENT_SECRET "mmmm"
SETX AZURE_TENANT_ID "kkkk"
SETX VAULT_URL "xxxx"
当我查看系统环境设置时,我可以看到它们已经设置好
我尝试使用此代码检索我的秘密,
from azure.keyvault.secrets import SecretClient
VAULT_URL = os.environ["VAULT_URL"]
credential = EnvironmentCredential()
client = SecretClient(vault_url=VAULT_URL, credential=credential)
password = client.get_secret("testSecret").value
我遇到了这个错误
raise HttpResponseError(response=response, model=error)
azure.core.exceptions.HttpResponseError: (Forbidden) The user, group or application 'pppp;iss=https://sts.windows.net/kkkk/' does not have secrets get permission on key vault 'name of my vault-vault;location=australiasoutheast'. For help resolving this issue, please see https://go.microsoft.com/fwlink/?linkid=2125287
问题 系统管理员确认颁发的凭据是服务主体的正确详细信息。
- 如何纠正这个或者我做错了什么?
- 有没有办法让我打印 DefaultAzureCredentials 以便我设置与 EnvironmentCredential 相同,因为我相信为什么我在登录时恢复机密是在我登录时缓存凭据?
非常感谢您的帮助。
How can correct this or what am I doing wrong?
该错误表示您的服务主体在您的密钥库中没有正确的秘密权限 -> Access policies
,要解决此问题,请将错误消息中提到的应用程序(服务主体)添加到 Access policies
在 Azure 门户的密钥库中具有 Get
秘密权限。如果仍然无法正常工作,请尝试在 System variables
中设置环境变量,而不是 User variables for xxx
,如您的屏幕截图所示。
Is there a way for me to print DefaultAzureCredentials so that I set the same as EnvironmentCredential because I believe why I recover secrets when I am logged in is that the credentials are cached when I sign in?
不需要这样做,DefaultAzureCredential
尝试按此顺序通过以下机制进行身份验证,请参阅 here。如果您之前没有设置环境变量,它应该使用您的 VM 的托管身份进行身份验证。