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

Amazon ECS CodeDeploy IAM ロール

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

注記

IAM ユーザーには 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 用の 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. [Role name] (ロール名) の場合、ecsCodeDeployRole と入力して必要に応じて説明を入力することもできます。

    2. [Add tags (optional)] (タグ追加 (オプション)) の場合、ポリシーに関連付けるカスタムタグを指定します。

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

必要なアクセス権限を Amazon ECS CodeDeploy IAM ロールに追加するには

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

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

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

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

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

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

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. ブルー/グリーンデプロイタイプを使用する Amazon ECS サービス内のタスクでタスク実行ロールまたはタスクロール上書きを使用する必要がある場合は、各タスクのタスク実行ロールまたはタスクロール上書きに対する iam:PassRole アクセス許可を、CodeDeploy IAM ロールにインラインポリシーとして追加する必要があります。詳細については、「Amazon ECS タスク実行IAM ロール」および「タスク用の IAM ロール」を参照してください。

    以下のサブステップに従ってインラインポリシーを作成します。

    1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

    3. [Permissions policies (アクセス許可ポリシー)] セクションで [Add inline policy (インラインポリシーの追加)] を選択します。

    4. [JSON] タブを選択して次のポリシーテキストを追加します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>" ] } ] }
      注記

      タスク実行ロールまたはタスクロール上書きの完全 ARN を指定します。

    5. [Review policy] (ポリシーの確認) を選択します。

    6. 追加したポリシーの名前を [Name] (名前) に入力してから [Create policy] (ポリシーの作成) を選択します。