[HCP Terraform]Team Token利用時のGitHub接続はGitHub OAuthを利用しよう

[HCP Terraform]Team Token利用時のGitHub接続はGitHub OAuthを利用しよう

Clock Icon2025.05.07

HCP TerraformのTeam Tokenを使って、GitHub接続の設定をする際はGitHubとの接続にOAuthを利用する必要があります。

OAuthを使ってHCP TerraformとGitHubの接続をやってみました。

なぜTeam Token利用時はOAuthによるGitHub接続が必要なのか

HCP TerraformとGitHubの接続には、以下2つの方法があります。

  • OAuth
  • GitHub App

Team Tokenは、GitHub Appトークンを所有できません。そのため、OAuthを使う必要があります。

Note: Only an HCP Terraform user can own a GitHub App token. Team and Organization API tokens are not able to own a GitHub App token.

Create and manage users in HCP Terraform | Terraform | HashiCorp Developer

Team Tokenを利用して、GitHub AppのインストールIDを確認するAPIを叩くと以下のように403が返ってきます。

TOKEN="<TEAM TOKEN>"
curl \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/github-app/installations
出力
{"errors":[{"status":"403","title":"forbidden","detail":"Team and Organization Tokens are not supported"}]}%

ちなみに、User Tokenでは以下のようにGitHub Appの情報が返ってきます。

{
  "data": [
    {
      "id": "ghain-hogehoge",
      "type": "github-app-installations",
      "attributes": {
        "name": "hoge",
        "installation-id": 123456,
        "icon-url": "https://avatars.githubusercontent.com/u/123456?v=4",
        "installation-type": "Organization",
        "installation-url": "https://github.com/organizations/hogehoge/settings/installations/123456"
      }
    }
  ]
}

やってみた

TerraformコードのBackendはHCP Terraformとして、WorkspaceにTeam Tokenを設定します。

tfe providerはTeam Tokenを使って、GitHubと連携するHCP Terraform Workspaceを作成します。

vscode-drop-1746319225885-1gfkeqrhapv.png

GitHub OAuth VCS Providerの設定

以下の手順で、GitHubとの接続を行います。

https://developer.hashicorp.com/terraform/cloud-docs/vcs/github

HCP Terraformの画面上で、Settings -> Providers -> Add a VCS providerの順に選択します。

Choose a version control provider to connectは、GitHub.com(Custom)を選択します。

vscode-drop-1746591305670-0ii9jlvd9gjo.png

register a new OAuth Applicationを選択して、GitHubの画面に遷移しOAuth Applicationを設定します。

vscode-drop-1746591388164-00woz0uzxa27.png

Register applicationを選択します。

vscode-drop-1746591463793-ivro9qfj3as.png

Client IDClient secretsが表示されるため、これをコピーしてHCP Terraformの設定画面に貼り付けます。

vscode-drop-1746591571791-3e2tihan5bq.png

貼り付けたら、HCP TerraformのVCS設定画面でConnect and continueを選択します。

最後に承認画面が出表示されるため、問題なければAuthorizeを選択します。

Team Tokenの作成

Settings -> Security -> API tokens -> Team Tokens -> Create a team tokenの順に選択します。

任意のチームを選び、Createを選択してTokenを作成します。

vscode-drop-1746598341714-31oknvm2v5z.png

Tokenが表示されるので、控えておきます。

Workspaceの作成・WorkspaceにTeam Tokenを設定

以下のtfファイルを用意します。

GitHub連携したWorkspaceを作成するという内容です。

GitHubリポジトリは、以前作成したサンプルコードを指定しています。

terraform.cloudブロックと、terraform.tfvarsは各自の環境に合わせて置き換えてください。

terraform {
  required_version = "~> 1.11.2"
  required_providers {
    tfe = {
      source  = "hashicorp/tfe"
      version = "~> 0.64.0"
    }
  }
  cloud {
     organization = "<Organization名>"

     workspaces {
       name    = "<Workspace名>"
       project = "<Project名>"
     }
   }
}

provider "tfe" {
  hostname = "app.terraform.io"
}

data "tfe_oauth_client" "this" {
  organization = var.hcp_tf_organization_name
  name         = var.hcp_tf_oauth_client_name
}

data "tfe_project" "this" {
  name         = var.hcp_tf_project_name
  organization = var.hcp_tf_organization_name
}

resource "tfe_workspace" "this" {
  name         = "test-github-oauth-ec2"
  organization = var.hcp_tf_organization_name
  vcs_repo {
    branch         = "main"
    identifier     = "msato0731/aws-tfc-introductory-book-samples"
    oauth_token_id = data.tfe_oauth_client.this.oauth_token_id
  }
  working_directory = "infra/chapter5/aws/prod"
  project_id        = data.tfe_project.this.id
}
variables.tf
variable "hcp_tf_organization_name" {
  description = "The name of the HCP Terraform organization"
  type        = string
}

variable "hcp_tf_oauth_client_name" {
  description = "The name of the HCP Terraform OAuth client"
  type        = string
}

variable "hcp_tf_project_name" {
  description = "The name of the HCP Terraform project"
  type        = string
}
terraform.tfvars
hcp_tf_oauth_client_name = ""
hcp_tf_organization_name = ""
hcp_tf_project_name      = ""

以下を実行すると、Workspaceが作成されます。

terraform init

Workspaceに対して、Team Tokenを設定します。

HCP Terraform上でWorkspaceを選択し、Variables -> Workspace variables -> Add Variableの順に選択します。

以下の設定でVariableを追加します。

Variable category Key Value
Environment Variable TFE_TOKEN <作成したTeam Token>

vscode-drop-1746600755794-y354pjn6py.png

Tokenを設定したら、Terraformを実行してGitHubと連携したWorkspaceを作成します。

terraform plan
terraform apply

HCP Terraform上にVCSと連携したWorkspaceが作成できていればOKです。

vscode-drop-1746603402687-y6zrov07x7m.png

Tips: OAuth認証用のGitHubサービスユーザーを用意する

OAuth Appは作成したGitHubユーザーに紐づきます。

設定したユーザーがOrganizationsを抜けると、切断され再接続が必要になります。

vscode-drop-1746604260060-wwii7gag1yj.png

本番運用時には、OAuth設定用のGitHubユーザーを用意し設定することをおすすめします。

Set up the GitHub.com OAuth VCS provider | Terraform | HashiCorp Developer

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.