Cloudformation如何从另一个堆栈引用Managed-Policy

lon*_*ony 7 aws-cloudformation amazon-iam

我有以下角色.从内部我想使用另一个堆栈中的现有托管策略.

我怎么能这样做?

"TestRole": {
    "Properties": {
      "AssumeRolePolicyDocument": {
        "Statement": [
          {
            "Action": [
              "sts:AssumeRole"
            ],
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "lambda.amazonaws.com"
              ]
            }
          }
        ],
        "Version": "2012-10-17"
      },
      "Path": "/lambda/",
      "Policies": [
        ??????
      ]
    },
    "Type": "AWS::IAM::Role"
  }
Run Code Online (Sandbox Code Playgroud)

小智 3

现在有一种受支持的方法可以做到这一点,即使用Imports/Exports。基本上,创建策略的堆栈具有包含策略名称(或 ARN,不确定在本例中需要哪个)的输出,并将其声明为具有区域唯一名称的导出。然后,其他堆栈可以使用导入功能使用它。

例如,如果以下堆栈(假设它名为 FooStack)创建托管策略,则它的输出中可以包含以下内容:

"Outputs" : {
    "MyManagedPolicy" : {
        "Value" : { "Ref" : "MyManagedPolicy" },
        "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-MyManagedPolicy" }}
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个堆栈可以使用它:

"Policies": [
    { "Fn::ImportValue" : "FooStack-MyManagedPolicy" }
]
Run Code Online (Sandbox Code Playgroud)