【发布时间】:2018-11-13 05:52:29
【问题描述】:
情况
我正在 CloudFormation 中生成 KMS 密钥。根据KMS policy documentation,创建一个以Principal 为帐户本身的策略至关重要,以便 IAM 策略能够授予对密钥的访问权限。
问题
如何在 CloudFormation 中为账户根创建 ARN?
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-iam
情况
我正在 CloudFormation 中生成 KMS 密钥。根据KMS policy documentation,创建一个以Principal 为帐户本身的策略至关重要,以便 IAM 策略能够授予对密钥的访问权限。
问题
如何在 CloudFormation 中为账户根创建 ARN?
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-iam
对于将 YAML 用于 CloudFormation 模板的用户:
!Sub arn:aws:iam::${AWS::AccountId}:root
【讨论】:
答案
{
"Fn::Join":[
":",
[
"arn:aws:iam:",
{
"Ref":"AWS::AccountId"
},
"root"
]
]
}
为什么会这样?
首先,让我们检查"Ref":"AWS::AccountId" 这一行。这是pseudo parameter reference,这是一种奇特的说法,它是 CloudFormation 开箱即用的参数。有很多这样的参数。这恰好为我们提供了帐户 ID,这对于构建 ARN 至关重要。
现在,剩下的就是使用此帐户 ID 创建 ARN。 Fn::Join 就是 a CloudFormation built-in,它允许字符串的连接。当我们在这里所做的将引用与字符串常量(或其他引用)结合起来时,这一点至关重要。
结果类似于...
arn:aws:iam::123456789012:root
【讨论】:
AccountId console.aws.amazon.com/iam/home?#/security_credentials(您必须登录)
arn:aws-cn:iam、arn:aws-iso:iam和arn:aws-iso-b:iam。