如何在CloudFormation中生成AWS根账户ARN?

Dan*_*Dan 6 amazon-web-services aws-cloudformation amazon-iam

情况

我正在 CloudFormation 中生成 KMS 密钥。根据KMS 策略文档,创建帐户本身的策略至关重要Principal,以便 IAM 策略能够授予对密钥的访问权限。

问题

如何在 CloudFormation 中为帐户根创建 ARN?

Lau*_*ard 10

对于那些使用 YAML 作为 CloudFormation 模板的人:

!Sub arn:aws:iam::${AWS::AccountId}:root
Run Code Online (Sandbox Code Playgroud)


Dan*_*Dan 5

答案

{  
   "Fn::Join":[  
      ":",
      [  
         "arn:aws:iam:",
         {  
            "Ref":"AWS::AccountId"
         },
         "root"
      ]
   ]
}
Run Code Online (Sandbox Code Playgroud)

为什么这有效?

首先,让我们检查一下这条线,"Ref":"AWS::AccountId"。这是一个伪参数引用,这是一种奇特的说法,它是 CloudFormation 开箱即用的参数。这样的参数有很多。这恰好为我们提供了帐户 ID,这对于构建 ARN 至关重要。

现在,剩下的就是使用此帐户 ID 创建 ARN。Fn::Join只是一个允许字符串串联的CloudFormation 内置组件。正如我们在这里所做的那样,当将引用与字符串常量(或其他引用)组合时,这一点至关重要。

结果就像...

arn:aws:iam::123456789012:root
Run Code Online (Sandbox Code Playgroud)