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 文件,其中包含用于存储机密的设置
然后我可以确定代码是否是 运行 本地,如果是,从这个环境变量或 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
- 获取 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
- 调用 key vault rest api
例如
获取秘密
Method: GET
Url: {vaultBaseUrl}/secrets/{secret-name}/{secret-version}?api-version=7.0
Header: Authorization : Bearer <access token>
详情请参考blog。
我有一个 php 应用程序托管在 Azure VM 中,在 Key Vault 中有一些秘密。我已经设置了托管身份并授予了对保管库的访问权限。
所以我的应用程序可以使用从 Azure 实例元数据服务 (AIMS 169.254.169.254) 获得的令牌成功地从保管库中获取机密。
php 的 Azure SDK 不支持 Key Vault,所以我使用的是 REST 接口。
我的问题是当 运行 在本地时,即我的代码 运行 在 VSCode 中的桌面上,我无法调用 AIMS 来获取令牌,因为我没有托管身份在我的本地机器上。
我只能想到两个选项:
- 开发人员创建一个环境变量来保存秘密,或者
- 在我的代码中包含一个 localSettings 文件,其中包含用于存储机密的设置
然后我可以确定代码是否是 运行 本地,如果是,从这个环境变量或 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
- 获取 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
- 调用 key vault rest api 例如 获取秘密
Method: GET
Url: {vaultBaseUrl}/secrets/{secret-name}/{secret-version}?api-version=7.0
Header: Authorization : Bearer <access token>
详情请参考blog。