質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
AWS CodeStar

AWS CodeStarは、ソフトウェア開発プロジェクトを作成し、管理および操作できるクラウドサービス。継続的デリバリーのツールチェーン全体を手軽に設定し、コードのリリースをすばやく開始できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

4535閲覧

【AWS CodeBuild】CodeCommit内のブランチとの連携

tanaka_123

総合スコア3

AWS CodeStar

AWS CodeStarは、ソフトウェア開発プロジェクトを作成し、管理および操作できるクラウドサービス。継続的デリバリーのツールチェーン全体を手軽に設定し、コードのリリースをすばやく開始できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2021/10/24 09:54

AWS Codeシリーズ初心者です。

CICDクロスアカウントを実現したいです。

アカウントAのCodeCommitに、アカウントBのCodepipeline(ビルド、デプロイ)がアクセスします。
CodeCommitにてソース管理をしており、
CodeCommitの対象リポジトリ内のdevelopブランチへのpushをトリガーに
CodeBuildにてビルドプロジェクトが動きます。

パイプラインのソースステージの出力アーティファクト形式は完全クローンを指定しています。

ビルドプロジェクトが動く際、ビルドステージの「DOWNLOAD_SOURCE」のフェーズにて、
「CLIENT_ERROR: authorization failed for primary source and source version コミットID」エラーが出力されました。

こちらに関するエラーを調べたところ、GitHubなどをソースプロバイダーに指定した際に
トークンの不備で出力されるエラーと解釈したのですが、
ソースプロバイダーにCodeCommitを指定しているため、当該エラーが出力される意味が分からず困っています。

ちなみにアカウントBのCodeBuildのロールには、下記を設定しております。

{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"codecommit:GitPull"
],
"Resource": "arn:aws:codecommit:region:<AccountAのID>:<AccountAのrepository名>",
"Effect": "Allow"
}
]
}

原因を教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

クロスアカウントアクセスをするための設定が不足していると思われます。
何も設定していなければ、別のAWSアカウントのリソースのAPIには通常はアクセスできません。
今回の場合、CodePipelineを使用しているのでアカウントBのCodePipelineのサービスロールからアカウントAのCodeCommitのリポジトリを参照できる必要があります。
そのためにはアカウントA上でアカウントAのCodeCommitを参照できるIAMロールを作成し、アカウントBのCodePipelineのサービスロールからAssumeRoleでアカウントA上に作成したロールの権限を引き受けてCodeCommitを参照する必要があります。

こちらの記事がまさにちょうどやりたいことをそのままやっていると思われます。
CodePipelineでアカウントをまたいだパイプラインを作成してみる
記事ではCodeCommitがあるアカウント上に作ったロールでAssumeRoleの呼び出し元を特に制限していませんが、適宜ポリシーによって呼び出し元を絞るべきでしょう。
CodeBuildのロールもDockerイメージのビルドをしてECRにpushすることを想定した権限設定なので適宜必要な権限に変更してください。

CodeBuild→CodeCommitのクロスアカウントアクセスとは違うのでピッタリとハマるケースではないですが、下記なども参考になります。
ロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを設定する
CodeCommitへのクロスアカウントアクセスを試してみた
IAM チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任

AssumeRoleそのものについては下記の記事などがわかりやすいです。
IAMロール徹底理解 〜 AssumeRoleの正体
IAM ロールの PassRole と AssumeRole をもう二度と忘れないために絵を描いてみた

また、以後ソース等を貼る時は読みやすさのためにコードブロックで貼ってください。

投稿2021/10/24 18:00

yu_1985

総合スコア7586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanaka_123

2021/10/25 23:54

回答ありがとうございます。 >今回の場合、CodePipelineを使用しているのでアカウントBのCodePipelineのサービスロールからアカ>ウントAのCodeCommitのリポジトリを参照できる必要があります。 >そのためにはアカウントA上でアカウントAのCodeCommitを参照できるIAMロールを作成し、アカウン>トBのCodePipelineのサービスロールからAssumeRoleでアカウントA上に作成したロールの権限を引き>受けてCodeCommitを参照する必要があります。 こちらはすでにできており、下記サイトの内容は完成しました。 「CodePipelineでアカウントをまたいだパイプラインを作成してみる」 しかし、今回、パイプラインのソースステージでの出力アーキテクチャをZIP出力→完全クローンに変更した際、このようなエラーになりました。 何か原因お判りでしょうか。
tanaka_123

2021/10/26 00:07

また、パイプラインのロールに  "codecommit:GetRepository" の許可も与えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問