1. 概要
issensitive— 値がsensitiveかどうかを確認nonsensitive— sensitive値のsensitiveフラグを解除- sensitiveの伝播のしくみ
- 実際のユースケース
issensitive(value)とnonsensitive(value)はTerraformのsensitive値を操作するための関数です。sensitive属性は自動的に伝播するため、意図せずsensitiveになった値の扱いに使います。
2. issensitive — sensitive値かどうかを確認
issensitive(value)は値がsensitiveならtrue、そうでなければfalseを返します。
# terraform consoleで確認
> issensitive("plain text")
false
> issensitive(sensitive("secret"))
true
デバッグでの活用
terraform {
required_version = ">= 1.9"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
variable "environment" {
description = "環境名"
type = string
default = "dev"
}
variable "db_password" {
description = "データベースパスワード"
type = string
sensitive = true
}
locals {
# sensitiveな値を含む文字列はsensitiveが伝播する
connection_string = "postgres://user:${var.db_password}@localhost:5432/mydb"
# connection_stringもsensitiveになる
# issensitiveで確認
is_conn_sensitive = issensitive(local.connection_string) # → true
}
data "aws_ami" "amazon_linux_2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
}
resource "aws_instance" "db" {
ami = data.aws_ami.amazon_linux_2023.id
instance_type = "t3.micro"
root_block_device {
volume_size = 20
volume_type = "gp3"
encrypted = true
}
tags = {
Name = "${var.environment}-db"
Environment = var.environment
ManagedBy = "terraform"
}
}
3. sensitiveの伝播のしくみ
variable "secret" {
type = string
sensitive = true
}
locals {
# sensitiveが伝播するケース(すべてsensitiveになる)
concat_str = "prefix-${var.secret}" # sensitive
in_list = [var.secret, "other"] # sensitive
in_map = { key = var.secret } # sensitive
after_upper = upper(var.secret) # sensitive
# 補足: sha256などのハッシュ関数を使ってもsensitive
hashed = sha256(var.secret) # sensitive(ハッシュでも伝播する)
}
4. nonsensitive — sensitiveフラグを解除する
nonsensitive(value)はsensitive値のsensitiveフラグを解除します。解除した値はplanやログに平文で表示されるため、本当に安全な値にのみ使います。
variable "api_key" {
description = "APIキー"
type = string
sensitive = true
}
locals {
# APIキーのsha256ハッシュ(先頭8文字)をタグに使いたい
# sha256のハッシュはsensitiveが伝播するが、ハッシュ自体は安全
api_key_hash = sha256(var.api_key)
# nonsensitiveで解除してタグに使えるようにする
# ハッシュ値は元の値を復元できないので安全
api_key_tag = nonsensitive(substr(local.api_key_hash, 0, 8))
}
resource "aws_s3_bucket" "app" {
bucket = "${var.environment}-app"
tags = {
Name = "${var.environment}-app"
Environment = var.environment
ManagedBy = "terraform"
ApiKeyRef = local.api_key_tag # ハッシュの先頭8文字(安全)
}
}
5. nonsensitiveの正しい使い方
# ✅ 安全な使い方
locals {
# ハッシュ値は元のパスワードを復元できないので安全
password_hash_display = nonsensitive(sha256(var.password))
# 長さ(文字数)は安全
key_length = nonsensitive(length(var.api_key))
}
# ❌ 危険な使い方(絶対にしない)
locals {
# 平文のパスワードをnonsensitiveで解除するのは危険
# plaintext_password = nonsensitive(var.password) # ← 絶対にやらない
}
6. 関連記事
- sensitive変数の使い方 — sensitiveの基本
- output の sensitive オプション — outputでのsensitive
- base64encode / md5 / sha256 / uuid — ハッシュ関数でsensitiveを安全に使う
7. まとめ
issensitive(value)— 値がsensitiveかどうかをboolで返す。デバッグに使うnonsensitive(value)— sensitiveフラグを解除する。ハッシュ値など元の値を復元できない場合のみ使う- sensitiveは自動的に伝播する。文字列結合・リスト・mapへの代入でも伝播する
nonsensitive()で解除した値はplanやログに平文で表示される。使用は慎重に
動作確認バージョン: Terraform >= 1.9 公式ドキュメント: https://developer.hashicorp.com/terraform/language/functions/issensitive