AWS CodePipeline と GitHub Organization のリポジトリをマルチテナントで接続する方法
SRE チームの @kumagaias です。
今年 2 つ目の目標は毎日体重を測定することで
ヘルスケアアプリに自動で記録してくれる体重計を買いました。
自分の体のオブザーバビリティが上がって良い感じです。
まとめ
以下の AWS ブログの通り、GitHub で UAT (User Access Token) 用のユーザーを作成し、接続すれば実現できます。
しかし画面からは UAT かどうか判別できず、ハマる部分も多かったため
概念を図で整理しました。
少しでもどなたかのお役に立てれば幸いです 🙏
そもそもの課題
普通に CodePipeline と GitHub (Organization) を接続すると
どの AWS Account からも AWS Connector for GitHub
で接続している全リポジトリを見られるようになります。
全て社内開発であればこれで良さそうですが、
特定の AWS アカウントでの開発を外部の方にお願いしていて
かつ CodePipeline を使いたい場合、少し不都合があります。
こうしたい
AWS Account ごとに連携するリポジトリを分けたいです。
3 パターンを理解するのがポイントです。
- UAT 接続により AWS アカウント AAA / BBB は連携するリポジトリを
UAT 用のユーザー単位
(UAT 用のユーザーがアクセスできるリポジトリ) で制限されます - UAT 接続ではない AWS アカウント CCC は
AWS Connector for GitHub
内の全リポジトリを連携できます - 「その他」リポジトリは
AWS Connector for GitHub
外 (未承認) なので、そもそも連携できません
やり方
準備
-
AWS Connector for GitHub をインストールしておきます
- オーナー権限が必要です
- UAT 接続用のユーザーを作成します
- つまり、ユーザー数分のお金がかかります
- こちらはメンバー権限で大丈夫です
- UAT 接続用のユーザーに、今回連携したいリポジトリのアクセス権を付与します
UAT 接続
- GitHub は UAT 接続用のユーザーでログインしておきます
- AWS CodePipeline connections を新規で作成します
- その際 App Installation を空欄にして作成すると UAT 接続になります
- GitHub Organization の Settings > GitHub Apps で
AWS Connector for GitHub
にReview request
があったら承認します (☝️ 見落としがちです)
接続を作成
接続名を入れて次へ
App Installation を空欄にして次へ
この後、GitHub との連携画面に切り替わるので、UAT 用のユーザーで連携します。
(2 回目以降は表示されません)
GitHub 側の Settings > GitHub Apps で Review request
が届いている場合は中身を見て承認しましょう。
確認
CodePipeline 作成画面で source に GitHub を選択し、先ほど作成した接続を選択します。
UAT 用のユーザーのリポジトリのみ表示されていれば成功です 🎉
終わりに
本件、AWS サポートの方々には大変お世話になりました。
画面共有しながらのウォークスルーセッションも開催いただき、
無事に解決することができました。
心より感謝申し上げます 🙇
Discussion