CloudFormation使用!Join指定IAM多资源ARN的YAML语法问题求助
问题原因
你误用了!Join函数:!Join的作用是将多个元素拼接为单个字符串,你当前的写法把两个角色ARN拼成了一个带逗号的长字符串,CloudFormation会把这个字符串作为Resource数组的唯一元素,因此生成的IAM策略不符合预期。
解决方案
不需要使用!Join,直接在!If分支返回对应数组即可,修改后的Resource字段代码如下:
Resource: !If - AdminRoleHasRLP # 条件成立时返回两个独立ARN组成的数组 - - !Sub 'arn:aws:iam::*:role/${TestServiceRole1}' - !Sub 'arn:aws:iam::*:role/${TestServiceRole2}' # 条件不成立时返回通配符ARN,外层加短横线保证返回值始终为数组类型 - - 'arn:aws:iam::*:role/*'
这里用!Sub替换手动字符串拼接,语法更简洁,也能避免拼接错误。
验证效果
修改后当AdminRoleHaveRLP=Yes时,生成的IAM策略的Resource字段会是两个独立的ARN元素,和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

