AWS CloudFormation で IAM 管理ポリシーを IAM ロールに添付する方法を教えてください。

最終更新日: 2020 年 3 月 2 日

AWS CloudFormation で新規または既存の AWS Identity and Access Management (IAM) 管理ポリシーを新規または既存の IAM ロールに追加する方法を教えてください。

簡単な説明

既存または新規の IAM 管理ポリシーを新規の IAM ロールリソースに追加するには、ManagedPolicyArns プロパティ (リソースタイプが AWS::IAM::Role) を使用します。新規の IAM 管理ポリシーを既存の IAM ロールリソースに追加するには、ロールプロパティ (リソースタイプが AWS::IAM::ManagedPolicy) を使用します。

IAM 管理ポリシーは、AWS 管理ポリシーまたはカスタマー管理ポリシーのどちらでもかまいません。

重要: 最大 10 個の管理ポリシーを IAM ロールまたはユーザーに添付できます。各管理ポリシーのサイズは 6,144 文字を超えることはできません。 詳細については、IAM と STS の制限を参照してください。

シナリオに基づいて、次のいずれかのセクションの手順を実行してください。

  • 既存の IAM 管理ポリシーを新規の IAM ロールに追加する
  • 新しい IAM 管理ポリシーを新規の IAM ロールに追加する
  • 新規の IAM 管理ポリシーを既存の IAM ロールに追加する

解決方法

既存の IAM 管理ポリシーを新規の IAM ロールに追加する

1.    AWS CloudFormation テンプレートで、IAM 管理ポリシーの Amazon リソースネーム (ARN) を渡すために使用できる 1 つまたは複数のパラメータを作成します。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "awsExampleManagedPolicyParameterOne": {
            "Type": "String",
            "Description": "awsExampleIAMManagedPolicyARNOne"
        },
        "awsExampleManagedPolicyParameterTwo": {
            "Type": "String",
            "Description": "awsExampleIAMManagedPolicyARNTwo"
        }
    }
}

YAML:

Parameters:
  awsExampleManagedPolicyParameterOne:
    Type: String
    Description: awsExampleIAMManagedPolicyARNOne
  awsExampleManagedPolicyParameterTwo:
    Type: String
    Description: awsExampleIAMManagedPolicyARNTwo

2.    テンプレートの Resources セクションで、リソースタイプが AWS::IAM::Role の場合、Ref をステップ 1 で作成した 1 つまたは複数のパラメータ (awsExampleManagedPolicyParameterOneawsExampleManagedPolicyParameterTwo) に設定します。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "Resources": {
        "RootRole": {
            "Type": "AWS::IAM::Role",
            "Properties": {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": [
                                    "ec2.amazonaws.com"
                                ]
                            },
                            "Action": [
                                "sts:AssumeRole"
                            ]
                        }
                    ]
                },
                "Path": "/",
                "ManagedPolicyArns": [
                    {
                        "Ref": "awsExampleManagedPolicyParameterOne"
                    },
                    {
                        "Ref": "awsExampleManagedPolicyParameterTwo"
                    }
                ]
            }
        }
    }
}

YAML:

Resources:
  RootRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - 'sts:AssumeRole'
      Path: /
      ManagedPolicyArns:
        - !Ref awsExampleManagedPolicyParameterOne            
        - !Ref awsExampleManagedPolicyParameterTwo

3.    既存の IAM 管理ポリシーを新規の IAM ロールに適用するには、スタックを作成するか、変更した AWS CloudFormation テンプレートに基づいて既存のスタックを更新します

新しい IAM 管理ポリシーを新規の IAM ロールに追加する

1.    AWS CloudFormation テンプレートで、AWS::IAM::ManagedPolicy リソースを使用して新しいポリシーを作成します。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "SampleManagedPolicy": {
        "Type": "AWS::IAM::ManagedPolicy",
        "Properties": {
            "PolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Sid": "AllowAllUsersToListAccounts",
                        "Effect": "Allow",
                        "Action": [
                            "iam:ListAccountAliases",
                            "iam:ListUsers",
                            "iam:GetAccountSummary"
                        ],
                        "Resource": "*"
                    }
                ]
            }
        }
    }
}

YAML:

SampleManagedPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          -
            Sid: AllowAllUsersToListAccounts
            Effect: Allow
            Action:
              - iam:ListAccountAliases
              - iam:ListUsers
              - iam:GetAccountSummary
            Resource: "*"

2.    !Ref 論理 ID 構文を使用して、IAM 管理ポリシーリソースを AWS::IAM::Role リソースに添付します。

たとえば、Ref をステップ 1 で作成したリソース論理 ID (SampleManagedPolicy) に設定します。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "RootRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "Service": [
                                "ec2.amazonaws.com"
                            ]
                        },
                        "Action": [
                            "sts:AssumeRole"
                        ]
                    }
                ]
            },
            "Path": "/",
            "ManagedPolicyArns": [
                {
                    "Ref": "SampleManagedPolicy"
                }
            ]
        }
    }
}

YAML:

RootRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - 'sts:AssumeRole'
      Path: /
      ManagedPolicyArns:
        - !Ref SampleManagedPolicy

3.    新規の IAM 管理ポリシーを新規の IAM ロールに適用するには、スタックを作成するか、変更した AWS CloudFormation テンプレートに基づいて既存のスタックを更新します

新規の IAM 管理ポリシーを既存の IAM ロールに追加する

1.    AWS CloudFormation テンプレートで、既存のロール名を渡すために使用できるパラメータを作成します。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "Parameters": {
        "awsExampleRolesParameter": {
            "Type": "CommaDelimitedList",
            "Description": "Names of existing Roles you want to add to the newly created Managed Policy"
        }
    }
}

YAML:

Parameters:
  awsExampleRolesParameter:
    Type: CommaDelimitedList
    Description: Names of existing Roles you want to add to the newly created Managed Policy

2.    テンプレートの Resources セクションで、リソースタイプが AWS::IAM::ManagedPolicy の場合、Ref をステップ 1 で作成したパラメータ (awsExampleRolesParameter) に設定します。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "Resources": {
        "SampleManagedPolicy": {
            "Type": "AWS::IAM::ManagedPolicy",
            "Properties": {
                "PolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Sid": "AllowAllUsersToListAccounts",
                            "Effect": "Allow",
                            "Action": [
                                "iam:ListAccountAliases",
                                "iam:ListUsers",
                                "iam:GetAccountSummary"
                            ],
                            "Resource": "*"
                        }
                    ]
                },
                "Roles": {
                    "Ref": "awsExampleRolesParameter"
                }
            }
        }
    }
}

YAML:

Resources:
  SampleManagedPolicy:
    Type: 'AWS::IAM::ManagedPolicy'
    Properties:
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: AllowAllUsersToListAccounts
            Effect: Allow
            Action:
              - 'iam:ListAccountAliases'
              - 'iam:ListUsers'
              - 'iam:GetAccountSummary'
            Resource: '*'
      Roles: !Ref awsExampleRolesParameter

3.    新規の IAM 管理ポリシーを既存の IAM ロールに適用するには、 スタックを作成するか、変更した AWS CloudFormation テンプレートに基づいて既存のスタックを更新します


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合