翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
別の AWS アカウントのリソースを使用するパイプラインを CodePipeline で作成する
他の AWS アカウントによって作成し、管理されるリソースを使用するパイプラインを作成します。例えば、一つのアカウントにパイプラインを、別のアカウントに CodeDeploy リソースを使用します。
注記
複数のアカウントからのアクションを使用してパイプラインを作成する場合は、クロスアカウントパイプラインの制限内で、それらが引き続き案件にアクセスできるようにアクションを構成する必要があります。クロスアカウントのアクションには、以下の制限が適用されます。
-
一般的に、アクションは次の場合にのみ、アーティファクトを消費できます。
-
アーティファクトがパイプラインアカウントと同じアカウントにある
-
アーティファクトが別のアカウントのアクションに対してパイプラインアカウントで作成されている
-
アーティファクトが、アクションと同じアカウントで前のアクションによって生成されている
つまり、どちらのアカウントもパイプラインアカウントでない場合は、あるアカウントから別のアカウントにアーティファクトを渡すことはできません。
-
-
以下のアクションタイプでは、クロスアカウントアクションはサポートされていません。
-
Jenkins ビルドアクション
-
この例では、使用する AWS Key Management Service (AWS KMS) キーを作成し、パイプラインにキーを追加し、クロスアカウントアクセスを有効にするようにアカウントポリシーとロールを設定する必要があります。 AWS KMS キーの場合、キー ID、キー ARN、またはエイリアス ARN を使用できます。
注記
エイリアスは、カスタマーマスターキー (KMS) を作成したアカウントでのみ認識されます。クロスアカウントアクションの場合、キー ID またはキー ARN のみを使用してキーを識別できます。クロスアカウントアクションには他のアカウント (AccountB) のロールを使用するため、キー ID を指定すると他のアカウント (AccountB) のキーが使用されます。
このウォークスルーおよびサンプルでは、AccountAは、パイプラインの作成に使用したアカウントです。パイプラインアーティファクトの保存に使用される Amazon S3 バケットと、 で使用されるサービスロールにアクセスできます AWS CodePipeline。AccountB は、CodeDeploy アプリケーション、デプロイグループ、および CodeDeploy によって使用されるサービスロールを作成するために使用したアカウントです。
AccountA でパイプラインを編集して、AccountB で作成した CodeDeploy アプリケーションを使用するには、AccountA を以下のようにします。
-
AccountBの ARN またはアカウント ID をリクエストします (このウォークスルーで、AccountBID は012ID_ACCOUNT_B)。 -
パイプラインの リージョンで AWS KMS カスタマーマネージドキーを作成または使用し、そのキーを使用するアクセス許可をサービスロール (
CodePipeline_Service_Role) とAccountBに付与します。 -
AccountBに許可する Amazon S3 バケットポリシーを作成し、Amazon S3 バケットへのアクセス (例えば、codepipeline-us-east-2-1234567890)。 -
AccountAに許可されたポリシーがAccountBによって設定されているロールを前提に、そのポリシーをサービスロール (CodePipeline_Service_Role) にアタッチします。 -
パイプラインを編集して、デフォルト AWS KMS キーの代わりにカスタマーマネージドキーを使用します。
AccountB のリソースが、AccountA で作成されているパイプラインにアクセスできるようにするには、AccountB は以下のように行います。
-
AccountAの ARN またはアカウント ID をリクエストします (このウォークスルーで、AccountAID は012ID_ACCOUNT_A)。 -
に適用するポリシーを作成します。Amazon EC2 インスタンスロール Amazon S3 バケットへのアクセスを許可する CodeDeploy (
codepipeline-us-east-2-1234567890)。 -
CodeDeploy 用に設定された Amazon EC2 インスタンスロールに適用されるポリシーを作成し、
AccountAのパイプラインアーティファクトの暗号化に使用される AWS KMS カスタマーマネージドキーへのアクセスを許可します。 -
IAM ロール (
CrossAccount_Role) を設定して信頼関係ポリシーにアタッチし、AccountAの CodePipeline サービスロールがロールを引き受けることを許可します。 -
パイプラインで必要なデプロイリソースにアクセスできるようにするポリシーを作成し、
CrossAccount_Roleにアタッチします。 -
Amazon S3 バケット (
codepipeline-us-east-2-1234567890) にアクセスできるようにするポリシーを作成し、それをCrossAccount_Roleにアタッチします。
前提条件: AWS KMS 暗号化キーを作成する
カスタマーマネージドキーは、すべての AWS KMS キーと同様に、リージョンに固有です。パイプラインが作成されたリージョンと同じリージョン ( など) にカスタマーマネージド AWS KMS キーを作成する必要がありますus-east-2。
でカスタマーマネージドキーを作成するには AWS KMS
-
AccountAAWS Management Console を使用して にサインインし、 AWS KMS コンソールを開きます。 -
左側で [カスタマー管理キー]を選択します。
-
[キーの作成] を選択します。[キーの設定] で、[対称] のデフォルトを選択したまま、[次] を選択します。
-
エイリアス に、このキーに使用するエイリアス(
PipelineName-Keyなど)を入力します。必要に応じて、このキーの説明とタグを入力し、[次] を選択します。 -
[キー管理アクセス許可の定義] で、このキーの管理者となるロールを選択し、[次へ] を選択します。
-
[キーの利用方法許可の定義] の [このアカウント] で、パイプラインのサービスロールの名前 (例えば CodePipeline_Service_Role など) を選択します。「その他の AWS アカウント」で、「別の AWS アカウントの追加」を選択します。ARN の一部として
AccountBのアカウント ID を入力し、[次へ ] を選択します。 -
[キーポリシーの確認と編集]で、ポリシーを確認し、[完了]を選択します。
-
キーのリストから、キーのエイリアスを選択し、その ARN (
など) にコピーします。この ARN は、パイプラインの編集時とポリシーの設定時に必要になります。arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
ステップ 1: アカウントポリシーおよびロールをセットアップする
AWS KMS キーを作成したら、クロスアカウントアクセスを有効にするポリシーを作成してアタッチする必要があります。作成するには、AccountAおよびAccountBの両方からアクションを行う必要があります。
パイプラインを作成するポリシーおよびロールをアカウントに設定する (AccountA)
別の AWS アカウントに関連付けられた CodeDeploy リソースを使用するパイプラインを作成するには、AccountA がアーティファクトの保存に使用される Amazon S3 バケットと CodePipeline のサービスロールの両方のポリシーを設定する必要があります。
AccountB へのアクセスを許可する Amazon S3 バケットのポリシーを作成するには (コンソール)
-
AccountAAWS Management Console で にサインインし、https://console.aws.amazon.com/s3/で Amazon S3 コンソールを開きます。 -
Amazon S3 バケットのリストで、パイプラインのアーティファクトが保存される Amazon S3バケットを選択します。このバケットの名前は です。
regionはパイプラインを作成した AWS リージョンでcodepipeline-、region-1234567EXAMPLE1234567EXAMPLEはバケット名が一意であることを確認する 10 桁の乱数です (例:codepipeline-us-east-2-1234567890)。 -
Amazon S3 バケットの詳細ページで、[Properties] を選択します。
-
プロパティペインで、[アクセス許可] を展開し、[バケットポリシーの追加]を選択します。
注記
ポリシーがAmazon S3バケットにすでにアタッチされている場合は、バケットポリシーの編集 を選択します。以下の例のステートメントを既存のポリシーに追加できます。新しいポリシーを追加するには、リンクを選択し、 AWS ポリシージェネレーターの指示に従います。詳細については、「IAMポリシーの概要」を参照してください。
-
バケットポリシーエディタウィンドウで、
AccountBにパイプラインアーティファクトへのアクセスを許可し、カスタムソースやビルドアクションなどのアクションがそれらを作成した場合、AccountBに出力アーティファクトを追加できるようにするポリシーを作成します。 -
[保存] を選択したら、ポリシーエディタを閉じます。
-
[保存] を選択して、Amazon S3 バケットに対するアクセス権限を保存します。
CodePipeline のサービスロールのポリシーを作成するには (コンソール)
-
AccountAAWS Management Console で にサインインし、https://console.aws.amazon.com/iam/で IAM コンソールを開きます。 -
ナビゲーションペインで [Roles(ロール)] を選択します。
-
[ロール名] の下にあるロールのリストで、 CodePipeline のサービスロールの名前を選択します。
-
[アクセス許可] タブで [インラインポリシーの追加]を選択します。
-
[JSON] タブをクリックし、次のポリシーを入力して許可します。
AccountBを選択してロールを引き受けることができます。次の例では、012ID_ACCOUNT_Bは、AccountBの ARN です。 -
[ポリシーの確認]を選択します。
-
[名前] に、このポリシーの名前を入力します。[Create policy]を選択します。
AWS リソースを所有するアカウントでポリシーとロールを設定する (AccountB)
CodeDeploy にアプリケーション、デプロイ、デプロイグループを作成したら、あわせて [Amazon EC2 インスタンスロール] を作成します。([Run Deployment Walkthrough]ウィザードを使用している場合はこのロールが作成されますが、手動で作成することもできます。) AccountA で作成されたパイプラインは AccountB で CodeDeploy リソース作成時に使用されます。以下を実行する必要があります。
-
パイプラインアーティファクトが保存されている Amazon S3 バケットにアクセスできるようにするインスタンスロールのポリシーを設定します。
-
クロスアカウントアクセス用に設定されている
AccountBに 2 番目のロールを作成します。この 2 番目のロールは、
AccountAの Amazon S3 バケットにアクセスできるだけでなく、CodeDeploy リソースへのアクセスを許可するポリシーと、AccountAの CodePipeline サービスロールにロールを引き受けることを許可するポリシーを含んでいる必要があります。注記
これらのポリシーは、別の AWS アカウントを使用して作成されたパイプラインで使用する CodeDeploy リソースの設定に固有です。その他の AWS リソースには、リソース要件に固有のポリシーが必要です。
CodeDeploy (コンソール) 用に設定した Amazon EC2 インスタンスロールのポリシーを作成するには
-
AccountBAWS Management Console で にサインインし、https://console.aws.amazon.com/iam/で IAM コンソールを開きます。 -
ナビゲーションペインで [Roles (ロール)]を選択します。
-
[ロール名] の下にあるロールのリストで、 CodeDeploy アプリケーションの Amazon EC2 インスタンスロールとして使用するサービスロールの名前を選択します。このロール名はさまざまで、デプロイグループで複数のインスタンスロールを使用できます。詳細については、「Amazon EC2 インスタンスの IAM インスタンスプロファイルを作成する」を参照してください。
-
[Permissions] (アクセス許可) タブで [Add inline policy] (インラインポリシーの追加) を選択します。
-
JSON タブで、以下のポリシーを入力して、 Amazon S3 バケットへのアクセスを許可します。
AccountAパイプラインのアーティファクトを保存するには (この例では、codepipeline-us-east-2-1234567890): -
[ポリシーの確認]を選択します。
-
[名前] に、このポリシーの名前を入力します。[Create policy]を選択します。
-
の 2 番目のポリシーを作成します AWS KMS 。ここで、
はarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLEAccountAで作成され、AccountBが使用できるように設定されたカスタマーマネージドキーの ARN です。重要
次に示すように、このポリシーで
AccountAのアカウント ID を AWS KMS キーのリソース ARN の一部として使用する必要があります。使用しない場合、ポリシーは機能しません。 -
[ポリシーの確認]を選択します。
-
[名前] に、このポリシーの名前を入力します。[Create policy]を選択します。
ここで、クロスアカウントアクセスに使用する IAMロールを作成し、AccountA の CodePipeline サービスロールがロールを引き受けられるように設定します。このロールは、CodeDeploy リソースへのアクセスを許可するポリシーと、AccountA でアーティファクトの保存に使用される Amazon S3 バケットが含まれている必要があります。
IAM でクロスアカウントロールを設定するには
-
AccountBAWS Management Console で にサインインし、https://console.aws.amazon.com/iamで IAM コンソールを開きます。 -
ナビゲーションペインで Roles (ロール) を選択してください。[ロールの作成] を選択します。
-
[Select type of trusted entity](信頼できるエンティティのタイプを選択) で、[Another AWS account](別のアカウント) を選択します。このロールを使用できるアカウントを指定する のアカウント ID に、CodePipeline ( AWS Account
AccountA) でパイプラインを作成するアカウントのアカウント ID を入力し、次へ: アクセス許可を選択します。重要
この手順では、
AccountBとAccountAとの間に信頼関係ポリシーを作成します。ただし、これによりアカウントへのルートレベルのアクセスが許可されるため、CodePipeline はAccountAの CodePipeline サービスロールにスコープを絞ることを推奨しています。ステップ 16 に従ってアクセス許可を制限します。 -
[Attach permissions policies (アクセス許可ポリシーのアタッチ)] ページで、[AmazonS3ReadOnlyAccess]、[Next :タグ] の順に選択します。
注記
これは、使用するポリシーではありません。ウィザードを完了するために、ポリシーを選択する必要があります。
-
[Next: Review (次へ: レビュー)]を選択します。ロール名 に (
CrossAccount_Roleなど) のロールを名前に入力します。IAMの命名規則に従う限り、このロールの名前は任意に指定できます。ロールの目的が明確になる名前を付けることを検討してください。[Create Role]を選択します。 -
ロールのリストから、作成したポリシー (
CrossAccount_Roleなど) を選択して、そのロールの [Summary] ページを開きます。 -
[Permissions] (アクセス許可) タブで [Add inline policy] (インラインポリシーの追加) を選択します。
-
[JSON] タブで、以下のポリシーを入力して、CodeDeploy リソースへのアクセスを許可します。
-
[ポリシーの確認]を選択します。
-
[名前] に、このポリシーの名前を入力します。[ Create policy]を選択します。
-
[Permissions] (アクセス許可) タブで [Add inline policy] (インラインポリシーの追加) を選択します。
-
[JSON] タブを選択し、 以下のポリシーを入力して、このロールに
AccountAの Amazon S3 バケットに対する入力アーティファクトの取得と出力アーティファクトの保存を許可します。 -
[ポリシーの確認]を選択します。
-
[名前] に、このポリシーの名前を入力します。[Create policy]を選択します。
-
リポジトリの [アクセス許可] タブで、[ポリシー名]から AmazonS3ReadOnlyAccess を探して、ポリシーの横にある[削除] アイコン (X) を選択します。プロンプトが表示されたら、[Detach]を選択します。
-
[信頼関係] タブ、[信頼ポリシーを編集] の順に選択します。左側の列で [プリンシパルを追加] オプションを選択します。[プリンシパルタイプ] で、[IAM ロール] を選択し、
AccountAの CodePipeline サービスロールの ARN を指定します。[AWS プリンシパル] のリストからarn:aws:iam::Account_A:rootを削除し、[ポリシーを更新] を選択します。
ステップ 2: パイプラインを編集する
CodePipeline コンソールを使用して、別の AWS アカウントに関連付けられたリソースを使用するパイプラインを作成または編集することはできません。ただし、 コンソールを使用してパイプラインの一般的な構造を作成し、 を使用してパイプライン AWS CLI を編集し、それらのリソースを追加できます。または、既存のパイプラインの構造を使用して、リソースを手動で追加することもできます。
別の AWS アカウントに関連付けられたリソースを追加するには (AWS CLI)
-
ターミナル ( Linux, macOS , or Unix ) またはコマンドプロンプト ( Windows ) で、リソースを追加するパイプラインに対して get-pipeline コマンドを実行します。コマンドの出力を JSON ファイルにコピーします。例えば、MyFirstPipeline という名前のパイプラインに対しては、以下のようなコマンドを入力します。
aws codepipeline get-pipeline --nameMyFirstPipeline>pipeline.json出力は、
pipeline.jsonファイルを開きます。 -
任意のプレーンテキストエディタで JSON ファイルを開きます。アーティファクトストアの
"type": "S3"の後に、KMS 暗号化キー、ID、タイプ情報を追加します。ここで、codepipeline-us-east-2-1234567890は、Amazon S3 バケット名で使用されるパイプラインのアーティファクトの保存にされ、は、先ほど作成したカスタマー管理キーの ARN です。arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE{ "artifactStore”: { "location": "codepipeline-us-east-2-1234567890", "type": "S3", "encryptionKey": { "id": "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE", "type": "KMS" } }, -
AccountBに関連付けられている CodeDeploy リソースを使用するためのデプロイアクションをステージに追加して、roleArn値など作成したクロスアカウントロール (CrossAccount_Role) に指定します。以下の例では、
ExternalDeployという名前のデプロイアクションを追加する JSON を示しています。また、AccountBで作成された CodeDeploy リソースを Staging という名前のステージで使用しています。以下の例では、AccountBの ARN は012ID_ACCOUNT_Bです。, { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyAppBuild" } ], "name": "ExternalDeploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "AccountBApplicationName", "DeploymentGroupName": "AccountBApplicationGroupName" }, "runOrder": 1, "roleArn": "arn:aws:iam::012ID_ACCOUNT_B:role/CrossAccount_Role" } ] }注記
これは、パイプライン全体の JSON ではなく、ステージでのアクションの構造です。
-
metadataコマンドが使用できるように、ファイルから update-pipeline 行を削除する必要があります。JSON ファイルのパイプライン構造からセクションを削除します ("metadata": { }行と、"created"、"pipelineARN"、および"updated"フィールド)。例えば、構造から以下の行を削除します。
"metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }ファイルを保存します。
-
変更を適用するには、以下のように、パイプライン JSON ファイルを指定して、 update-pipeline コマンドを実行します。
重要
ファイル名の前に必ず
file://を含めてください。このコマンドでは必須です。aws codepipeline update-pipeline --cli-input-json file://pipeline.jsonこのコマンドは、編集したパイプラインの構造全体を返します。
別の AWS アカウントに関連付けられたリソースを使用するパイプラインをテストするには
-
ターミナル ( Linux, macOS , or Unix ) またはコマンドプロンプト ( Windows ) で、以下のように、パイプラインの名前を指定して、start-pipeline-execution コマンドを実行します。
aws codepipeline start-pipeline-execution --name MyFirstPipeline詳細については、「パイプラインを手動で開始する」を参照してください。
-
AccountAAWS Management Console で にサインインし、http://console.aws.amazon.com/codesuite/codepipeline/homeで CodePipeline コンソールを開きます。 AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。
-
[Name]で、先ほど編集したパイプラインの名前を選択します。これにより、パイプラインの詳細ビューが開いて、パイプラインの各ステージの各アクションの状態などがわかります。
-
パイプラインの進行状況を監視します。別の AWS アカウントに関連付けられたリソースを使用するアクションの成功メッセージを待ちます。
注記
AccountAを使用してサインインしている間にアクションの詳細を表示しようとすると、エラーが発生します。サインアウトしてから、AccountBでサインインして、 CodeDeploy でデプロイの詳細を表示します。