web-dev-qa-db-ja.com

Cloudformationでは、既存のポリシーを参照する新しいロールを作成できますか?

現時点では、異なるインスタンスの特定のキーパス(つまり、フォルダー)への特定のアクセス権を持つ共有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" } ]
        }
    },

ここで重要なのは「既存のポリシー」です。既存のポリシーのarnを見つけて、参照してみましたが、少し行き詰まっています。

10
hughmcmanus

src: 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
12
John Eikenberry

管理ポリシー を使用してこれを実現できます。共有する定義済みポリシーをカスタマー管理ポリシーに配置し、その定義済みポリシーを、それを使用する各ロールにアタッチします。管理ポリシーに対する将来の変更は、管理ポリシーが関連付けられているすべてのロールにすぐに適用されます。

AWS :: IAM :: ManagedPolicy リソースを使用して、CloudFormationで顧客管理ポリシーを作成するか、既存の管理ポリシーをアタッチできます。

4
markusk

@markuskの回答re:管理ポリシー-を拡張するには、はい。

例:

"ManagedPolicy": {
  "Type": "AWS::IAM::ManagedPolicy",
  "Properties": {
    "Description": "something descriptive",
    "Groups": [ ... ref(s) for groups ... ],
    "Roles: [{"Ref":"AppTierS3AccessRole"}],
    "Users": [ ... ref(s) for users ... ],
    "PolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        ...
      ]
    }
  }
}
1
Peter Mounce