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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

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

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

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

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

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

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

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

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

ステップ 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: 本番稼働用アカウントでリソースとクロスアカウントロールを作成する

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

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

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

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

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

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

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

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

重要

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

を使用してロール AWS Management Console を切り替えるには、次のいずれかを指定する必要があります。

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

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

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

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

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

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

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

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

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

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

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

関連トピック: