継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

terraform で AWS の SSO 認証ができない事象の対処法

タダです.

AWS で SSO 認証で取得したクレデンシャルを使って terraform を実行した時に下記のエラーがでました.このエラーに対処する方法について本記事にまとめます.

Error: error configuring S3 Backend: Error creating AWS session: profile "hoge" is configured to use SSO but is missing required configuration: sso_region, sso_start_url

エラーが発生した時の AWS CLI Config

冒頭のエラーが発生した時,AWS CLI の Config は下記のような状態でした.

[profile hoge]
sso_session = hoge-session
sso_account_id = 1234567891011
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json
[sso-session hoge-session]
sso_start_url = https://hoge.awsapps.com/start
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access

また,aws sso login を行い,一時認証情報を取得している状態でした.そして,terraform init を打ったら S3 バックエンドの設定エラーが出ました.sso_region, sso_start_url がないよというメッセージですが,設定は入れているのにな...最新の設定に追随できてないのかなという感想を持ちました.

❯ aws sts get-caller-identity                             
{
    "UserId": "xxx:hoge",
    "Account": "1234567891011",
    "Arn": "arn:aws:sts::1234567891011:assumed-role/AWSReservedSSO_AdministratorAccess_xxx/hoge"
}
❯ terraform init -upgrade

Initializing the backend...
Upgrading modules...
- continuous_apply_codebuild_role in ../module/iam
╷
│ Error: error configuring S3 Backend: Error creating AWS session: profile "hoge" is configured to use SSO but is missing required configuration: sso_region, sso_start_url
│ 
│ 
╵

どう対処するか

前置きが長かったのですが,どう対処するかについてです.暫定的には AWS CLI の Config をレガシーにすると回避できます.

[profile hoge]
sso_start_url = https://hoge.awsapps.com/start
sso_region = ap-northeast-1
sso_session = hoge-session
sso_account_id = 1234567891011
sso_role_name = AdministratorAccess
region = ap-northeast-1
output = json

sadayoshi-tada.hatenablog.com

できればレガシーは使わないようにしたいと思っていたら issue のコメントに 1.6.0 系にしたら回避できたというコメントを見つけました.そんな記事を書いている前日に 1.6.0 がリリースされました.なら使おうということで使ったらエラーがでなくなったので,これであれば SSO 認証エラーが出ずに済みそうです.

github.com

❯ tfenv use 1.6.0        
Switching default version to v1.6.0
Switching completed
❯ terraform init -upgrade

Initializing the backend...

Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Upgrading modules...
- continuous_apply_codebuild_role in ../module/iam

~中略~

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

関連情報

github.com

まとめ

AWS の自動更新によるトークンプロバイダーの設定で terraform を使おうとするとエラーが出てその対処を行った時の内容をまとめました.