Open4

AWS SSOでTerraformを使う

quo1987quo1987

TerraformでAWSを使う場合は以下の2パターンで認証周りの設定が必要。

  • backendとしてのs3
  • providerとしてのaws

やり方はいろいろとあるが、なるべくtfファイルに依存しない方法で使いたい。

前提

環境周りのバージョン

$ aws --version
aws-cli/2.15.8 Python/3.11.6 Linux/6.2.0-1018-azure exe/x86_64.debian.11 prompt/off

$ terraform --version
Terraform v1.6.6
on linux_amd64
+ provider registry.terraform.io/hashicorp/archive v2.4.1
+ provider registry.terraform.io/hashicorp/aws v3.76.1

AWSへSSOログイン

Terraform実行環境でAWS SSO プロファイルを設定する。

aws configure sso

ログインが完了すると~/.aws/configがこんな感じになっているはず。

~/.aws/config
[profile throwtrash-deploy]
sso_session = throwtrash-deploy
sso_account_id = xxxxxxxxxxxx
sso_role_name = throwtrash-deploy
region = ap-northeast-1
output = json
[sso-session throwtrash-deploy]
sso_start_url = https://xxxxxxxxx.awsapps.com/start
sso_region = us-east-1
sso_registration_scopes = sso:account:access
quo1987quo1987

backendとしてのs3

terraform initのオプションで-backend-config="profile=ssoプロファイル名を付ければよい。

terraform init -backend-config="profile=throwtrash-deploy"
quo1987quo1987

providerとしてのaws

環境変数AWS_PROFILEにプロファイル名を指定したうえでterraform planなどを実行する。

export AWS_PROFILE="throwtrash-deploy"

terraform plan
quo1987quo1987

よくよく動作確認すると、前提条件で提示した~/.aws/configは新しいフォーマットらしく、providerとして使う場合にエラーが発生した。(backendの方は問題なかった)

このためsession-profileを参照しないようにレガシーフォーマットに修正する必要があった。

~/.aws/config
[profile throwtrash-deploy]
sso_account_id = xxxxxxxxxxxx
sso_role_name = throwtrash-deploy
region = ap-northeast-1
output = json
sso_start_url = https://xxxxxxxxx.awsapps.com/start
sso_region = us-east-1

この辺の投稿を見ると解消されたようなのだが、良くわかっていない。

https://zenn.dev/setuu/articles/72ec5574ec037a

https://github.com/hashicorp/terraform-provider-aws/issues/28263