1. 背景

terraformでIAMユーザを作成し、アクセスキーとシークレットアクセスキーを表示しようとしました。

でも、エラーになるんですよね。

それに対応した記録です。

2. 事象

terraform planしたら、以下のようにエラーが表示されました。

 To reduce the risk of accidentally exporting sensitive data that was intended to be only internal, Terraform
│ requires that any root module output containing sensitive data be explicitly marked as sensitive, to confirm
│ your intent.
│
│ If you do intend to export this data, annotate the output value as sensitive by adding the following argument:
│     sensitive = true

以下のようなコードにしていました。アクセスキーとパスワードはそのまま表示されるのですが、シークレットアクセスキーが表示されません。

output app_user_access_key {
  value = “${aws_iam_access_key.apli_s3put.id}
  }
output app_user_secret_access_key {
  value = “${aws_iam_access_key.apli_s3put.secret}
  }
output password {
  value = aws_iam_user_login_profile.apli_s3put.password
  }

3. エラーを出さないために

3.1. sesitiveの設定

エラーを出さないために、sensitive = trueを追加しました。

まとめてやってしまおうと思ったので、全てに入れてます。

output app_user_access_key {
  value = “${aws_iam_access_key.apli_s3put.id}
  sensitive = true
}
output app_user_secret_access_key {
  value = “${aws_iam_access_key.apli_s3put.secret}
  sensitive = true
}
output password {
  value = aws_iam_user_login_profile.apli_s3put.password
  sensitive = true
}

そしてapplyします。以下のように<sensitive>と表示されます。

app_user_access_key = <sensitive>
app_user_secret_access_key = <sensitive>
password = <sensitive>

3.2. sensitiveを表示

terraform output -jsonとやります。

そうすると、以下のように表示されます。(値はマスクしてます。)

{
  “app_user_access_key”: {
    “sensitive”: true,
    “type”: “string”,
    “value”: “AAAAAAAAAAAAAAAA”
  },
  “app_user_secret_access_key”: {
    “sensitive”: true,
    “type”: “string”,
    “value”: “vbbbbbbbbbbbaddsfastgawerqa”
  },
  “password”: {
    “sensitive”: true,
    “type”: “string”,
    “value”: “cccccccc”
  }
}