繁体   English   中英

Github 操作 Keyvault 策略中的 Azure ARM 模板

[英]Azure ARM templates in Github Actions Keyvault Policies

我有一个创建我的云资源的 .bicep 文件,其中一个是一个新的密钥库,我可以在其中存储来自不同资源的连接字符串,例如 ACR 用户名/密码、redis 连接字符串等。.bicep 文件在使用 azure/arm-deploy@v1 操作的 github 操作工作流我需要能够访问下游的机密,但为此我需要运行一些更新密钥库策略的东西,以允许我使用的服务主体调用 github操作工作流获取/列出权限。 我尝试使用这个:

      - name: set policies
    continue-on-error: true
    env:
      clientId: ${{ secrets.AZURE_CREDENTIALS }}
    run: |
      az keyvault set-policy -n kv-dev-lightningocr --secret-permissions get list set --spn $clientId

但 $clientId 未按预期插入,如下面的快照所示: 在此处输入图像描述

可以直接在 .bicep 模板中设置策略,但我遇到了问题,因为我不确定如何替换模板中 objectId 的值。

    resource keyVaultPolicies 'Microsoft.KeyVault/vaults/accessPolicies@2021-06-01-preview' = {
  name: '${keyVault.name}/add'
  properties: {
    accessPolicies: [
      {
        tenantId: subscription().tenantId
        objectId: // how to get the objectId of the service principal that calls the azure deploy action? 
        permissions: {
          keys: []
          secrets: [
            'get'
            'list'
          ]
          certificates: []
        }
      }
    ]
  }
}

我已经浏览了微软的文档,但感觉就像大海捞针一样,所以对这个非常具体的问题的任何具体答案都非常合适。

无法从 ARM 模板中引用 Azure AD 对象,但与 Azure 资源关联的对象除外,这些对象作为System-Assigned IdentityUser-Assigned Identity

引用虚拟机的System-Assigned IdentityUser-Assigned Identity的示例:

"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",

The only way for now is to get the Service principal object id from Portal or using Azure AD Powershell module or az CLI or copy the clientID from the environment variable that you have stored for the Github Actions .

然后你可以直接将它粘贴到下面的二头肌模板中:

  resource keyVaultPolicies 'Microsoft.KeyVault/vaults/accessPolicies@2021-06-01-preview' = {
  name: '${keyVault.name}/add'
  properties: {
    accessPolicies: [
      {
        tenantId: subscription().tenantId
        objectId:// copied from portal, az cli,powershell or environment variable
        permissions: {
          keys: []
          secrets: [
            'get'
            'list'
          ]
          certificates: []
        }
      }
    ]
  }
}

您使用环境变量的以下方式也是错误的。

name: set policies
    continue-on-error: true
    env:
      clientId: ${{ secrets.AZURE_CREDENTIALS }}
    run: |
      az keyvault set-policy -n kv-dev-lightningocr --secret-permissions get list set --spn $clientId

${{ secrets.AZURE_CREDENTIALS }}将包含类似下面的内容,并且您正在使用整个Azure_credential环境变量引用clientid ,这是不可能的。

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

AZURE_CREDENTIALS用作登录 Azure 的凭据变量,如下所示:

steps:
    # checkout the repo
    - uses: actions/checkout@v2
    - uses: Azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

因此,在 Github 操作中,您还必须对其进行硬编码,如下所示:

name: set policies
    continue-on-error: true
    run: |
      az keyvault set-policy -n kv-dev-lightningocr --secret-permissions get list set --spn <ClientID>

参考:

快速入门 - 在 GitHub 操作工作流中使用 Azure Key Vault 机密 | 微软文档

从 Azure 管道设置 Key Vault 访问策略

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM