AWS Cloud Control (AWSCC) provider とは?
AWS Cloud Control (AWSCC) provider は、簡単にいうと AWS provider がまだ対応していないリソースの構築を迅速にサポートする provider です。
例えば Amazon Q Developer in chat applications (旧称: AWS Chatbot) を Slack 通知する構成 aws_chatbot_slack_channel_configuration
は AWS provider だと 2024 年 8 月 2 日に登場した v5.61.0 でサポートされました。
AWSCC provider の場合、これに対応する awscc_chatbot_slack_channel_configuration
は 2021 年 12 月 3 日の時点で使用できる状態になっていました。
このため、新しいサービスが登場してからできるだけ早く IaC 化したい際には必要不可欠な provider です。
HCP Terraform 利用時の疑問
HCP Terraform を利用する場合、AWS provider の認証にはセキュリティ面を考慮し Dynamic Provider Credentials を利用したいです。
下記に利用方法が示されていますが、これはあくまで AWS provider の手順であり、AWSCC provider に関する言及はありません。
他に AWSCC provider 向けの Dynamic Provider Credentials のドキュメントが見当たらないので、AWSCC provider では Dynamic Provider Credentials は利用できないのでしょうか?
やってみたらできた
下記のようなコードを用意し、Workspace には AWS provider 向けの Dynamic Provider Credentials の設定を実施しました。
terraform {
required_providers {
awscc = {
source = "hashicorp/awscc"
version = "1.33.0"
}
}
}
provider "awscc" {
region = "ap-northeast-1"
}
resource "awscc_ec2_vpc" "example" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
}
するとなんと、すんなり plan / apply できるではありませんか!
なぜ認証できる?
公式の情報が見つからないので調査してみました。
AWSCC provider のドキュメントを見ると、AWS provider と同様に様々な認証手段が用意されています。
実験に利用した terraform コードでは認証手段を明示していなかったので、環境変数経由で認証情報が渡されている可能性があります。
このため下記の null_resource で AWS の Dynamic Provider Credentials 設定がある場合にどのような環境変数がセットされているか確認しました。
resource "null_resource" "print_aws_env" {
provisioner "local-exec" {
command = "env | grep AWS_"
}
}
Apply すると下記が出力されました。
Executing: ["/bin/sh" "-c" "env | grep AWS_"]
TFC_AWS_PROVIDER_AUTH=true
AWS_SHARED_CREDENTIALS_FILE=/home/tfc-agent/.tfc-agent/component/terraform/runs/run-xxx/tfc-aws-shared-config
TFC_AWS_RUN_ROLE_ARN=<Dynamic Provider Credentials 用 IAM ロールの ARN>
このうち、TFC_
から始まる 2 つの環境変数は AWS の Dynamic Provider Credentials 設定であり Workspace の Variables 経由で引き渡しているものです。
AWS_SHARED_CREDENTIALS_FILE
が追加されているようですね。
この内容を見てみたいので、別の null_resource を試します。
resource "null_resource" "print_aws_env" {
provisioner "local-exec" {
command = "cat $AWS_SHARED_CREDENTIALS_FILE"
}
}
Apply すると下記が出力されました。
[default]
role_arn=<Dynamic Provider Credentials 用 IAM ロールの ARN>
web_identity_token_file=/home/tfc-agent/.tfc-agent/component/terraform/runs/run-xxx/tfc-aws-token
role_session_name=terraform-run-xxx
これらの内容は、AWSCC provider の認証方法の一つである Assume Role Using Web Identity の記述と対応しています。
つまり、AWS provider 向けの Dynamic Provider Credentials の設定を実施することで、(少なくとも現時点では) AWSCC provider も HCP Terraform で Dynamic Provider Credentials が利用できることが分かりました。
これはドキュメントで明らかになっていない内容ですので、今後変更される可能性があることに注意が必要です。