CodeCommit記事タイトルとURLをコピーするこんにちは。CLIが好きな福島です。今回は、別のアカウントのCodeCommitを利用したCodePipeline構成を作成する方法をご紹介します。内容を確認し、「ルールの作成」を押下11動作確認(両方のアカウントで実施)対象のCodeCommitにアクセスし、「ファイルを作成」を押下(リポジトリアカウントで実施)コミットする内容を入力し、「変更のコミット」を押下(リポジトリアカウントで実施)CodePipelineの確認(パイプラインアカウントで実施)デプロイ先のS3の確認(パイプラインアカウントで実施)終わりに参考https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/use-aws-codecommit-and-aws-codepipeline-to-deploy-a-ci-cd-pipeline-in-multiple-aws-accounts.html概要図ポイント別のアカウントのCodeCommitの変更を検知できるようにEventBridgeのルールを作成し、イベントをリポジトリアカウントからパイプラインアカウントに送信します。パイプラインアカウントでは、イベントを受信できるようカスタムのイベントバスを作成します。パイプラインアカウントでは、CodePipelineを起動できるように、EventBridgeのルールを作成します。CodePipelineの中身は、CodeCommitのソースコードをS3にデプロイするだけの簡単な内容になります。CodePipelineで利用するIAMロールは、マネジメントコンソールで指定できますが、特定のステージで利用(AssumeRole)するIAMロールの設定は、APIを使う必要があります。CodePipelineのソースステージでは、リポジトリアカウントのIAMロールを利用するため、このIAMロールにパイプラインアカウントのs3とkmsにアクセスできるよう権限を付与します。リポジトリアカウントからパイプラインアカウントのs3とkmsにアクセスできるように、s3とkmsのリソースベースのポリシーを設定します。ブランチごとにデプロイ先を変更する構成を組むことも可能です。リポジトリアカウントに存在するKMSにアクセスできる権限が必要となります。ドキュメントの構成では、権限周りが複雑になりそうと感じたため、今回は、パイプラインアカウント上にKMSを作成します。「作成のメソッド」をカスタムパターンにイベントパターンにJSONを入力し、「次へ」を押下リポジトリのアカウントIDのsample-codecommitのmainブランチの変更を検知するルールになります。ブランチ名を変更したい場合は、referenceNameの設定を変更します。send-event-to-pipeline-account-roleレビューを確認し、問題なければ「ルールの作成」を押下し、作成できればOKです。本番環境の場合は、最小権限を与えましょう。作成したロールを表示、「インラインポリシーを作成」を押下インラインポリシーを追加パイプラインアカウントのKMSとS3にアクセスできる権限を付与します。今回は、アカウントの行き来を減らすためにKMSを作成する前にポリシーを設定しています。そのため、この時点ではKMSのARNが不明のため、*(パイプラインアカウントの全てのKMS)で設定します。リポジトリアカウントからパイプラインアカウントのKMSにアクセスすることはできません。セキュリティ面が気になる場合は、KMSを作成後に本ポリシーを更新する必要があります。ポリシー名(sample-codepipeline-assume-policy)を入力、「ポリシー作成」を押下ポリシーが作成できればOKです。}以下の通り、イベントバスの作成ができればOKです。後続の設定に作成したイベントバスのARNを利用するため、メモしておきます。アカウント」にリポジトリアカウントのIDを設定し、「次へ」を押下プレビューを確認し、問題なければ「完了」を押下し、KMSが作成できればOKです。後続の設定に作成したKMSのARNを利用するため、メモしておきます。6CodePipeline用のIAMロール作成(パイプラインアカウントで実施)IAMロール作成の画面に移動し、カスタム信頼ポリシーを設定codepipelineからAssumeRoleできる設定を追加します。本番環境の場合は、最小権限を与えましょう。作成したロールを表示、「インラインポリシーを作成」を押下インラインポリシーを追加リポジトリアカウントのIAMロールにAssumeRoleできる権限とKMSにアクセスできる権限を付与します。}]}ポリシー名(sample-codepipeline-policy)を入力、「ポリシー作成」を押下ポリシーが作成できればOKです。DenyInsecureConnectionsは、CodePipelineが自動でS3を作成する際に付与されるポリシーを参考しております。そこに加え、リポジトリアカウントからアクセスできる権限を付与します。]}バケットポリシーの設定が完了すればOKです。後続の設定に作成したS3のARNを利用するため、メモしておきます。SampleApp.zip「パイプラインの作成」を押下後、パイプラインが実行されますが、エラーになります。リポジトリアカウントのsample-codepipeline-assume-roleを利用するように設定変更する必要があります。そのため、次の項目から変更方法を記載します。(マネジメントコンソールからの変更はできないため、CLIを使います。"arn:aws:iam::【リポジトリアカウントのID】:role/sample-codepipeline-assume-role",metadataの削除CodePipelineの設定を更新するにあたり、metadataの項目があるとエラーになるため、削除します。file://sample-codepipeline.jsonエラーが出なければOKです。10CodePipelineを起動するEventBridgeルールの作成(パイプラインアカウントで実施)実は、CodePipelineを作成する際に裏側でEventBridgeが作成されています。イベントバスがデフォルトで設定されているため、作り直します。「作成のメソッド」をカスタムパターンにイベントパターンにJSONを入力し、「次へ」を押下リポジトリのアカウントIDのsample-codecommitのmainブランチの変更を検知するルールになります。ブランチ名を変更したい場合は、referenceNameの設定を変更します。testCodePipelineの確認(パイプラインアカウントで実施)CodePipelineが正常終了すればOKです。デプロイ先のS3の確認(パイプラインアカウントで実施)S3を確認すると、アーティファクトがデプロイされていることが分かります。解答して中を覗くとtest.txtファイルが保存されていることが分かります。終わりに今回は、別のアカウントのCodeCommitを利用したCodePipeline構成を作成する方法をご紹介しました。どなたかのお役に立てれば幸いです。2009-引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。