CloudFormation为KMS密钥添加多个Principal时报ARN无效错误如何解决?
问题原因
- 核心错误是模板中
Fn::Sub和Fn::Join的嵌套逻辑颠倒,导致最终生成的ARN包含重复前缀,格式非法。 - 你当前的代码会先拼接出类似
arn:aws:iam::12345678:user/people/arn:aws:iam::12345678:user/people/user1,user2,user3的字符串,拆分后每个ARN都带有冗余的前缀片段,不符合IAM ARN规范,因此触发密钥策略校验失败。
修复方案
原有参数KmsKeyManager的定义无需修改,Principal部分的代码调整为如下写法即可:
"Principal": { "AWS": { "Fn::Split": [ ",", { "Fn::Sub": [ "arn:aws:iam::${AccountId}:user/people/${Users}", { "AccountId": {"Ref": "AWS::AccountId"}, "Users": { "Fn::Join": [ { "Fn::Sub": ",arn:aws:iam::${AccountId}:user/people/" }, { "Fn::Split": [",", {"Ref": "KmsKeyManager"}] } ] } } ] } ] } }
上述代码的实现逻辑为:
- 先将输入的逗号分隔用户名字符串拆分为单个用户名的列表
- 用完整ARN前缀作为分隔符,重新拼接用户名列表,此时除第一个用户名外,其余用户名前都会自动带上ARN前缀
- 在整个拼接结果前补加一次ARN前缀,得到所有完整ARN用逗号拼接的长字符串
- 最后按逗号拆分长字符串,即可得到格式合法的ARN列表,可直接赋值给
Principal.AWS字段使用
内容的提问来源于stack exchange,提问作者jalaylee
相关产品推荐
相关产品推荐

