🔖

Terraform cloud から GitHub の Token を取得する

2023/11/02に公開

Terraform cloud の文脈でいうと、2023年の1月に「Dynamic Provider Credentials」という機能がリリースされ、特定の Provider に対して動的に Credentials の情報が取得できるようになりました
https://www.hashicorp.com/blog/terraform-cloud-adds-dynamic-provider-credentials-vault-official-cloud-providers

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 の生成を行うことができます。

https://zenn.dev/moaikids/articles/10b8afb2c45c83

以下では、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