CodeBuildのGitHubへの接続クレデンシャルにはパーソナルアクセストークンを使用することができます。
ちなみに仕様の注意点
ただしこのクレデンシャルはなんか謎な仕様で、アカウント×リージョン単位で1個のパーソナルアクセストークンが全てのプロジェクトに共有されます。
WEBコンソール上ではプロジェクト作成に紐付いて接続が行われるように見えますが、実はあの画面で接続を更新すると内部的に共有のクレデンシャル情報が更新されます。
これは例えば、会社など共有のAWSアカウントで権限の異なるIAMユーザーがいるような環境の場合
- リポジトリAの権限がある社員がリポジトリAソースのCodeBuildプロジェクトAを作る
- リポジトリBの権限がありAの権限が無い社員がリポジトリBソースのCodeBuildプロジェクトBを作る
- この際に接続を更新してしまう
- CodeBuildプロジェクトAがリポジトリAからソースを落とせなくなる
というような事故が起こります。(実体験)
なのでIaCからCodeBuildプロジェクトを作る際も、クレデンシャルを複数のIaCから作成すると毎回更新することになってしまうので含めないほうが良いです。
ということで、以下がそのアクセストークンをCLIから設定する方法です。
パーソナルアクセストークンが設定されているか確認
$ aws codebuild list-source-credentials
{
"sourceCredentialsInfos": []
}
sourceCredentialsInfosが空ならそのリージョンでは設定されていないということになります。
GitHubでパーソナルアクセストークンの取得
GitHubの右上のアイコン > Settings > 左下のDeveloper settings > Personal access tokens > Tokens (classic)
右上の Generate new token > Generate new token (classic) からrepoのscopeにチェックを入れてトークンを作成。
ちなみに詳しく調べていないですが、新機能のFine-grained tokensではCodeBuildから接続できないみたいです。
(参考:AWS CodeBuild with GitHub fine-grained personal access tokens)
パーソナルアクセストークンのインポート
まず以下のような内容のJSONファイルを用意します。
{
"serverType": "GITHUB",
"authType": "PERSONAL_ACCESS_TOKEN",
"token": "パーソナルアクセストークン"
}
これを import-source-credentials
コマンドでCodeBuildにインポートします。
aws codebuild import-source-credentials --cli-input-json file://[ファイル名]
↑の出力
{
"arn": "arn:aws:codebuild:ap-northeast-1:(アカウントID):token/github"
}
このARNからも、アカウント×リージョンの単位で1つしか存在しないリソースであることがわかります。
再び list-source-credentials
で追加されていることを確認。
$ aws codebuild list-source-credentials
{
"sourceCredentialsInfos": [
{
"arn": "arn:aws:codebuild:ap-northeast-1:(アカウントID):token/github",
"serverType": "GITHUB",
"authType": "PERSONAL_ACCESS_TOKEN"
}
]
}
以降はCodeBuildプロジェクトを作成する際に接続を更新しないようにしながら使います。
コメント