CodeBuildでGitHubのパーソナルアクセストークンを使う方法と注意点

スポンサーリンク

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にチェックを入れてトークンを作成。

GitHubパーソナルアクセストークン設定

ちなみに詳しく調べていないですが、新機能の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プロジェクトを作成する際に接続を更新しないようにしながら使います。

参考

Access your source provider in CodeBuild

コメント

タイトルとURLをコピーしました