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