Azure Key Vault 和 Managed Identity - 使用 REST 进行本地开发

Azure Key Vault and Managed Identity - local development with REST

我有一个 php 应用程序托管在 Azure VM 中,在 Key Vault 中有一些秘密。我已经设置了托管身份并授予了对保管库的访问权限。

所以我的应用程序可以使用从 Azure 实例元数据服务 (AIMS 169.254.169.254) 获得的令牌成功地从保管库中获取机密。

php 的 Azure SDK 不支持 Key Vault,所以我使用的是 REST 接口。

我的问题是当 运行 在本地时,即我的代码 运行 在 VSCode 中的桌面上,我无法调用 AIMS 来获取令牌,因为我没有托管身份在我的本地机器上。

我只能想到两个选项:

然后我可以确定代码是否是 运行 本地,如果是,从这个环境变量或 localSettings 中读取秘密。

有谁知道更好的方法吗?

谢谢

请注意,Visual Studio 提供了 AzureServiceTokenProvider(),它使用已登录用户的凭据来获取令牌。但不幸的是,我无法使用它。

我发现最好的方法是在本地使用环境变量——如果由于任何原因与密钥保管库的连接失败,代码会回退到该变量

据我所知,我们无法使用 Azure MSI 在本地开发 PHP 应用程序。因此,如果您想在本地访问 Azure Key Vault,我建议您使用服务主体在本地访问 Azure Key Vault。详细步骤如下。 1. 创建一个服务主体

az ad sp create-for-rbac -n <your-application-name> --skip-assignment
az keyvault set-policy --name <your-key-vault-name> --spn $AZURE_CLIENT_ID --secret-permissions backup delete get list purge recover restore set
  1. 获取 Azure AD 访问令牌
Method : Post
Url: https://login.microsoftonline.com/{{directoryId}}/oauth2/v2.0/token
Header: Content-Type: application/x-www-form-urlencoded
Body:
     grant_type=client_credentials
     client_id=<>
     client_secret=<>
     scope=https://vault.azure.net/.default
  1. 调用 key vault rest api 例如 获取秘密
Method: GET
Url: {vaultBaseUrl}/secrets/{secret-name}/{secret-version}?api-version=7.0
Header: Authorization : Bearer <access token>

详情请参考blog