
HCP Terraform Tokenを1Passwordで管理してみる
HCP TerraformをAPI操作やTerraformで操作する際に、APIトークンを使用します。
このトークンは、terraform loginコマンドを実行することで簡単に作成できます。
この際に、APIトークンはローカルに平文で保存されます。(macOSの場合、デフォルトで~/.terraform.d/credentials.tfrc.jsonに保存されます。)
セキュリティ向上のために、1Passwordを使ってトークンをローカルに保存せずに利用する方法を紹介します
前提
- 1Password CLIのインストール
- Terraformバージョン v1.2以降
今回は環境変数を使った認証を利用します。
この機能は、Terraform v1.2.0以降でサポートされています。
1PasswordにHCP Terraform APIトークン用のアイテムを作成
以下のコマンドを実行してアイテムを作成します。
<your-actual-token-here>を保管したいトークンに置き換えてください。
op item create \
--category "Secure Note" \
--title "HCP Terraform Token" \
--vault "Private" \
"terraform_token[password]=<your-actual-token-here>"
ID: <ID>
Title: HCP Terraform Token
Vault: hoge
Created: now
Updated: now
Favorite: false
Version: 1
Category: SECURE_NOTE
Fields:
terraform_token:
[use 'op item get <ID> --reveal' to reveal]
以下のコマンドで1Passwordのアイテムを取得できます。
op item get "HCP Terraform Token" --reveal
# APIトークンだけ出力したい場合
op item get "HCP Terraform Token" --reveal --field terraform_token
1PasswordからHCP Terraform APIトークンを取得して環境変数にセット
terraform cliでは、TF_TOKEN_ドメイン名環境変数が設定されていれば、HCP Terraform Tokenとしてこの値を利用します。
前述の1Passwordのアイテム取得と組み合わせると以下のようにして、環境変数にセットできます。
export TF_TOKEN_app_terraform_io=$(op item get "HCP Terraform Token" --reveal --field terraform_token)
echo $TF_TOKEN_app_terraform_io
# HCP Terraform APIトークンが表示される
毎回コマンドをすべて打つのは大変なため、Shell関数にしておくと便利です。
# ~/.zshrc 等に追加
tf_login() {
echo "Setting up Terraform credentials from 1Password..."
export TF_TOKEN_app_terraform_io=$(op item get "HCP Terraform Token" --reveal --field terraform_token)
echo "✅ Terraform credentials loaded"
}
動作確認
CLI Driven WorkflowのHCP Terraformワークスペース上でPlanを実行して、正常にPlanが実行できるか試してみます。
サンプルコードは以下です。
terraform.cloudブロックを定義しているので、HCP Terraformがバックエンドに利用されています。
terraform {
cloud {
organization = "<HCP Terraform Org名>"
workspaces {
name = "hcp-tf-1password-test"
}
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.0"
}
}
required_version = ">= 1.13.0"
}
# VPC Module
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 6.0.1"
name = "${var.environment}-vpc"
cidr = "10.0.0.0/16"
azs = ["ap-northeast-1a", "ap-northeast-1c"]
private_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
enable_nat_gateway = false
enable_vpn_gateway = false
enable_dns_hostnames = true
enable_dns_support = true
}
ローカルから実行する際に、HCP Terraformとの認証が必要になるため、APIトークンが設定されていないとエラーになります
# HCP Terraform APIトークン設定なし
terraform plan
│ Error: Failed to read organization "<HCP Terraform Org名>" at host app.terraform.io
│
│ Encountered an unexpected error while reading the organization settings: unauthorized
環境変数をセットするShell関数を実行して、Planが正常に動作することを確認できました。
tf_login # HCP Terraform APIトークンセット
terraform plan
Running plan in HCP Terraform. Output will stream here. Pressing Ctrl-C
will stop streaming the logs, but will not stop the plan running remotely.
Preparing the remote plan...
The remote workspace is configured to work with configuration at
terraform relative to the target repository.
# 省略
# Plan結果
おわりに
HCP Terraform・Terraform Enterprise用の1Password プラグインがあれば良かったのですが、現時点(2025/11時点)では存在しないため環境変数を使ってやってみました。
ちなみに以下のプラグインはあるのですが、コミュニティ版のTerraformを対象としているようでした。








