Amazon ECS CodeDeploy IAM ロール
Amazon ECS で CodeDeploy Blue/Green デプロイタイプを使用するには、ユーザーの代わりに Amazon ECS サービスを更新するためのアクセス許可を事前に CodeDeploy サービスに付与しておく必要があります。これらのアクセス権限は、CodeDeploy IAM ロール (ecsCodeDeployRole
) によって付与されます。
IAM ユーザーには CodeDeploy を使用するアクセス許可も必要です。これらの権限については、「アクセス権限が必要な Blue/Green デプロイ」で説明しています。
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 ロールを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [Roles]、[Create role] の順に選択します。
-
[Select type of trusted entity (信頼されたエンティティの種類を選択)] で [AWS サービス] を選択します。
-
[このロールを使用するサービスを選択] で [CodeDeploy] を選択します。
-
[Select your use case] (ユースケースの選択) の場合、[CodeDeploy - ECS]、[Next] (次) の順に選択します。
-
[Attach permissions policy] (許可ポリシーの添付) セクションで、以下の操作を行います。
-
AWSCodeDeployRoleForECS を選択し、ポリシーを選択します。
-
[Set permissions boundary - optional] (許可境界の設定 - オプション) で、[Create role without a permissions boundary] (許可境界のないロールを作成する) を選択します。
-
[Next] を選択します。
-
-
[Role details] (ロールの詳細) で、次の操作を行います:
-
[Role name] (ロール名) の場合、
ecsCodeDeployRole
と入力して必要に応じて説明を入力することもできます。 -
[Add tags (optional)] (タグ追加 (オプション)) の場合、ポリシーに関連付けるカスタムタグを指定します。
-
-
[ロールの作成] を選択します。
必要なアクセス権限を Amazon ECS CodeDeploy IAM ロールに追加するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ロールのリストで
ecsCodeDeployRole
を検索します。そのロールが見つからない場合は、次の手順に従ってロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。 -
[Permissions policies (アクセス許可ポリシー)] セクションで、そのロールに [AWSCodeDeployRoleForECS] または [AWSCodeDeployRoleForECSLimited] 管理ポリシーがアタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS CodeDeploy サービスのロールが適切に構成されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。
-
[Add Permissions] (許可の追加)、[Attach policies] (ポリシーの添付) を選択します。
-
[フィルター] に AWSCodeDeployRoleForECS または AWSCodeDeployRoleForECSLimited と入力して、アタッチする利用可能なポリシーを絞り込みます。
-
AWS 管理ポリシーの左にあるボックスをオンにし、[ポリシーのアタッチ] を選択します。
-
-
[Trust relationships (信頼関係)] を選択します。
-
信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する場合、[Cancel] (キャンセル) を選択します。信頼関係が一致しない場合、[Edit trust policy] (信頼ポリシー編集) を選択して、ポリシーを [Policy Document] (ポリシードキュメント) ウィンドウにコピーし、[Update policy] (ポリシー更新) を選択します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
Blue/Green デプロイタイプを使用する Amazon ECS サービス内のタスクでタスク実行ロールまたはタスクロール上書きを使用する必要がある場合は、各タスクのタスク実行ロールまたはタスクロール上書きに対する
iam:PassRole
アクセス許可を、CodeDeploy IAM ロールにインラインポリシーとして追加する必要があります。詳細については、「Amazon ECS タスク実行IAM ロール」および「タスク用の IAM ロール」を参照してください。以下のサブステップに従ってインラインポリシーを作成します。
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ロールのリストで
ecsCodeDeployRole
を検索します。そのロールが見つからない場合は、次の手順に従ってロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。 -
[Permissions policies (アクセス許可ポリシー)] セクションで [Add inline policy (インラインポリシーの追加)] を選択します。
-
[JSON] タブを選択して次のポリシーテキストを追加します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>" ] } ] }
注記 タスク実行ロールまたはタスクロール上書きの完全 ARN を指定します。
-
[Review policy] (ポリシーの確認) を選択します。
-
追加したポリシーの名前を [Name (名前)] に入力してから [ポリシーの作成] を選択します。