情况
我正在CloudFormation中生成KMS密钥。根据 KMS 策略文档,创建策略(其中Principal
是账户本身(至关重要,以便 IAM 策略能够授予对密钥的访问权限。
问题
如何在 CloudFormation 中为账户根创建 ARN?
对于那些使用 YAML 作为其 CloudFormation 模板的用户:
!Sub arn:aws:iam::${AWS::AccountId}:root
答案
{
"Fn::Join":[
":",
[
"arn:aws:iam:",
{
"Ref":"AWS::AccountId"
},
"root"
]
]
}
为什么会这样?
首先,让我们检查一下这条线,"Ref":"AWS::AccountId"
.这是一个伪参数引用,这是一种奇特的说法,即它是 CloudFormation 开箱即用的参数。有很多这样的参数。这个恰好为我们提供了账户 ID,这对于构建 ARN 至关重要。
现在,剩下的就是使用此账户 ID 创建 ARN。Fn::Join
只是一个内置的CloudFormation,允许字符串连接。当我们在这里所做的那样,将引用与字符串常量(或其他引用(组合在一起时,这一点至关重要。
结果是这样的...
arn:aws:iam::123456789012:root