他のリソースを使用するパイプラインを CodePipeline で作成するAWSアカウント - AWS CodePipeline

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

他のリソースを使用するパイプラインを CodePipeline で作成するAWSアカウント

他の AWS アカウントによって作成し、管理されるリソースを使用するパイプラインを作成します。たとえば、パイプラインと CodeDeploy リソースに別のアカウントを使用します。

注記

複数のアカウントからのアクションを使用してパイプラインを作成する場合は、クロスアカウントパイプラインの制限内で、それらが引き続き案件にアクセスできるようにアクションを構成する必要があります。クロスアカウントのアクションには、以下の制限が適用されます。

  • 一般的に、アクションは次の場合にのみ、アーティファクトを消費できます。

    • アーティファクトがパイプラインアカウントと同じアカウントにある

    • アーティファクトが別のアカウントのアクションに対してパイプラインアカウントで作成されている

    • アーティファクトが、アクションと同じアカウントで前のアクションによって生成されている

    つまり、どちらのアカウントもパイプラインアカウントでない場合は、あるアカウントから別のアカウントにアーティファクトを渡すことはできません。

  • 以下のアクションタイプでは、クロスアカウントアクションはサポートされていません。

    • Jenkins ビルドアクション

この例では、使用する AWS Key Management Service (AWS KMS キー) を作成してパイプラインに追加し、クロスアカウントアクセスを有効化するようにアカウントのポリシーおよびロールをセットアップします。以下のためにAWSKMS キーを使用するには、キー ID、キー ARN、またはエイリアス ARN を使用できます。

注記

別のAWSアカウントを使用するには、キー ARN またはエイリアス ARN を使用する必要があります。

このウォークスルーおよびサンプルでは、AccountA は、パイプラインの作成に使用したアカウントです。このアカウントには、パイプラインのアーティファクトを保存するために使用する Amazon S3 バケットおよびAWS CodePipeline。AccountBは、CodeDeploy で使用する CodeDeploy oyアプリケーション、デプロイグループ、およびサービスロールを作成するために使用したアカウントです。

を使用する場合AccountAで作成した CodeDeploy アプリケーションを使用するパイプラインを編集するにはAccountB,AccountA以下を実行する必要があります。

  • AccountB の ARN またはアカウント ID をリクエストします (このウォークスルーで、AccountB ID は 012ID_ACCOUNT_B)。

  • 作成または使用AWS KMSはパイプラインのリージョンで、そのキーを使用して、サービスロール (AWS コードパイプラインサービス) とAccountB

  • Amazon S3 バケットポリシーを作成して、AccountBAmazon S3 バケットにアクセスする (codepipeline-us-east-2-1234567890).

  • 許可するポリシーを作成するAccountAによって構成されたロールを引き受けるためのAccountBし、そのポリシーをサービスロール (AWS コードパイプラインサービス).

  • デフォルトキーではなく、カスタマーマネージド AWS KMS キーを使用するようにパイプラインを編集します。

AccountB のリソースが、AccountA で作成されているパイプラインにアクセスできるようにするには、AccountB は以下のように行います。

  • AccountA の ARN またはアカウント ID をリクエストします (このウォークスルーで、AccountA ID は 012ID_ACCOUNT_A)。

  • ポリシーをAmazon EC2 インスタンスロールAmazon S3 バケットへのアクセスを許可する CodeDeploy 用に設定した (codepipeline-us-east-2-1234567890).

  • ポリシーをAmazon EC2 インスタンスロールへのアクセスを許可する CodeDeploy 用に設定したAWS KMSでパイプラインのアーティファクトを暗号化するために使用される、カスタマー管理キーAccountA

  • IAM ロールを設定してアタッチします (CrossAccount) に信頼関係ポリシーを適用し、AccountAロールを引き受けます。

  • パイプラインで必要なデプロイリソースにアクセスできるようにするポリシーを作成し、CrossAccount_Role にアタッチします。

  • Amazon S3 バケットへのアクセスを許可するポリシーを作成します。(codepipeline-us-east-2-1234567890) に添付し、CrossAccount

前提条件: を作成するAWS KMS暗号化キー

カスタマーマネージドキーはリージョンに固有であり、すべて AWS KMS キーです。パイプラインが作成されたのと同じリージョン (us-east-2 など) でカスタマーマネージド AWS KMS キーを作成する必要があります。

AWS KMS でカスタマーマネージドポリシーを作成するには

  1. にサインインします。AWS Management ConsoleをAccountAをクリックして、[] を開きますAWS KMSconsole.

  2. 左側で [カスタマー管理キー] を選択します。

  3. [キーの作成] を選択します。[キーの設定] で、[対称] のデフォルトを選択したまま、[] を選択します。

  4. [エイリアス] に、このキーに使用するエイリアス (PipelineName-Key など) を入力します。必要に応じて、このキーの説明とタグを入力し、[] を選択します。

  5. Eclipseキー管理アクセス許可の定義で、このキーの管理者となる IAM ユーザーかその他のユーザー、またはグループを選択し、[

  6. Eclipseキーの使用方法の定義[] の下にあるこのアカウントで、パイプラインのサービスロールの名前 (AWS Codepipeline-Service) を選択します。[]その他AWSアカウント] で、別のを追加するAWSアカウント。ARN の一部として AccountB のアカウント ID を入力し、[次へ] を選択します。

  7. [キーポリシーの確認と編集] で、ポリシーを確認し、[完了] を選択します。

  8. キーのリストから、キーのエイリアスを選択し、その ARN (arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE など) にコピーします。この ARN は、パイプラインの編集時とポリシーの設定時に必要になります。

ステップ 1: アカウントポリシーとロールを設定する

AWS KMS キーを作成したら、クロスアカウントアクセスを有効にするポリシーを作成してアタッチします。作成するには、AccountA および AccountB の両方からアクションを行う必要があります。

パイプラインを作成するポリシーおよびロールをアカウントに設定する (AccountA)

他のに関連付ける CodeDeploy リソースを使用するパイプラインを作成するにはAWSアカウント,AccountAアーティファクトの保存先である Amazon S3 バケットおよび CodePipeline のサービスロールの両方のポリシーを設定する必要があります。

AccountB へのアクセスを許可する Amazon S3 バケットのポリシーを作成するには (コンソール)

  1. にサインインします。AWS Management ConsoleをAccountA() を開き、Amazon S3 コンソール (https://console.aws.amazon.com/s3/

  2. Amazon S3 バケットのリストで、パイプラインのアーティファクトが保存される Amazon S3 バケットを選択します。このバケットはcodepipeline-region-1234567EXAMPLEとなる。ここでリージョンである。AWSパイプラインおよび1234567例はバケット名を一意にするための 10 桁の乱数です (codepipeline-us-east-2-1234567890).

  3. Amazon S3 バケットの詳細ページで、プロパティ

  4. プロパティペインで、[アクセス許可] を展開し、[バケットポリシーの追加] を選択します。

    注記

    ポリシーが Amazon S3 バケットにすでにアタッチされている場合は、バケットポリシーの編集。以下の例のステートメントを既存のポリシーに追加できます。新しいポリシーを追加するには、そのためのリンクを選択し、AWS ポリシージェネレーターの指示に従います。詳細については、「」を参照してください。IAM ポリシーの概要

  5. [Bucket Policy Editor] ウィンドウに以下のポリシーを入力します。これにより、AccountB はパイプラインアーティファクトにアクセスできるようになり、カスタムソースやビルドアクションなどのアクションによって作成された場合は、AccountB で出力アーティファクトを追加することができます。

    次の例では、AccountB の ARN は、012ID_ACCOUNT_B です。Amazon S3 バケットの ARN はcodepipeline-us-east-2-1234567890。これらの ARN を、アクセスを許可するアカウントの ARN、および Amazon S3 バケットの ARN に置き換えます。

    { "Version": "2012-10-17", "Id": "SSEAndSSLPolicy", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "Bool": { "aws:SecureTransport": false } } }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890" } ] }
  6. [保存] を選択したら、ポリシーエディタを閉じます。

  7. 選択保存Amazon S3 バケットのアクセス許可を保存します。

CodePipeline のサービスロールのポリシーを作成するには (コンソール)

  1. にサインインします。AWS Management ConsoleをAccountAで IAM コンソールを開きますhttps://console.aws.amazon.com/iam/

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

  3. ロールのリストで、ロール名で、CodePipeline のサービスロールの名前を選択します。

  4. [アクセス許可] タブで [インラインポリシーの追加] を選択します。

  5. [JSONタブをクリックし、次のポリシーを入力してAccountBロールを引き受けます。次の例では、012ID_ACCOUNT_B は、AccountB の ARN です。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::012ID_ACCOUNT_B:role/*" ] } }
  6. [ポリシーの確認] を選択します。

  7. [名前] に、このポリシーの名前を入力します。[ポリシーの作成] を選択します。

ポリシーおよびロールをアカウントに設定するにはAWSリソース (AccountB)

CodeDeploy でアプリケーション、デプロイ、デプロイグループを作成したら、Amazon EC2 インスタンスロール。([Run Deployment Walkthrough] ウィザードを使用している場合はこのロールが作成されますが、手動で作成することもできます。) で作成したパイプラインの場合AccountAで作成された CodeDeploy リソースを使用するAccountBの場合は、以下を実行する必要があります。

  • パイプラインアーティファクトが保存されている Amazon S3 バケットにアクセスできるようにするインスタンスロールのポリシーを設定します。

  • クロスアカウントアクセス用に設定されている AccountB に 2 番目のロールを作成します。

    この 2 番目のロールAmazon S3、AccountAには、CodeDeploy リソースへのアクセスを許可するポリシーと、AccountAロールを引き受けます。

    注記

    これらのポリシーは、別のAWSアカウント. そのほかの AWS リソースの場合は、リソース要件固有のポリシーが必要です。

CodeDeploy (コンソール) 用に設定した Amazon EC2 インスタンスロールのポリシーを作成するには

  1. にサインインします。AWS Management ConsoleをAccountBで IAM コンソールを開きますhttps://console.aws.amazon.com/iam/

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

  3. ロールのリストで、ロール名で、CodeDeploy アプリケーションの Amazon EC2 インスタンスロールとして使用するサービスロールの名前を選択します。このロール名はさまざまで、デプロイグループで複数のインスタンスロールを使用できます。詳細については、「」を参照してください。Amazon EC2 インスタンス用の IAM インスタンスプロファイルを作成する

  4. [アクセス許可] タブで [インラインポリシーの追加] を選択します。

  5. [JSONタブをクリックし、以下のポリシーを入力して、で使用する Amazon S3 バケットへのアクセスを許可します。AccountAを使用してパイプラインの成果物を格納します (この例ではcodepipeline-us-east-2-1234567890):

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890" ] } ] }
  6. [ポリシーの確認] を選択します。

  7. [名前] に、このポリシーの名前を入力します。[ポリシーの作成] を選択します。

  8. AWS KMS の 2 番目のポリシーを作成します。このポリシーで、arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLEAccountA で作成されたカスタマーマネージドキーの ARN であり、AccountB にそのキーの使用を許可しています。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE" ] } ] }
    重要

    ここで示しているように、このポリシーでは、 キーのリソース ARN の一部として AccountAAWS KMS のアカウント ID を使用する必要があります。使用しないと、そのポリシーは機能しません。

  9. [ポリシーの確認] を選択します。

  10. [名前] に、このポリシーの名前を入力します。[ポリシーの作成] を選択します。

ここで、クロスアカウントアクセスに使用する IAM ロールを作成し、AccountAロールを引き受けることができます。このロールには、CodeDeploy リソースへのアクセスを許可するポリシーと、アーティファクトをAccountA

IAM でクロスアカウントロールを設定するには

  1. にサインインします。AWS Management ConsoleをAccountBで IAM コンソールを開きますhttps://console.aws.amazon.com/iam

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

  3. []信頼されたエンティティのタイプを選択] で、もう 1AWSアカウント。[]このロールを使用できるアカウントの指定, でアカウント IDで、[] を入力しますAWSCodePipeline でパイプラインを作成するアカウントのアカウント ID (AccountA) を選択してから、[] を選択します。次へ: アクセス許可.

    注記

    この手順では、AccountBAccountA との間に信頼関係ポリシーを作成します。

  4. []アクセス許可ポリシーをアタッチする] で、AmazonS3ReadOnlyAccessを選択してから、[] を選択します。次へ: タグ

    注記

    これは、使用するポリシーではありません。ウィザードを完了するために、ポリシーを選択する必要があります。

  5. [Next: (次へ:)] を選択します 確認. このロールの名前をロール名(たとえば、CrossAccount). IAM の命名規則に従う限り、このロールの名前は任意に指定できます。ロールの目的が明確になる名前を付けることを検討してください。[Create Role (ロールの作成)] を選択します。

  6. ロールのリストから、作成したロールを選択します (CrossAccount) をクリックして、概要ページに移動します。

  7. [アクセス許可] タブで [インラインポリシーの追加] を選択します。

  8. [JSONタブをクリックし、以下のポリシーを入力して、CodeDeploy リソースへのアクセスを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": "*" } ] }
  9. [ポリシーの確認] を選択します。

  10. [名前] に、このポリシーの名前を入力します。[ポリシーの作成] を選択します。

  11. [アクセス許可] タブで [インラインポリシーの追加] を選択します。

  12. [JSONタブに以下のポリシーを入力して、このロールに Amazon S3 バケットに対する入力アーティファクトの取得と出力アーティファクトの保存を許可します。AccountA:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl", "codecommit:ListBranches", "codecommit:ListRepositories" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] } ] }
  13. [ポリシーの確認] を選択します。

  14. [名前] に、このポリシーの名前を入力します。[ポリシーの作成] を選択します。

  15. リポジトリの []アクセス許可[] タブで、[AmazonS3ReadOnlyAccess] の下にあるポリシーの一覧のポリシー名をクリックし、削除する各タグの横にある削除アイコン (X) [] ポリシーの横にあります。プロンプトが表示されたら、[Detach] を選択します。

ステップ 2: パイプラインの編集

他のに関連付けられているリソースを使用するパイプラインを作成または編集するには、CodePipeline コンソールを使用することはできません。AWSアカウント. ただし、コンソールを使用してパイプラインの一般的な構造を作成し、その後 AWS CLI を使用して、パイプラインを編集し、そのリソースを追加することができます。または、既存のパイプラインの構造を使用して、リソースを手動で追加することもできます。

別の AWS アカウントに関連付けられているリソースを追加するには (AWS CLI)

  1. ターミナル (Linux、macOS、UNIX) またはコマンドプロンプト (Windows) で、get-pipelineリソースを追加するパイプラインに対して、コマンドを実行します。コマンドの出力を JSON ファイルにコピーします。たとえば、MyFirstPipeline という名前のパイプラインに対しては、以下のようなコマンドを入力します。

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    出力はpipeline.jsonファイルを開きます。

  2. 任意のプレーンテキストエディタで JSON ファイルを開きます。After"type": "S3"をアーティファクトストアに、KMS encryptionKey、ID、およびタイプ情報を追加します。codepipeline-us-east-2-1234567890はパイプラインのアーティファクトを保存するために使用する Amazon S3 バケットの名前であり、arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLEは作成したカスタマー管理キーの ARN です。

    { "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" } },
  3. 関連付けられた CodeDeploy リソースを使用するステージにデプロイアクションを追加するAccountBを含む。roleArn作成したクロスアカウントロールの値 (CrossAccount).

    以下の例では、ExternalDeploy という名前のデプロイアクションを追加する JSON を示しています。作成された CodeDeploy リソースを使用します。AccountBという名前のステージでステージング。以下の例では、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 ではなく、ステージでのアクションの構造です。

  4. update-pipeline コマンドが使用できるように、ファイルから metadata 行を削除する必要があります。JSON ファイルのパイプライン構造からセクションを削除します ("metadata": { } 行と、"created""pipelineARN"、および "updated" フィールド)。

    たとえば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    ファイルを保存します。

  5. 変更を適用するには、以下のように、パイプライン JSON ファイルを指定して、update-pipeline コマンドを実行します。

    重要

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

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    このコマンドは、編集したパイプラインの構造全体を返します。

別の AWS アカウントに関連付けられているリソースを使用するパイプラインをテストするには

  1. ターミナル (Linux、macOS、UNIX) またはコマンドプロンプト (Windows) で、start-pipeline-execution以下のように、パイプラインの名前を指定して、コマンドを実行します。

    aws codepipeline start-pipeline-execution --name MyFirstPipeline

    詳細については、「パイプラインを手動で開始する」を参照してください。

  2. にサインインします。AWS Management ConsoleをAccountAを開き、CodePipeline コンソールをhttp://console.aws.amazon.com/codesuite/codepipeline/home

    AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。

  3. [Name] で、先ほど編集したパイプラインの名前を選択します。これにより、パイプラインの詳細ビューが開いて、パイプラインの各ステージの各アクションの状態などがわかります。

  4. パイプラインの進行状況を監視します。別の AWS アカウントに関連付けられているリソースを使用するアクションの成功メッセージを待ちます。

    注記

    AccountA を使用してサインインしている間にアクションの詳細を表示しようとすると、エラーが発生します。サインアウトしてから、[] でサインインします。AccountBをクリックして、CodeDeploy のデプロイメントの詳細を表示します。