gpt4 book ai didi

amazon-web-services - 如何在云形成模板中将 Fn::If 与数组值结合使用

转载 作者:行者123 更新时间:2023-12-01 11:13:15 24 4
gpt4 key购买 nike

我正在开发 KMS key 的云形成模板。在策略文档中,我想根据阶段(无论是生产还是测试)设置主体。如果两个阶段只有一个主体,我可以轻松使用 Fn:If 。但我每个阶段都有多个主体,并且 Fn:If 只允许您分配一个值,而不是根据我的理解的集合(如果我错了,请纠正我)。

我尝试将一个集合分配给该值,但在 AWS 帐户中使用 CloudFormation 设计器验证模板时,它给出了“映射键必须是字符串;而是收到了一个集合”错误。

"MyEncryptionKey": {
"DeletionPolicy": "Retain",
"Properties": {
"Description": "MyEncryptionKey",
"EnableKeyRotation": true,
"Enabled": true,
"KeyPolicy": {
"Statement": [
{
"Action": "kms:*",
"Effect": "Allow",
"Principal": {
"AWS": "root"
},
"Resource": "*"
},
{
"Action": "kms:Decrypt",
"Effect": "Allow",
"Principal": {
"AWS": [
{
"Fn::If": [
"IsProd",
{["arn1","arn2"]},
"arn2"
]
}
]
},
"Resource": "*"
}
]
}
},
"Version": "2012-10-17",
"Type": "AWS::KMS::Key"
}

理想情况下,关键策略中的第二个语句应该有两个 arn 值(如果是 prod)和一个 arn 值(如果不是 prod)。

我也愿意探索是否有其他方法可以代替这里使用 Fn::If 来实现这一目标

最佳答案

不要将 Fn::If 计算的值视为单个数组项,而应将其视为数组。将主体替换为以下内容,它将起作用。

JSON

{
"Principal": {
"AWS": {
"Fn::If": [
"IsProd",
[
"arn1"
],
[
"arn1",
"arn2"
]
]
}
}
}

在 yaml 中看起来很简单

Principal:
AWS:
Fn::If:
- IsProd
- - arn1
- - arn1
- arn2

关于amazon-web-services - 如何在云形成模板中将 Fn::If 与数组值结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com