🐻

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 GitHubReview request があったら承認します (☝️ 見落としがちです)

接続を作成

接続名を入れて次へ

App Installation を空欄にして次へ

この後、GitHub との連携画面に切り替わるので、UAT 用のユーザーで連携します。
(2 回目以降は表示されません)

GitHub 側の Settings > GitHub Apps で Review request が届いている場合は中身を見て承認しましょう。

確認

CodePipeline 作成画面で source に GitHub を選択し、先ほど作成した接続を選択します。
UAT 用のユーザーのリポジトリのみ表示されていれば成功です 🎉

終わりに

本件、AWS サポートの方々には大変お世話になりました。

画面共有しながらのウォークスルーセッションも開催いただき、
無事に解決することができました。

心より感謝申し上げます 🙇

TRUSTDOCK テックブログ

Discussion