terraform v1.5.4でAWS SSOの資格情報を使用している場合に資格情報が正しく使用されない問題

terraform v1.5.4でAWS SSOの資格情報を使用している場合に資格情報が正しく使用されない問題

aws ssoで取得した資格情報を使ってterraform planを実行したところError: error configuring S3 Backend: no valid credential sources for S3 Backend found.というエラーが出た. この問題はGitHub上でIssueとしてあがっており,すでにPull Requeslも出ていることから近いうちに解消されると思われる.ひとまず短期的にはIssueに記載されている~/.aws/configファイルを修正するワークアラウンドで対処することにした.

Tags: terrarofm
Takafumi Asano · 3 minute read

TR;DR

  • terraform v1.5.4でAWS SSOの資格情報を使おうとすると,terraformaが依存しているaws-sdk-goのバージョンが古いので,資格情報が正しく処理されない
  • terraformでのaws-skd-goのバージョンアップはすでにPull Requestが出ているので,待っていれば解決しそうである
  • ワークアラウンドとして~/.aws/configを修正する方法がある
    • ~/.aws/configを開き以下をコメントアウト
      • Keysso_session
      • Section [sso-session '<session-name>']

Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.

システムの構成をいくつか変更する必要があり,久しぶりにterraformを使おうと思ったのだが,ローカルにあったバイナリがv1.4系だったので,最新のv1.5.4に上げた.

ひとまず現状確認のために,terraform planを実行してみるとエラーが出た.

$ terraform plan
│ Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.
│ Please see https://www.terraform.io/docs/language/settings/backends/s3.html
for more information about providing credentials.
│ Error: SSOProviderInvalidToken: the SSO session has expired or is invalid

さて,今回terraformを実行したリポジトリでは,State管理にS3 Backendを使用している.そのため,最初にS3から最新のStateを取得するのだが,S3にアクセスできていないようだ.

terraform planの実行前に同一のプロファイルを使用しaws s3 lsを実行しており,こちらではterraform S3 Backendに使用しているBucketも見えている.つまり,有効な資格情報は取得できているはずだ.

検索してみると,今年の1月からIssueに上がっている問題のようだ.

Issueを読んでみると以下のようなことがわかる.

  • awsの仕様が変更されたことでaws-cliについてもバージョンによっては同じような問題が起きていたらしい
  • terraformが依存しているaws-sdk-goが古いため,新しいaws-cliで取得した資格情報が適切に処理できていない

修正のPRもすでに出ているので,そう遠くないうちに解決されることだろう.

ひとまずはここで説明されているワークアラウンドで対処することにした.