プライベートなCodeBuild環境から、CodePipelineを使ってCodeCommitにアクセスしました

2020.12.21

いわさです。

先日プライベートなVPC環境でCodeBuildからCodeCommitへアクセスすることが出来ました。

プライベートなCodeBuild環境からCodeCommitにアクセスしました

CodeBuild単体で使用している場合は動作しますが、CodePipelineを組み合わせた環境の場合、失敗します。
今日はソースプロバイダをCodePipelineにした場合でも同環境でアクセスできるように設定を変更します。

ソースプロバイダの変更

ソースプロバイダをCodePipelineにするには、CodePipelineの新規作成フローの中で、CodeBuildの新規作成を行う必要があります。
ビルドステージを追加するメニューにてプロジェクトの新規作成を行います。

左がCodeBuildから新規作成した場合、右がCodePipelineから新規作成した場合です。
CodePipelineから新規作成した場合はソースプロバイダの選択が省略されます。

作成すると、ソースプロバイダが"CodePipeline"になります。

冒頭で触れた先日の記事では、CodeCommitへのVPCエンドポイントを作成することで、VPC上で実行されたCodeBuildコンテナからCodeCommitにアクセスし、ソースコードのダウンロードを行うことが出来ました。

まず、今回同じ設定状態でどうなるか試してみます。

DOWNLOAD_SOURCEフェーズでタイムアウトしました。

CodeCommit権限の付与

CodePipelineから新規作成したCodeBuildプロジェクトを単体実行してみてください。
もしそれで認証エラーが起きる場合はCodeCommitを操作するポリシーを付与する必要があります。
対象ロールはCodeBuildの環境セクションに記載されているロールです。

単体実行で認証エラーが起きなくなったあとにもう一度CodePipelineから再実行します。

まだ、DOWNLOAD_SOURCEフェーズでタイムアウトが発生すると思います。

S3 VPCエンドポイントの作成

ソースプロバイダが"CodePipeline"の場合、CodeBuildがgitリポジトリからソースコードをダウンロードするのではなく、CodePipelineによってCodeCommitとCodeBuildの間の受け渡しを行います。
CodePipelineはステージ間の受け渡しにAmazon S3を使用しています。

よってここではプライベートなVPC上のCodeBuild環境からS3にアクセスする必要があるため、S3のVPCエンドポイントが必要になります。
逆に、先日作成した git-codecommitのVPCエンドポイントは不要になります。(logsは必要)

これで実行してみます。

成功しました!

これで、カスタムコンテナイメージを用意するなどすればVPCエンドポイントで完結するプライベートな環境が作成できそうです。