azure - 如何在通过 ARM 创建 Key Vault 时分配“Key Vault Secrets User”RBAC 角色
问题描述
我正在尝试使用 DevOps YAML 管道通过 ARM 部署一套新的资源,到目前为止一切都很好......除了重要的一点 - 在 Azure Key Vault 中管理机密。
关于这条管道有一些规定:
- Key Vault 必须通过 ARM 模板创建(完成)
- ARM 模板需要在新的 Key Vault 中存储机密(完成 - 我认为,无法检查)
- ARM 模板应将“Key Vault Secrets User”角色分配给服务原则(在新的 Key Vault 上),以便...
- YAML 管道(服务原则)可以获得对新机密的访问权限
我是否认为在创建 Key Vault 期间 - ARM 模板可以完全访问它,因此可以分配这些 RBAC 角色?我想我只是不确定如何实现它。
这是描述创建和密钥插入的 ARM 模板部分:
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2021-04-01-preview",
"name": "[variables('keyVaultName')]",
"location": "[resourceGroup().location]",
"tags": "[parameters('resourceTags')]",
"properties": {
"sku": {
"family": "A",
"name": "Standard"
},
"tenantId": "<<SOME TENANTID>>",
"accessPolicies": [],
"enabledForDeployment": false,
"enabledForDiskEncryption": false,
"enabledForTemplateDeployment": true,
"enableSoftDelete": true,
"softDeleteRetentionInDays": 90,
"enableRbacAuthorization": true,
"vaultUri": "[concat('https://', variables('keyVaultName'), '.vault.azure.net/')]",
"provisioningState": "Succeeded"
}
},
{
"type": "Microsoft.KeyVault/vaults/secrets",
"apiVersion": "2019-09-01",
"name": "[concat(variables('keyVaultName'), '/apiKey')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]"
],
"properties": {
"value": "<<SOME API KEY >>"
}
},
解决方案
尝试将此添加到模板中...首先是 roleDefinitionId:
"variables": {
"KeyVaultSecretsUser": "4633458b-17de-408a-b874-0445c86b69e6"
}
然后是角色分配本身。
回复:那个principalId
,不知道你想要什么。如果您想要principalId
部署模板的用户(或服务主体),则必须将其作为参数传递,无法通过模板语言检索它 - 因此请根据需要更改该属性。如果主体不是服务主体(组或用户),则也要更改该principalType
属性。
此外,如果您需要更改principalId
还更新name
roleAssignment 上的属性,以便guid()
维护幂等种子。
{
"scope": "[format('Microsoft.KeyVault/vaults/{0}', variables('keyVaultName'))]",
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2020-04-01-preview",
"name": "[guid(resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName')), parameters('principalId'), variables('KeyVaultSecretsUser'))]",
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', variables('keyVaultName'))]"
],
"properties": {
"roleDefinitionId": "[variables('KeyVaultSecretsUser')]",
"principalId": "[parameters('principalId')]",
"principalType": "ServicePrincipal"
}
}
推荐阅读
- swift - 使用 UIGraphicsImageRenderer 类捕获 UIView 时图像质量不佳
- spring - 如何创建自定义 HttpHeaders
- java - Java (Netty) 应用程序达到 11k 请求/秒的平台期
- typescript - 我可以在 Typescript 命名空间中声明名为“default”的变量吗?
- javascript - 当我的计时器归零时调用一个 div 容器
- sql - 在 BigQuery 中使用一个表的值查询另一个表
- c# - ListView 不在 Windows 窗体中滚动
- python - 从一系列数字中查找所有素数的列表理解?
- sql-server - ExecuteSQLCommand 将布尔值从 False 更改为 NULL
- android - openssl:错误:'g√╓çtΩ┤N▀Kptε╫π∞'是无效命令