Step 3: Create a service role for CodeDeploy - AWS CodeDeploy

Step 3: Create a service role for CodeDeploy

AWS では、サービスロールを使用して AWS のサービスにアクセス許可を付与することで、このサービスから AWS リソースにアクセスできるようにします。The policies that you attach to the service role determine which resources the service can access and what it can do with those resources.

CodeDeploy に作成するサービスロールで、compute platform に必要なアクセス許可がを付与する必要があります。​ 複数の compute platform にデプロイした場合、それぞれにサービスロールを 1 つずつ作成します。To add permissions, attach one or more of the following AWS supplied policies:

EC2/オンプレミス デプロイでは、AWSCodeDeployRole ポリシーをアタッチします。これは、サービスロールで以下を実行するためのアクセス許可を提供します。

  • インスタンスのタグを読み取る、または Amazon EC2 グループ名により Amazon EC2 Auto Scaling インスタンスを識別します。

  • Amazon EC2 Auto Scaling グループ、ライフサイクルフック、スケーリングポリシーの読み取り、作成、更新、削除を行います。

  • Amazon SNS トピックに情報を公開します。

  • CloudWatch アラームに関する情報を取得します。

  • Elastic Load Balancing を読んで更新します。

    注記

    起動テンプレートを使用して Auto Scaling グループを作成する場合は、次のアクセス権限を追加する必要があります。

    • ec2:RunInstances

    • ec2:CreateTags

    • iam:PassRole

    詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「Step 3: Create a service role」、「Auto Scaling グループの起動テンプレートの作成」および「起動テンプレートのサポート」を参照してください。

Amazon ECS のデプロイの場合、サポートサービスへのフルアクセスが必要な場合は、AWSCodeDeployRoleForECS ポリシーをアタッチします。これは、サービスロールで以下を実行するためのアクセス許可を提供します。

  • Amazon ECS タスクセットを読んで、更新、削除します。

  • Elastic Load Balancing ターゲットグループ、リスナー、ルールを更新します。

  • AWS Lambda 関数を呼び出します。

  • Amazon S3 バケットのリビジョンファイルにアクセスします。

  • CloudWatch アラームに関する情報を取得します。

  • Amazon SNS トピックに情報を公開します。

Amazon ECS のデプロイの場合、サポートサービスへの制限付きのアクセスが必要な場合は、AWSCodeDeployRoleForECSLimited ポリシーをアタッチします。これは、サービスロールで以下を実行するためのアクセス許可を提供します。

  • Amazon ECS タスクセットを読んで、更新、削除します。

  • CloudWatch アラームに関する情報を取得します。

  • Amazon SNS トピックに情報を公開します。

AWS Lambda デプロイでは、AWSCodeDeployRoleForLambdaLimited ポリシーをアタッチします。これは、サービスロールで以下を実行するためのアクセス許可を提供します。

  • AWS Lambda 関数およびエイリアスの読み取り、更新、呼び出しを行います。

  • Amazon S3 バケットのリビジョンファイルにアクセスします。

  • Amazon SNS トピックに情報を公開します。

  • CloudWatch アラームに関する情報を取得します。

また、サービスロールの設定の一環として、アクセス権限を付与するエンドポイントを指定するために信頼関係を更新します。

サービスロールを作成するには、IAM コンソール、AWS CLI、または IAM API を使用できます。

Create a service role (console)

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. ナビゲーションペインで [Roles] を選択し、続いて [Create role] を選択します。

  3. [ロールの作成] ページで、[AWS サービス] を選択し、[このロールを使用するサービスを選択] リストから以下を選択します。 CodeDeploy

  4. [ユースケースの選択] で、ユースケースを選択します。

    • EC2/オンプレミス デプロイで、[CodeDeploy] を選択します。

    • Amazon ECS デプロイで、[CodeDeploy - ECS] を選択します。

    • AWS Lambda デプロイで、[Lambda 用 CodeDeploy] を選択します。

  5. [Next: Permissions] を選択します。

  6. [アタッチされたアクセス権限ポリシー] ページに、アクセス権限ポリシーが表示されます。[次へ: タグ] を選択します。

  7. [Review] ページの [Role name] に、サービスロールの名前を入力します (例: CodeDeployServiceRole), and then choose Create role.

    また、[ロールの説明] に、このサービスロールの説明を入力することもできます。

  8. 現在サポートされているすべてのエンドポイントへのアクセス権限をサービスロールに付与する場合は、この手順を終了します。

    このサービスロールが一部のエンドポイントにアクセスできないようにするには、ロールのリストで、作成したロールを参照して選択し、次のステップに進みます。

  9. [信頼関係] タブで、[信頼関係の編集] を選択します。

  10. 次のポリシーでは、サポートされているすべてのエンドポイントにアクセスする権限をサービスロールに付与します。

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

    サポートされているエンドポイントの一部にのみアクセスする権限をサービスロールに付与するには、[Policy Document (ポリシードキュメント)] ボックスの内容を以下のポリシーで置き換えます。アクセスを除外するエンドポイントの行を削除し、[Update Trust Policy (信頼ポリシーの更新)] を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.us-east-2.amazonaws.com", "codedeploy.us-east-1.amazonaws.com", "codedeploy.us-west-1.amazonaws.com", "codedeploy.us-west-2.amazonaws.com", "codedeploy.eu-west-3.amazonaws.com", "codedeploy.ca-central-1.amazonaws.com", "codedeploy.eu-west-1.amazonaws.com", "codedeploy.eu-west-2.amazonaws.com", "codedeploy.eu-central-1.amazonaws.com", "codedeploy.ap-east-1.amazonaws.com", "codedeploy.ap-northeast-1.amazonaws.com", "codedeploy.ap-northeast-2.amazonaws.com", "codedeploy.ap-southeast-1.amazonaws.com", "codedeploy.ap-southeast-2.amazonaws.com", "codedeploy.ap-south-1.amazonaws.com", "codedeploy.sa-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

For more information about creating service roles, see Creating a role to delegate permissions to an AWS service in the IAM User Guide.

Create a service role (CLI)

  1. 開発マシンで、たとえば、CodeDeployDemo-Trust.json という名前のテキストファイルを作成します。このファイルは、CodeDeploy がユーザーの代理操作の実行を許可するのに使用されます。

    次のいずれかを行ってください。

    • To grant access to all supported AWS Regions, save the following content in the file:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    • サポートされているリージョンの一部にのみアクセスする権限を付与するには、ファイルに次の内容を入力し、アクセスを除外するリージョンの行を削除します。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.us-east-2.amazonaws.com", "codedeploy.us-east-1.amazonaws.com", "codedeploy.us-west-1.amazonaws.com", "codedeploy.us-west-2.amazonaws.com", "codedeploy.eu-west-3.amazonaws.com", "codedeploy.ca-central-1.amazonaws.com", "codedeploy.eu-west-1.amazonaws.com", "codedeploy.eu-west-2.amazonaws.com", "codedeploy.eu-central-1.amazonaws.com", "codedeploy.ap-east-1.amazonaws.com", "codedeploy.ap-northeast-1.amazonaws.com", "codedeploy.ap-northeast-2.amazonaws.com", "codedeploy.ap-southeast-1.amazonaws.com", "codedeploy.ap-southeast-2.amazonaws.com", "codedeploy.ap-south-1.amazonaws.com", "codedeploy.sa-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
      注記

      リストにある最後のエンドポイントの後にコンマを使用しないでください。

  2. 同じディレクトリから、create-role コマンドを呼び出し、先ほど作成したテキストファイルの情報に基づく CodeDeployServiceRole という名前のサービスロールを作成します。

    aws iam create-role --role-name CodeDeployServiceRole --assume-role-policy-document file://CodeDeployDemo-Trust.json
    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

    コマンドの出力で、Arn オブジェクトの下にある Role エントリの値を書きとめておきます。これは、後でデプロイグループを作成する際に必要になります。値を忘れた場合は、Get the service role ARN (CLI) の手順に従います。

  3. 使用する管理ポリシーは、compute platform によって異なります。

    • EC2/オンプレミス compute platform にデプロイする場合は、以下を行います。

      attach-role-policy コマンドを呼び出し、CodeDeployServiceRole という名前のサービスロールに対して、IAM という名前の AWSCodeDeployRole マネージドポリシーに基づくアクセス許可を付与します。次に例を示します。

      aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole
    • AWS Lambda compute platform にデプロイする場合は、以下を行います。

      attach-role-policy コマンドを呼び出し、CodeDeployServiceRole という名前のサービスロールに対して、IAM という名前の AWSCodeDeployRoleForLambda マネージドポリシーに基づくアクセス許可を付与します。次に例を示します。

      aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRoleForLambdaLimited
    • Amazon ECS compute platform にデプロイする場合は、以下を行います。

      attach-role-policy コマンドを呼び出し、CodeDeployServiceRole という名前のサービスロールに対して、IAM または AWSCodeDeployRoleForECS という名前の AWSCodeDeployRoleForECSLimited マネージドポリシーに基づくアクセス許可を付与します。次に例を示します。

      aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/AWSCodeDeployRoleForECS

For more information about creating service roles, see Creating a role for an AWS service in the IAM User Guide.

Get the service role ARN (console)

IAM コンソールを使用してサービスロールの ARN を取得するには:

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. ナビゲーションペインで [Roles (ロール) ] を選択します。

  3. [フィルタ] テキストボックスに、「CodeDeployServiceRole」と入力して、Enter キーを押します。

  4. [CodeDeployServiceRole] を選択します。

  5. [ロールの ARN] フィールドの値を書き留めます。

Get the service role ARN (CLI)

AWS CLI を使用してサービスロールの ARN を取得するには、get-role という名前のサービスロールに対して CodeDeployServiceRole コマンドを呼び出します。

aws iam get-role --role-name CodeDeployServiceRole --query "Role.Arn" --output text

返される値はサービスロールの ARN です。