Terraform cloud から GitHub の Token を取得する
Terraform cloud の文脈でいうと、2023年の1月に「Dynamic Provider Credentials」という機能がリリースされ、特定の Provider に対して動的に Credentials の情報が取得できるようになりました
2023/11現在でサポートされてる Provider は以下になります
- Vault
- AWS
- GCP
- Azure
このリストには GitHub が含まれていません。
なので GitHub の Token を取得する場合はこの仕組みではなく、別の仕組みを用いる必要があります。
もちろん発行済の GitHub Token を Terraform cloud の Variables に設定すれば接続することは可能です。
ただその方法だと Token の有効期限を気にしながら運用をしなくてはいけなくなるので、動的に Token を取得できる方法を採用したいところです。
GitHub Apps を用いた Token の払い出し
GitHub Apps を用いると、動的な Token の払い出しを実現することができます。
以下の Zenn の記事は GitHub Actions 向けの記述になっていますが、同様の方法で GitHub Apps を作成すると、Terraform cloud からでも動的に Token の生成を行うことができます。
以下では、GitHub Apps が存在する前提で、Terraform cloud 側で必要な設定について記述します。
Terraform cloud 側の設定
GitHub Apps 経由で Token を払い出すためには、以下の設定が必要になります。
key | value |
---|---|
GITHUB_APP_ID | GitHub Apps の ID。 Apps の 「General」 画面に表示されている App ID の数字 |
GITHUB_APP_INSTALLATION_ID | Organization にインストールされた Apps の ID。「Install App」 画面 - 設定画面 に遷移した際に URL 末尾に表示されている数字 |
GITHUB_APP_PEM_FILE | GitHub Apps の Private Key |
Terraform cloud の variables に登録する際は上記の key name で登録する必要は必ずしもないですが、ここでは上記の値で登録したとして進めます。
Terraform 側の設定
GitHub Provider の設定で、Terraform cloud の variables で設定した値を指定します。
variable "GITHUB_APP_ID" {
type = string
}
variable "GITHUB_APP_INSTALLATION_ID" {
type = string
}
variable "GITHUB_APP_PEM_FILE" {
type = string
}
provider "github" {
owner = "(organization)"
app_auth {
id = var.GITHUB_APP_ID
installation_id = var.GITHUB_APP_INSTALLATION_ID
pem_file = var.GITHUB_APP_PEM_FILE
}
}
これらの設定をすることで、Terraform cloud 上で terraform コマンドを実行した時に、GitHub provider 経由で自動的に Token 情報を取得してくれるようになります。
Discussion