2023/10/14
Categories:
Workflow Identity Providerよくわからん
Workflow Identity Providerを使ってGitHub ActionsからTerraformでデプロイかけようと思ったけど認証がうまくいかなかった。
ここを元にちゃんと設定できてるかをチェックしたらうまくいった。
設定を間違えていたのは2点。
- 利用したいリポジトリに借用するサービスアカウントのアクセス権の付与がTerraformの変数の設定誤りでうまくいってなかった
- GitHub Actionsのステップでログインのステップが抜けていた。
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
これよりcreate_credentials_file: true
にすれば認証情報がファイルに出力されてloginする必要もない。
なんも考えずに設定しようとしたのが問題なので簡単にまとめる。
google-github-actions/auth at v1は、サービスアカウントのキー認証
とWorkload Identyty Providerによる認証
の2種類用意されている。
前者はキー認証。後者はGitHub ActionsのOIDCトークンを使ってGoogle Cloudのアクセストークンを発行する方式。アクセストークンを発行するためにどのGitHubのリポジトリからの認証を許可するのか、どのサービスアカウントを割り当てるのかをWorkflow Identity Providerで設定している。
認証に成功するとgoogle-github-actions/auth at v1に記載の内容が返却される。
step実行時にcreate_credentials_file: true
を渡すと認証情報がファイル出力され、必要な環境変数がセットされる。ファイルはワークフローが終了するときに削除される。
特定のファイル変更があったときだけコンテナイメージを作成
tj-actions/changed-files
を使うと変更されたファイルの一覧がとれるのでそれで特定できるっぽい。
- GitHub Actionsで変更ファイルに応じた処理
- tj-actions/changed-files: :octocat: Github action to retrieve all (added, copied, modified, deleted, renamed, type changed, unmerged, unknown) files and directories.
files_yaml
を指定することで対象に変更があったかをチェックできる。
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v39
with:
files_yaml: |
go:
- go.mod
- go.sum
- '**/*.go'
- uses: actions/setup-go@v4
- name: 'Build and publish Go apps'
if: steps.changed-files.outputs.go_any_changed == 'true'
env:
KO_DOCKER_REPO: ${{ vars.DOCKER_REPOSITORY }}
run: ko build --base-import-paths --sbom none ./cmd/api