Amazon ECS CodeDeploy IAM ロール - Amazon Elastic Container Service

Amazon ECS CodeDeploy IAM ロール

Amazon ECS で CodeDeploy ブルー/グリーンデプロイタイプを使用するには、ユーザーの代わりに Amazon ECS サービスを更新するためのアクセス許可を事前に CodeDeploy サービスに付与しておく必要があります。これらのアクセス権限は、CodeDeploy IAM ロール (ecsCodeDeployRole) によって付与されます。

注記

ユーザーには CodeDeploy を使用するアクセス許可も必要です。これらの権限については、「IAM 許可が必要なブルー/グリーンデプロイ」で説明しています。

2 つの管理ポリシーが用意されています。次に示している AWSCodeDeployRoleForECS ポリシーでは、関連付けられているアクションを使用してリソースを更新するためのアクセス許可が CodeDeploy に付与されます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:UpdateServicePrimaryTaskSet", "ecs:DeleteTaskSet", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "cloudwatch:DescribeAlarms", "sns:Publish", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringLike": { "iam:PassedToService": [ "ecs-tasks.amazonaws.com" ] } } } ] }

次に示している AWSCodeDeployRoleForECSLimited ポリシーでは、より制限されたアクセス許可が CodeDeploy に付与されます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:UpdateServicePrimaryTaskSet", "ecs:DeleteTaskSet", "cloudwatch:DescribeAlarms" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:*:*:CodeDeployTopic_*", "Effect": "Allow" }, { "Action": [ "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:*:*:function:CodeDeployHook_*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/UseWithCodeDeploy": "true" } }, "Effect": "Allow" }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/ecsTaskExecutionRole", "arn:aws:iam::*:role/ECSTaskExecution*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "ecs-tasks.amazonaws.com" ] } } } ] }

CodeDeploy AWSCodeDeployRoleForECS ロールの作成

CodeDeploy 用の IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles]、[Create role] の順に選択します。

  3. [Select type of trusted entity (信頼されたエンティティの種類を選択)] で [AWS サービス] を選択します。

  4. [このロールを使用するサービスを選択] で [CodeDeploy] を選択します。

  5. [Select your use case] (ユースケースの選択) の場合、CodeDeploy - ECS[Next] (次) の順に選択します。

  6. [Attach permissions policy] (許可ポリシーの添付) セクションで、以下の操作を行います。

    1. [AWSCodeDeployRoleForECS]を選択し、ポリシーを選択します。

    2. [Set permissions boundary - optional] (許可境界の設定 - オプション) で、[Create role without a permissions boundary] (許可境界のないロールを作成する) を選択します。

    3. [Next] (次へ) をクリックします。

  7. [Role details] (ロール詳細) で、次の操作を行います。

    1. [ロール名]ecsCodeDeployRole と入力し、さらに必要に応じて説明を入力します。

    2. [タグを追加 (オプション)] で、ポリシーに関連付けるカスタムタグを入力します。

  8. [Create role] (ロールの作成) を選択します。

必要なアクセス権限を Amazon ECS CodeDeploy IAM ロールに追加するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ロールのリストで ecsCodeDeployRole を検索します。そのロールが見つからない場合は、次の手順に従ってロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

  3. [アクセス許可ポリシー] セクションで、そのロールに [AWSCodeDeployRoleForECS] または [AWSCodeDeployRoleForECSLimited] 管理ポリシーが、アタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS CodeDeploy サービスのロールが適切に構成されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

    1. [Add Permissions] (許可の追加)、[Attach policies] (ポリシーの添付) を選択します。

    2. [フィルター] に AWSCodeDeployRoleForECS または AWSCodeDeployRoleForECSLimited と入力して、アタッチする利用可能なポリシーを絞り込みます。

    3. AWS 管理ポリシーの左にあるボックスをオンにし、[ポリシーをアタッチ] を選択します。

  4. [Trust relationships (信頼関係)] を選択します。

  5. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する場合、[Cancel] (キャンセル) を選択します。信頼関係が一致しない場合、[信頼ポリシーを編集] を選択して、[ポリシードキュメント] ウィンドウにポリシーをコピーしてから、[ポリシーを更新] を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

ブルー/グリーンデプロイ用のアクセス許可の追加

ブルー/グリーンデプロイタイプを使用する Amazon ECS サービス内のタスクにおいて、タスク実行ロールまたはタスクロールの上書きが必要な場合は、各タスクのタスク実行ロールまたはタスクロールの上書きのための iam:PassRole アクセス許可を CodeDeploy IAM ロールに対しポリシーとして追加する必要があります。詳細については、Amazon ECS タスク実行IAM ロール および タスク IAM ロール を参照してください。

このポリシーは、次の手順を使用して作成します。

JSON ポリシーエディタを使用してポリシーを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左側のナビゲーションペインで、[ポリシー] を選択します。

    初めて [ポリシー] を選択する場合には、[管理ポリシーにようこそ] ページが表示されます。[Get Started] (今すぐ始める) を選択します。

  3. ページの上部で、[ポリシーの作成] を選択します。

  4. [ポリシーエディタ] セクションで、[JSON] オプションを選択します。

  5. 次の JSON ポリシードキュメントを入力します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>" ] } ] }
  6. [Next] (次へ) をクリックします。

    注記

    いつでも [Visual] と [JSON] エディタオプションを切り替えることができます。ただし、[Visual] エディタで [] に変更または選択した場合、IAM はポリシーを再構成して visual エディタに合わせて最適化することがあります。詳細については、IAM ユーザーガイドの「ポリシーの再構成」を参照してください。

  7. [確認と作成] ページで、作成するポリシーの [ポリシー名][説明] (オプション) を入力します。[このポリシーで定義されているアクセス許可] を確認して、ポリシーによって付与されたアクセス許可を確認します。

  8. [Create Policy] (ポリシーの作成) をクリックして、新しいポリシーを保存します。

作成が完了したポリシーは、AWSCodeDeployRoleForECS もしくは AWSCodeDeployRoleForECSLimited ロールにアタッチします。ポリシーをロールにアタッチする方法については、「AWS Identity and Access Managementユーザーガイド」の「ロールのアクセス許可ポリシーの変更 (コンソール)」を参照してください。