Azure Key Vault和托管身份-使用REST进行本地开发

时间:2019-11-14 12:22:04

标签: php azure token azure-keyvault azure-managed-identity

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

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

用于PHP的Azure SDK不支持Key Vault,因此我正在使用REST界面。

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

我只能想到两个选择:

  • 开发人员创建一个环境变量来保存机密,或者
  • 在我的代码中包含一个localSettings文件,并带有用于存储机密的设置

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

有人知道这样做的更好方法吗?

谢谢

请注意,Visual Studio提供了AzureServiceTokenProvider(),该服务使用登录用户的凭据来获取令牌。但是很遗憾,这对我不可用。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

据我所知,我们无法使用Azure MSI在本地开发PHP应用程序。因此,如果要在本地访问Azure密钥保管库,建议您使用服务主体在本地访问Azure密钥保管库。详细步骤如下。 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

答案 2 :(得分:0)

非常感谢您的答复。

我决定选择环境变量选项。

还考虑了创建服务主体,但是我不想存储主体凭证(用于获取令牌)。

谢谢!