Cloudformation 是否可以创建引用现有策略的新角色?

hug*_*nus 10 amazon-cloudformation amazon-iam

目前我有一个共享的 S3 存储桶,它具有对不同实例的特定关键路径(即文件夹)的特定访问权限。我已经能够使用我的新角色创建实例配置文件并测试限制访问该文件夹没有问题。

我的问题是,存在具有定义策略的现有通用角色,我还希望能够将其包含在每个堆栈的新角色中。

在 cloudformation 中,是否可以将在一个角色中定义的策略包含在另一个角色中,而无需在新角色中重新定义策略文档?

类似于以下内容:

"AppTierS3AccessRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "Service": [ "ec2.amazonaws.com" ]
                        },
                        "Action": [ "sts:AssumeRole" ]
                    }
                ]
            },
            "Path": "/",
            "Policies": [ { "Ref": "existing-policy" } ]
        }
    },
Run Code Online (Sandbox Code Playgroud)

“现有政策”是这里的重要组成部分。我试图找到现有政策的 arn 来尝试参考它,但我有点卡住了。

Joh*_*rry 14

源代码:https : //docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html

AWS::IAM::Role类型现在有一个ManagedPolicyArns字段,您可以设置此。您只需要获取 ARN(很容易从 IAM 控制台获取)并将其放置在该字段中。在下面的示例中,我创建了一个提供只读 ECR 访问的角色,以便我的映像可以从 ECR 中提取 docker 容器。

  ecrRole:
    Type: AWS::IAM::Role
    Properties:
      Path: "/"
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - ec2.amazonaws.com
          Action:
          - sts:AssumeRole
Run Code Online (Sandbox Code Playgroud)


dia*_*0ne -1

不可以,目前您不能将一个角色嵌入到另一个角色中。我能想到的唯一选择是:

  • 使用AWS::IAM::InstanceProfile创建新的实例配置文件并向其分配现有的通用角色。
  • 在创建 CloudFormation 堆栈之前,运行复制通用角色的脚本。例如,它创建一个新角色,列出现有通用角色的所有策略,并在新角色中重新创建它们。然后,您可以将新角色分配给模板中的新AWS::IAM::InstanceProfile资源,并将其用于您的 EC2 实例或启动配置。