🔥

AWS CLI のSSO設定が上書きされてCDKデプロイエラーが発生した話

に公開

先日、AWS CDKでのデプロイ作業中に突然認証エラーが発生し、しばらく原因がわからず困った経験をしました。結論から言うと、AWS CLIの設定コマンドの使い方を間違えて、既存のSSO設定を意図せず上書きしてしまったことが原因です。

同じような問題で悩む方もいるかと思うので、何が起きたのか、なぜ問題が発生したのか、そしてどう対処すべきだったのかを整理してみましょう。

問題の発生状況

普段私は shifter というプロファイル名で AWS SSO を使用してAWSリソースにアクセスしています。この設定は以下のコマンドで作成したものでした。

aws configure sso --profile shifter

この設定により、~/.aws/config ファイルには以下のような設定が作られていました。

[profile shifter]
sso_session = shifter
sso_account_id = 0123456789
sso_role_name = AdministratorAccess
region = us-west-2

これまで何の問題もなく動作していたのですが、ある日 CDK のデプロイを実行すると突然以下のようなエラーが発生しました。

Unable to determine the default AWS account: Please verify that you have configured a region for the shifter profile

何をしてしまったのか

エラーが発生する前を思い返してみると、別のアプリケーションのテストで一時的に静的なアクセスキーを使用する必要があり、以下のコマンドを実行していました。

aws configure --profile shifter

このとき、既存の shifter プロファイルがSSO設定であることを完全に忘れていました。上記のコマンドを実行すると、以下の項目の入力を求められます。

AWS Access Key ID [None]: ABCDEFGHIJK
AWS Secret Access Key [None]: XXXXXXXXX...
Default region name [None]: us-east-1
Default output format [None]: json

この操作により、~/.aws/credentials ファイルに静的な認証情報が追加され、同時に ~/.aws/config ファイルの設定も部分的に変更されてしまいました。

設定ファイルの競合状態

結果として、設定ファイルは以下のような競合状態になっていました。

~/.aws/config:

[profile shifter]
sso_session = shifter  # 元のSSO設定の残骸
region = us-east-1     # aws configureで上書きされた値

~/.aws/credentials:

[shifter]
aws_access_key_id = ABCDEFGHIJK
aws_secret_access_key =  XXXXXXXXX...

この状態では、AWS CLI がSSO設定と静的認証情報のどちらを使用すべきか判断できず、認証エラーが発生していたのです。

解決方法

問題の原因がわかれば解決は簡単でした。SSO設定を再作成するだけです。

# 既存の設定をクリーンアップ
aws configure --profile shifter
# 各項目でEnterを押して空にする

# SSO設定を再作成
aws configure sso --profile shifter

これにより、正しいSSO設定が復元され、CDK のデプロイも正常に動作するようになりました。

正しいやり方はこうだった

今回の問題は、テスト用の設定を既存のSSO設定と同じプロファイル名で作成してしまったことが原因でした。正しくは以下のようにすべきでした。

# テスト用に別のプロファイル名を使用
aws configure --profile shifter-test

こうすることで、既存のSSO設定に影響を与えることなく、テスト用の設定を作成できます。

aws configure コマンドの注意点

aws configure --profile <プロファイル名> コマンドは、指定したプロファイルが既に存在する場合、その設定を上書きします。これは以下の点で注意が必要です。

  • SSO設定で作成されたプロファイルでも容赦なく上書きされる
  • 部分的な上書きにより、設定の競合状態が発生することがある
  • 既存の設定タイプ(SSO vs 静的認証情報)を考慮しない

まとめ

今回の経験から学んだ教訓は「SSO設定済みのプロファイル名で aws configure を実行してはいけない」ということです。

特にテスト目的で一時的な設定を作成する場合は、必ず異なるプロファイル名を使用することが重要です。また、既存の設定を確認したい場合は以下のコマンドを使用しましょう。

# 設定内容を確認
aws configure list --profile shifter

# 個別の設定項目のみ変更したい場合
aws configure set region us-east-1 --profile shifter

AWS CLI の設定は一度作成すると普段意識することが少ないものですが、うっかりした操作で意図しない動作を引き起こすことがあります。皆さんも同様のトラブルに遭遇した際の参考にしていただければと思います。

デジタルキューブ

Discussion