我在Azure VM中托管了一个php应用程序,并且在Key Vault中具有一些秘密。我已经设置了受管身份并授予了对保管库的访问权限。
因此,我的应用程序可以使用从Azure实例元数据服务(AIMS 169.254.169.254)获得的令牌成功地从Vault中获取机密。
用于PHP的Azure SDK不支持Key Vault,因此我正在使用REST界面。
我的问题是在本地运行时,即我的代码在VSCode上的桌面上运行,我无法调用AIMS来获取令牌,因为我的本地计算机上没有托管身份。
我只能想到两个选择:
然后我可以确定代码是否在本地运行,如果是,则从此环境变量或localSettings中读取机密。
有人知道这样做的更好方法吗?
谢谢
请注意,Visual Studio提供了AzureServiceTokenProvider(),该服务使用登录用户的凭据来获取令牌。但是很遗憾,这对我不可用。
答案 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
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
Method: GET
Url: {vaultBaseUrl}/secrets/{secret-name}/{secret-version}?api-version=7.0
Header: Authorization : Bearer <access token>
有关更多详细信息,请参阅blog。
答案 2 :(得分:0)
非常感谢您的答复。
我决定选择环境变量选项。
还考虑了创建服务主体,但是我不想存储主体凭证(用于获取令牌)。
谢谢!