Я работаю над шаблоном формирования облака для ключа KMS. В политическом документе я хочу указать принципалов в зависимости от этапа (будь то продвижение или тестирование). Я могу легко использовать Fn:If
, если есть только один принципал для обоих этапов. Но у меня более одного принципала для каждого этапа, и Fn: If only позволяет вам назначать значение, а не коллекцию в соответствии с моим пониманием (поправьте меня, если я ошибаюсь).
Я попытался назначить коллекцию значению, и это дает мне ошибку «ключи карты должны быть строками; вместо этого получена коллекция» при проверке шаблона с помощью конструктора CloudFormation в учетной записи AWS.
"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
здесь