Github 操作 Keyvault 策略中的 Azure ARM 模板
Azure ARM templates in Github Actions Keyvault Policies
我有一个创建我的云资源的 .bicep 文件,其中之一是一个新的密钥库,我可以在其中存储来自不同资源的连接字符串,例如 ACR username/password、redis 连接字符串等。
.bicep 文件在 github 动作工作流程中被引用,动作 azure/arm-deploy@v1
我需要能够访问下游的秘密,但为此我需要 运行 一些更新密钥保管库策略的东西,以允许我正在使用的服务主体调用 github 操作工作流 get/list 权限。我试过使用这个:
- 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: []
}
}
]
}
}
我已经浏览了 Microsoft 文档,但感觉就像大海捞针,所以非常感谢对这个非常具体的问题的任何具体答案。
无法从 ARM 模板引用 Azure AD 对象除外对于与 Azure 资源相关联的那些 作为 System-Assigned Identity
或 User-Assigned Identity
.
参考虚拟机System-Assigned Identity
或User-Assigned Identity
的例子:
"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",
目前唯一的方法是从[获取服务主体对象idPortal
或使用 Azure AD Powershell module
或 az CLI
或 copy the clientID from the environment variable
您为 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>
参考:
Quickstart - Use Azure Key Vault secrets in GitHub Actions workflows | Microsoft Docs
我有一个创建我的云资源的 .bicep 文件,其中之一是一个新的密钥库,我可以在其中存储来自不同资源的连接字符串,例如 ACR username/password、redis 连接字符串等。 .bicep 文件在 github 动作工作流程中被引用,动作 azure/arm-deploy@v1 我需要能够访问下游的秘密,但为此我需要 运行 一些更新密钥保管库策略的东西,以允许我正在使用的服务主体调用 github 操作工作流 get/list 权限。我试过使用这个:
- 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: []
}
}
]
}
}
我已经浏览了 Microsoft 文档,但感觉就像大海捞针,所以非常感谢对这个非常具体的问题的任何具体答案。
无法从 ARM 模板引用 Azure AD 对象除外对于与 Azure 资源相关联的那些 作为 System-Assigned Identity
或 User-Assigned Identity
.
参考虚拟机System-Assigned Identity
或User-Assigned Identity
的例子:
"[reference(resourceId('Microsoft.Compute/virtualMachines', variables('vmName')),'2019-12-01', 'Full').identity.principalId]",
目前唯一的方法是从[获取服务主体对象idPortal
或使用 Azure AD Powershell module
或 az CLI
或 copy the clientID from the environment variable
您为 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>
参考:
Quickstart - Use Azure Key Vault secrets in GitHub Actions workflows | Microsoft Docs