異なる AWS アカウントでアプリケーションをデプロイする - AWS CodeDeploy

異なる AWS アカウントでアプリケーションをデプロイする

組織には、一般的に、さまざまな目的で使用する複数の AWS アカウントがあります (たとえば、システム管理タスク用のもの、開発、テストおよび本稼働用のもの、開発およびテスト環境に関連付けられたもの、本稼働環境に関連付けられたものなど)。

異なるアカウントで関連作業を実行できる場合でも、CodeDeploy デプロイグループとデプロイ先の Amazon EC2 インスタンスは、これらを作成したアカウントに厳密に関連付けられています。たとえば、1 つのアカウントで起動したインスタンスを別のデプロイグループに追加することはできません。

開発用アカウントと本稼働用アカウントの 2 つの AWS アカウントがあるとします。主に開発用アカウントで作業しますが、認証情報のフルセットまたは開発用アカウントからのサインアウトや本番稼働用アカウントへのサインインなしで、本番稼働用アカウントでデプロイの開始を可能にします。

クロスアカウント設定手順に従うことで、別のアカウントの認証情報フルセットの必要なしで、組織の別のアカウントに属するデプロイを開始できます。これは、そのアカウントへの一時的アクセスを許可する AWS Security Token Service (AWS STS) が提供する機能を利用して一部行われます。

ステップ 1: いずれかのアカウントで S3 バケットを作成する

開発用アカウントまたは本番稼働用アカウントで以下を行います。

  • まだそうしていない場合は、本稼働用アカウントのアプリケーションリビジョンが保存される Amazon S3 バケットを作成します。詳細については、「Amazon S3 でのバケットの作成」を参照してください。同じファイルを開発用アカウントでテスト、確認した本稼働環境にデプロイして、同じバケットとアプリケーションリビジョンを両方のアカウントに使用することもできます。

ステップ 2: Amazon S3 バケットへのアクセス許可を本番稼働用アカウントの IAM インスタンスプロファイルに付与する

ステップ 1 で作成した Amazon S3 バケットが本番稼働用アカウントにある場合、このステップは必要ありません。後で引き受けるロールは、本番稼働用アカウントにもあるため、このバケットへのアクセス権限をすでに持っています。

開発用アカウントで Amazon S3 バケットを作成する場合は、以下を実行します。

  • 本番稼働用アカウントで、IAM インスタンスプロファイルを作成します。詳細については、ステップ 4: Amazon EC2 インスタンス用の IAM インスタンスプロファイルを作成する を参照してください。

    注記

    この IAM インスタンスプロファイルの ARN を書き留めます。次に作成するクロスバケットポリシーにそれを追加する必要があります。

  • 開発用アカウントで作成した Amazon S3 バケットへのアクセス権限を、本番稼働用アカウントで先ほど作成した IAM インスタンスプロファイルに付与します。詳細については、「例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与する」を参照してください。

    クロスアカウントのバケットのアクセス許可を付与するプロセスを完了するにあたり、次の点に注意してください。

    • サンプルチュートリアルでは、アカウント A は開発用アカウントを表し、アカウント B は本番稼働用アカウントを表します。

    • アカウント A (開発用アカウント) タスクを実行する際、チュートリアルで提供されているサンプルポリシーを使用する代わりに、次のバケットポリシーを変更してクロスアカウントアクセス許可を付与します。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "Cross-account permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/role-name" }, "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::bucket-name/*" ] } ] }

      account-id は、IAM インスタンスプロファイルを作成した本番稼働用アカウントのアカウント番号を表します。

      role-name は、作成した IAM インスタンスプロファイルの名前を表します。

      bucket-name は、ステップ 1 で作成したバケットの名前を表します。バケット名の後に必ず /* が含まれるようにして、バケット内の各ファイルへのアクセスを提供します。

ステップ 3: 本番稼働用アカウントでリソースとクロスアカウントロールを作成する

本番稼働用アカウントで以下を行います。

  • このガイドの手順を使用して、CodeDeploy リソース (アプリケーション、デプロイグループ、デプロイ設定、Amazon EC2 インスタンス、Amazon EC2 インスタンスプロファイル、サービスロールなど) を作成します。

  • 開発用アカウントのユーザーが、この本番稼働用アカウントで CodeDeploy オペレーションを実行するために追加で引き受けるクロスアカウント IAM ロールを作成します。

    クロスアカウントロールの作成に役立つガイドとして、「チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任」を使用します。ポリシードキュメントにチュートリアルのサンプルアクセス許可を追加する代わりに、少なくとも次の 2 つの AWS が指定したポリシーをロールにアタッチする必要があります。

    • AmazonS3FullAccess: S3 バケットが開発用アカウントにある場合にのみ必要です。引き受けた本番稼働用アカウントのロールに対して、リビジョンが保存されている、開発用アカウントの Amazon S3 サービスとリソースへのフルアクセスを提供します。

    • AWSCodeDeployDeployerAccess: リビジョンを登録してデプロイすることを IAM ユーザーに許可します。

    デプロイを開始するだけでなく、デプロイグループを作成および管理する場合、AWSCodeDeployFullAccess ポリシーの代わりに、AWSCodeDeployDeployerAccess ポリシーを追加します。IAM マネージドポリシーを使用して CodeDeploy タスクにアクセス許可を付与する方法の詳細については、「CodeDeploy の AWS マネージド (事前定義) ポリシー」を参照してください。

    このクロスアカウントロールの使用時に、ほかの AWS サービスでタスクを実行する場合、追加のポリシーをアタッチできます。

重要

クロスアカウントの IAM ロールを作成する際に、本番稼働用アカウントへのアクセスを得るために必要な詳細を書き留めておきます。

AWS マネジメントコンソール を使用して、ロールを切り替えるには、次のいずれかを指定する必要があります。

  • 引き受けたロールの認証情報を使用して本番稼働用アカウントにアクセスするための URL。URL は [確認] ページのクロスアカウント作成プロセスの最後に表示されます。

  • クロスアカウントロール名およびアカウント ID 番号またはエイリアス。

AWS CLI を使用してロールを切り替えるには、次を指定する必要があります。

  • 引き受けるクロスアカウントロールの ARN。

ステップ 4: Amazon S3 バケットにアプリケーションリビジョンをアップロードする

Amazon S3 バケットを作成したアカウントで。

ステップ 5: クロスアカウントロールを引き受け、アプリケーションをデプロイする

開発用アカウントでは、AWS CLI または AWS マネジメントコンソール を使用して、クロスアカウントロールを引き受け、本番稼働用アカウントでデプロイを開始できます。

AWS マネジメントコンソール を使用してロールを切り替え、デプロイを開始する方法の手順については、「ロールの切り替え (AWS マネジメントコンソール)」および「EC2/オンプレミス コンピューティングプラットフォームを選択します。 デプロイの作成 (コンソール)」を参照してください。

AWS CLI を使用してクロスアカウントロールを引き受け、デプロイを開始する方法の詳細については、「IAM ロールの切り替え (AWS コマンドラインインターフェイス)」および「EC2/オンプレミス コンピューティングプラットフォームを選択します。 デプロイの作成 (CLI)」を参照してください。

AWS STS を介してロールを引き受ける方法の詳細については、AWS Security Token Service ユーザーガイドの「AssumeRole」と AWS CLI コマンドリファレンスの「assume-role」を参照してください。

関連トピック: