Azure:Python SDK 和 KeyVault -- 服务主体
Azure: Python SDK and KeyVault -- Service Principal
我不清楚应该如何按照此处列出的指南建立服务主体:https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/keyvault/azure-keyvault-secrets/README.md#create-a-service-principal-optional
我有一个加载了 docker 图像的 Azure 应用程序服务(Web 应用程序)。此应用服务还绑定了一个应用注册以进行身份验证。
我可以针对三个潜在目标执行代码:az ad sp create-for-rbac --name http://my-application --skip-assignment
:
- 我的 Azure App Service Web 应用名称
- 我的 Azure AD 应用程序注册名称
- 一个全新的名字
我要做什么 select 为什么?
稍后在指南中,它要求设置三个环境变量,如下所示:
export AZURE_CLIENT_ID="generated app id"
export AZURE_CLIENT_SECRET="random password"
export AZURE_TENANT_ID="tenant id"
可以在我的 Azure App Service Web 应用程序 Configuration
-> Application Settings
中设置这些吗?还是必须在我的 Dockerfile 中设置它们?
如果要从 Python 中容器的 Azure Web 应用程序访问 Azure Key Vault,推荐的方法是使用 Managed Identity 而不是创建和管理您自己的服务委托人。 Web App for Containers 支持托管标识。
在 Python 容器中,您可以通过以下代码行使用托管身份访问 Azure Key Vault 机密
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
credentials = DefaultAzureCredential()
client = SecretClient("https://yourkeyvault.vault.azure.net/", credentials)
secret = client.get_secret("yoursecretname").value
这样您就不必存储任何服务主体机密,无论是在容器中还是作为环境变量。 DefaultAzureCredential()
将尝试调用 Microsoft 提供的托管身份服务,该服务在您的应用程序服务中可用,可用于创建令牌,该令牌反过来用于针对 Key Vault 进行身份验证。
之后,构建您的 Python 映像并将其上传到容器注册表。然后在创建您的应用服务时引用图像。
az webapp create --resource-group <resoure group name> --plan <app service plan name> --name <app name> --deployment-container-image-name <container registry name>.azurecr.io/<image name>
接下来转到您创建的应用程序服务 > 身份并打开系统分配的托管身份
您将获得创建的服务主体的对象 ID。在您的 Key Vault 中,转到“访问策略”并使用您需要的权限添加此对象 ID(假设您需要在此示例中从保管库中获取秘密)
您现在应该能够从 Azure Key Vault 中检索机密。
我不清楚应该如何按照此处列出的指南建立服务主体:https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/keyvault/azure-keyvault-secrets/README.md#create-a-service-principal-optional
我有一个加载了 docker 图像的 Azure 应用程序服务(Web 应用程序)。此应用服务还绑定了一个应用注册以进行身份验证。
我可以针对三个潜在目标执行代码:az ad sp create-for-rbac --name http://my-application --skip-assignment
:
- 我的 Azure App Service Web 应用名称
- 我的 Azure AD 应用程序注册名称
- 一个全新的名字
我要做什么 select 为什么?
稍后在指南中,它要求设置三个环境变量,如下所示:
export AZURE_CLIENT_ID="generated app id"
export AZURE_CLIENT_SECRET="random password"
export AZURE_TENANT_ID="tenant id"
可以在我的 Azure App Service Web 应用程序 Configuration
-> Application Settings
中设置这些吗?还是必须在我的 Dockerfile 中设置它们?
如果要从 Python 中容器的 Azure Web 应用程序访问 Azure Key Vault,推荐的方法是使用 Managed Identity 而不是创建和管理您自己的服务委托人。 Web App for Containers 支持托管标识。
在 Python 容器中,您可以通过以下代码行使用托管身份访问 Azure Key Vault 机密
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
credentials = DefaultAzureCredential()
client = SecretClient("https://yourkeyvault.vault.azure.net/", credentials)
secret = client.get_secret("yoursecretname").value
这样您就不必存储任何服务主体机密,无论是在容器中还是作为环境变量。 DefaultAzureCredential()
将尝试调用 Microsoft 提供的托管身份服务,该服务在您的应用程序服务中可用,可用于创建令牌,该令牌反过来用于针对 Key Vault 进行身份验证。
之后,构建您的 Python 映像并将其上传到容器注册表。然后在创建您的应用服务时引用图像。
az webapp create --resource-group <resoure group name> --plan <app service plan name> --name <app name> --deployment-container-image-name <container registry name>.azurecr.io/<image name>
接下来转到您创建的应用程序服务 > 身份并打开系统分配的托管身份
您将获得创建的服务主体的对象 ID。在您的 Key Vault 中,转到“访问策略”并使用您需要的权限添加此对象 ID(假设您需要在此示例中从保管库中获取秘密)
您现在应该能够从 Azure Key Vault 中检索机密。