- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以下二头肌脚本来执行以下步骤:
基础设施分为 2 个资源组:
rg-shared => where the 2 key vault are (1 keyvault for key and GUID, and 1 keyvault for secrets (connection string)
rg-storage-account => where all the storage account get created
在 azure 的二头肌中,我有以下脚本:
存储.bicep
param ManagedIdentityid string
param uri string
param kvname string
param keyvaultrg string = 'XXXX' //<== SHARED Resource Group
var keyVaultKeyPrefix = 'Key-Data-'
var storagePrefix = 'sthritesteur'
param tenantCodes array = [
'aabb'
'bbcc'
'ccdd'
]
// Create storage accounts
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-04-01' = [for tenantCode in tenantCodes: {
name: '${storagePrefix}${tenantCode}'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_RAGRS'
}
// Assign the identity
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${ManagedIdentityid}':{}
}
}
properties: {
allowCrossTenantReplication: true
minimumTlsVersion: 'TLS1_2'
allowBlobPublicAccess: false
allowSharedKeyAccess: true
networkAcls: {
bypass: 'AzureServices'
virtualNetworkRules: []
ipRules: []
defaultAction: 'Allow'
}
supportsHttpsTrafficOnly: true
encryption: {
identity: {
// specify which identity to use
userAssignedIdentity: ManagedIdentityid
}
keySource: 'Microsoft.Keyvault'
keyvaultproperties: {
keyname: '${kvname}-${keyVaultKeyPrefix}${toUpper(tenantCode)}'
keyvaulturi:uri
}
services: {
file: {
keyType: 'Account'
enabled: true
}
blob: {
keyType: 'Account'
enabled: true
}
}
}
accessTier: 'Hot'
}
}]
resource storage_Accounts_name_default 'Microsoft.Storage/storageAccounts/blobServices@2021-04-01' = [ for (storageName, i) in tenantCodes :{
parent: storageAccount[i]
name: 'default'
properties: {
changeFeed: {
enabled: false
}
restorePolicy: {
enabled: false
}
containerDeleteRetentionPolicy: {
enabled: true
days: 7
}
cors: {
corsRules: []
}
deleteRetentionPolicy: {
enabled: true
days: 30
}
isVersioningEnabled: true
}
}]
module connectionString 'shared.bicep' = [for (storageName, i) in tenantCodes :{
scope: resourceGroup(keyvaultrg)
name: storageName
params: {
storageAccountString: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount[i].name};AccountKey=${listKeys(storageAccount[i].id, storageAccount[i].apiVersion).keys[0].value};EndpointSuffix=${environment().suffixes.storage}'
}
}]
keyvaultclient.bicep
param deploymentIdOne string = newGuid()
param deploymentIdTwo string = newGuid()
output deploymentIdOne string = '${deploymentIdOne}-${deploymentIdTwo}'
output deploymentIdTwo string = deploymentIdTwo
param storagerg string = 'XXXX' //<=== Storage Accounts Resource Groups
param sharedManagedIdentity string = 'mgn-identity-shared'
param keyvaultmain string = 'XXXX' //<=== KeyVault Name where to create GUID AND Keys
param tenantCodes array = [
'aabb'
'bbcc'
'ccdd'
]
var clientDataKeyPrefix = 'Key-Data-'
resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
name: sharedManagedIdentity
location: resourceGroup().location
}
resource keyVaultClients 'Microsoft.KeyVault/vaults@2021-06-01-preview' existing = {
name: keyvaultmain
}
resource kvClientsKey 'Microsoft.KeyVault/vaults/keys@2021-06-01-preview' = [for code in tenantCodes: {
parent:keyVaultClients
name: '${keyVaultClients.name}-${clientDataKeyPrefix}${toUpper(code)}'
properties: {
keySize: 2048
kty: 'RSA'
// Assign the least permission
keyOps: [
'unwrapKey'
'wrapKey'
]
}
}]
resource accessPolicy 'Microsoft.KeyVault/vaults/accessPolicies@2021-06-01-preview' = {
parent:keyVaultClients
name: 'add'
properties: {
accessPolicies: [
{
tenantId: subscription().tenantId
objectId: managedIdentity.properties.principalId
permissions: {
// minimum required permission
keys: [
'get'
'unwrapKey'
'wrapKey'
]
}
}
]
}
}
resource clientLearnersGuid 'Microsoft.KeyVault/vaults/secrets@2021-06-01-preview' = [for tenant in tenantCodes: {
parent:keyVaultClients
name: '${keyVaultClients.name}${tenant}'
properties: {
contentType: 'GUID Key'
value: '${deploymentIdOne}-${deploymentIdTwo}'
}
dependsOn:kvClientsKey
}]
module StorageAccount 'storage.bicep' = [for (storageName, i) in tenantCodes :{
scope: resourceGroup(storagerg)
name: storageName
params: {
ManagedIdentityid:managedIdentity.id
kvname:keyVaultClients.name
uri:keyVaultClients.properties.vaultUri
}
dependsOn:clientLearnersGuid
}]
共享.bicep
param keyvaultshared string = 'XXXX' //<=== Key Vault Where to Store the Storage Connection String Secret
param storageAccountString string
param tenantCodes array = [
'aabb'
'bbcc'
'ccdd'
]
resource keyVaultShared 'Microsoft.KeyVault/vaults@2021-06-01-preview' existing = {
name: keyvaultshared
}
resource storageAccountConnectionString 'Microsoft.KeyVault/vaults/secrets@2021-06-01-preview' = [for tenant in tenantCodes: {
parent:keyVaultShared
name: '${keyVaultShared.name}-test${tenant}'
properties:{
contentType: '${tenant} Storage Account Connection String'
value: storageAccountString
}
}]
这些脚本根据tenantCode
执行我需要的所有步骤。 。这是完美的。如果我只有 1 tenantCode
声明后,一切都很顺利和完美,但是当我尝试声明超过 1 时,我面临的问题就会出现。这就是问题的细节。
当我声明超过 1 个代码时,脚本仍然创建了我需要的所有资源:存储帐户、 key 、加密、GUID 和 ConnectionStrings Secret。但无论如何它在 ConnectionStrings Secret
上失败了。
失败的原因是在这些文件中的代码块中:
共享.bicep
resource storageAccountConnectionString 'Microsoft.KeyVault/vaults/secrets@2021-06-01-preview' = [for tenant in tenantCodes: {
parent:keyVaultShared
name: '${keyVaultShared.name}-test${tenant}'
properties:{
contentType: '${tenant} Storage Account Connection String'
value: storageAccountString
}
}]
和
keuvaultsclient.bicep*
module StorageAccount 'storage.bicep' = [for (storageName, i) in tenantCodes :{
scope: resourceGroup(storagerg)
name: storageName
params: {
ManagedIdentityid:managedIdentity.id
kvname:keyVaultClients.name
uri:keyVaultClients.properties.vaultUri
}
dependsOn:clientLearnersGuid
}]
我有一个多重循环,我意识到在 secret 下的共享 keystore 中,我有正确数量的 secret (有 3 个租户代码,我有 3 个 secret ),并且在每个 secret 下我有 3 个版本(对于每个租户编码它为每个 secret 生成一个新版本)。此循环错误导致二头肌脚本 fail
带有以下消息:
{"status":"Failed","error":{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.","details":[{"code":"Conflict","message":"{\r\n \"status\": \"Failed\",\r\n \"error\": {\r\n \"code\": \"ResourceDeploymentFailure\",\r\n \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.\",\r\n \"details\": [\r\n {\r\n \"code\": \"DeploymentFailed\",\r\n \"message\": \"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.\",\r\n \"details\": [\r\n {\r\n \"code\": \"Conflict\",\r\n \"message\": \"{\\r\\n \\\"error\\\": {\\r\\n \\\"code\\\": \\\"StorageAccountOperationInProgress\\\",\\r\\n \\\"message\\\": \\\"An operation is currently performing on this storage account that requires exclusive access.\\\"\\r\\n }\\r\\n}\"\r\n },\r\n {\r\n \"code\": \"Conflict\",\r\n \"message\": \"{\\r\\n \\\"error\\\": {\\r\\n \\\"code\\\": \\\"StorageAccountOperationInProgress\\\",\\r\\n \\\"message\\\": \\\"An operation is currently performing on this storage account that requires exclusive access.\\\"\\r\\n }\\r\\n}\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}"}]}}
我在这个阶段完全受阻,因为我是二头肌初学者,所以我用尽了所有选项并尝试尝试解决这个问题。
如何重现
az deployment group create -f ./keyvaultsclient.bicep -g <rg-where-keyvaults-are>
我希望我已经足够清楚地解释了我面临的问题,如果您需要更多详细信息,请告诉我。
非常感谢您的时间和帮助
最佳答案
我通过做一些更改测试了相同的代码,请尝试在 .bicep
文件中进行相同的更改:
keyvaultclient.bicep:
删除了模块循环,因为它为同一事物创建了 2 个模块。
module StorageAccount './storage.bicep' = {
scope: resourceGroup(storagerg)
name: 'NestedStorage'
params: {
ManagedIdentityid:managedIdentity.id
kvname:keyVaultClients.name
uri:keyVaultClients.properties.vaultUri
}
dependsOn:clientLearnersGuid
}
storage.bicep:
删除了模块的循环,并添加了仅存储连接字符串的循环,该字符串将输出存储在数组中并将其传递到下一个模块。
module connectionString './shared.bicep'={
scope: resourceGroup(keyvaultrg)
name: 'KeyvaultNested'
params: {
storageAccountString: [for (tenant,i) in tenantCodes :{
id:'DefaultEndpointsProtocol=https;AccountName=${storageAccount[i].name};AccountKey=${listKeys(storageAccount[i].id, storageAccount[i].apiVersion).keys[0].value};EndpointSuffix=${environment().suffixes.storage}'
}]
}
}
shared.bicep:
将 StorageAccountString
的参数类型从字符串更改为数组,并在 secret 部分添加 [for (tenant,i) intenantCodes
,以便我可以将值指定为storageAccountString[i].id
.
param storageAccountString array
resource storageAccountConnectionString 'Microsoft.KeyVault/vaults/secrets@2021-06-01-preview' = [for (tenant,i) in tenantCodes: {
parent:keyVaultShared
name: '${keyVaultShared.name}-test${tenant}'
properties:{
contentType: '${tenant} Storage Account Connection String'
value: storageAccountString[i].id
}
}]
输出:
关于Azure 二头肌将存储帐户连接字符串传递到 Secret Keyvault 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69735711/
我正在尝试找到某种方法将我的证书从一个 Azure 订阅中的 Key Vault 移动到另一个 Azure 订阅。有没有办法这样做> 最佳答案 下面是一种移动 Azure Key Vault 中创建的
在 ARM 模板中,我想在预先存在的 KeyVault 中写入一个 secret - 我尚未将其创建为当前模板的一部分。 我正在使用此代码 { "dependsOn": [
我在 VSTS 中使用以下 Azure Powershell 命令。 (Get-AzureKeyVaultSecret -vaultName "debugkv" -name "CoreConfig-S
这两个库似乎有相似的目的:安全地存储和控制对 token 、密码、API key 和其他 secret 的访问。 我一直在使用 Microsoft.Azure.KeyVault 并取得了一些成功,不是
我最近开始将 Microsoft.Azure.KeyVault 命名空间中的旧 Azure KeyVault 客户端替换为 Azure.Security.KeyVault 中的新客户端。 在获取 se
我最近开始将 Microsoft.Azure.KeyVault 命名空间中的旧 Azure KeyVault 客户端替换为 Azure.Security.KeyVault 中的新客户端。 在获取 se
我目前正在使用 Azure SDK for Go。一切都很顺利,直到我遇到以下问题: keyVault, err := client.Get(context.Background(), "NAME_O
我正在 Azure 中部署虚拟机。用户名和密码是自动创建的,并在部署时作为参数传递。部署虚拟机的资源组也作为参数传递,因此可以是任何内容。 我的Keyvault位于特定资源组中,虚拟机的用户名和密码应
这是一个与 keyvault 相关的问题。我在 keyvault 中存储了 pfx 证书(带有私钥)。从我的服务主体中,我尝试访问 keystore 以获取证书。我正在编写以下代码来检索 pfx 证书
我正在尝试配置 Key Vault 值的定期刷新。我由 Visual Studio 生成的原始代码如下所示 var keyvaultEndpoint = new Uri($"https://{vaul
我正在尝试配置 Key Vault 值的定期刷新。我由 Visual Studio 生成的原始代码如下所示 var keyvaultEndpoint = new Uri($"https://{vaul
我使用下面的代码从 Azure Key Vault 获取证书 private X509Certificate2 GetClientCertificate(string thumbprint)
我使用下面的代码从 Azure Key Vault 获取证书 private X509Certificate2 GetClientCertificate(string thumbprint)
创建新的 KeyVault 时出现以下错误 The subscription is not registered to use namespace 'Microsoft.KeyVault' 对于所有其
我们最近发现自己需要将每个 secret (名称和值)从一个 Azure KeyVault 复制到新创建的一个。我找到了从备份中恢复 secret 的方法,但我们没有备份。是否有一个 Powershe
我正在使用 .net core 2.1 和 OpenIdConnect 以及以下 AccessPolicies 创建 azure keyvault AccessPolicies = new List
与 Azure CLI一个使用 az keyvault secret 显示 读取 secret 值。 Azure Powershell/Az.KeyVault是怎么做到的? ? 我已尝试GetAzKe
与 Azure CLI一个使用 az keyvault secret 显示 读取 secret 值。 Azure Powershell/Az.KeyVault是怎么做到的? ? 我已尝试GetAzKe
2 个不同的租户(租户 A 中的订阅 A 和租户 B 中的订阅 B) 我们在 Azure 云中有一个订阅,并且我们已经设置了 Azure Keyvault。我们可以在那里创建 key 并使用其中一个
只是想知道如何使用新的 Azure.Security.KeyVault 库实现相同的目标: Azure.Security.KeyVault.Certificates https://learn.mic
我是一名优秀的程序员,十分优秀!