Open4
AWS SSOでTerraformを使う
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
backendとしてのs3
terraform init
のオプションで-backend-config="profile=ssoプロファイル名
を付ければよい。
terraform init -backend-config="profile=throwtrash-deploy"
providerとしてのaws
環境変数AWS_PROFILE
にプロファイル名を指定したうえでterraform plan
などを実行する。
export AWS_PROFILE="throwtrash-deploy"
terraform plan
よくよく動作確認すると、前提条件で提示した~/.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
この辺の投稿を見ると解消されたようなのだが、良くわかっていない。