スキップしてコンテンツを表示

IAM マネージドポリシーを CloudFormation の IAM ロールにアタッチする方法を教えてください。

所要時間4分
0

既存または新規の AWS Identity and Access Management (IAM) マネージドポリシーを AWS CloudFormation の新規または既存の IAM ロールに追加したいと考えています。

簡単な説明

既存または新規の IAM マネージドポリシーを新規の IAM ロールリソースに追加するには、リソースタイプ AWS::IAM::RoleManagedPolicyArns プロパティを使用します。新規の IAM マネージドポリシーを既存の IAM ロールリソースに追加するには、リソースタイプ AWS::IAM::ManagedPolicyRoles プロパティを使用します。

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

重要: 最大 20 個のマネージドポリシーを IAM ロールまたはユーザーにアタッチできます。各マネージドポリシーのサイズは 6,144 文字を超えることはできません。IAM では、この制限に照らしてポリシーのサイズを計算する際、空白はカウントされません。詳細については、「IAM と AWS 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": "ARN of the first IAM Managed Policy to add to the role"
        },
        "awsExampleManagedPolicyParameterTwo": {
          "Type": "String",
          "Description": "ARN of the second IAM Managed Policy to add to the role"
        }
      }
    }

    YAML:

    Parameters:
      awsExampleManagedPolicyParameterOne:
        Type: String
        Description: 'ARN of the first IAM Managed Policy to add to the role'
      awsExampleManagedPolicyParameterTwo:
        Type: String
        Description: 'ARN of the second IAM Managed Policy to add to the role'
  2. テンプレートの Resources セクションで、AWS::IAM::Role タイプのリソースに対して、ステップ 1 で作成したパラメータを Ref に設定します。この例では、パラメータは awsExampleManagedPolicyParameterOne および awsExampleManagedPolicyParameterTwo です。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 ロールに適用するには、変更した 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 ロールに適用するには、変更した 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::ManagedPolicyRef に、ステップ 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 ロールに適用するには、変更した CloudFormation テンプレートに基づいてスタックを作成または更新します。

AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ