【问题标题】:Azure Key Vault and Managed Identity - local development with RESTAzure Key Vault 和托管标识 - 使用 REST 进行本地开发
【发布时间】:2020-03-10 09:44:00
【问题描述】:

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

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

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

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

我能想到的只有两个选项:

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

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

有人知道更好的方法吗?

谢谢

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

【问题讨论】:

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


    【解决方案1】:

    据我所知,我们没有办法使用 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-06-08
        • 2021-10-11
        • 2020-06-02
        • 2021-06-09
        • 2020-08-29
        • 1970-01-01
        • 2021-11-07
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多