はじめに
AWS CDK を使ってインフラをコードで管理している方で、cdk bootstrap
時に以下のような 認証エラー に遭遇したことはありませんか?
AuthenticationError: Need to perform AWS calls for account 875551125050, but no credentials have been configured
今回はこの問題にハマり、調査と試行錯誤を経て 最終的に環境変数の直接設定で解決した事例 を共有します。
問題の発生条件
以下のような環境下で問題が発生しました:
-
AWS SSO 認証を利用
- プロファイル名:
AdministratorAccess-875551125050
-
aws sso login
→ 成功、ブラウザでの認証もOK -
aws sts get-caller-identity
→ 問題なし
- プロファイル名:
-
AWS CLIでは正常動作
-
aws s3 ls
などの操作はすべて成功
-
-
CDK のバージョン:
2.1018.0
-
Node.js のバージョン:
v23.11.0
-
config 設定に軽微なミス
-
ap-northeeast-1
(タイポ)があったが、本件には直接関係なし
-
現象
CDK で cdk bootstrap
を実行すると、AWS CLI では認証できているにも関わらず、以下のようなエラーで失敗しました:
AuthenticationError: Need to perform AWS calls for account 875551125050, but no credentials have been configured
--profile
オプションを指定しても改善されず、SSO認証が CDK にうまく伝わっていない様子でした。
試したこととその結果
✅ aws sso login の再実行 → 問題なし
✅ aws sts get-caller-identity → 正常に認証されている
✅ ~/.aws/config の確認 → タイポ修正済みでも改善せず
✅ --profile
オプション付きで cdk bootstrap
実行 → エラー継続
✅ CDKのキャッシュ削除・再インストール → 効果なし
最終的な解決策
以下の手順で 一時認証情報を環境変数として直接指定 することで、cdk bootstrap
を正常に完了させることができました。
1. 認証情報のエクスポート
aws configure export-credentials \
--profile AdministratorAccess-875551125050 \
--format env > .aws-temp-env
2. 環境変数を読み込む
source .aws-temp-env
3. CDKブートストラップを再実行
cdk bootstrap aws://875551125050/ap-northeast-1
これで問題なくブートストラップが完了!
原因と考察
本件の主な原因は以下の通りです:
- AWS SSO の認証情報は正しく取得されていたが、CDKがそれを認識できなかった
- CDKが期待する認証情報(環境変数形式)と、SSOの一時認証との間にギャップがある
--profile
指定だけではCDK側の認証処理に十分ではなかった
今後の対策とベストプラクティス
今後同様の問題を回避するために、以下のいずれかの方法をおすすめします:
- SSOログイン後、
export-credentials
で環境変数を明示的に設定 - CDK側でSSOプロファイルを正しく認識できるよう、環境変数
AWS_SDK_LOAD_CONFIG=1
を試す(未検証)
まとめ(3行で)
- AWS CLIでは正常なのにCDKだけ認証エラー → SSOとの相性が原因かも
-
aws configure export-credentials
で一時認証情報を取得 →source
で読み込む -
cdk bootstrap
は環境変数での明示的な認証が最も安定!
参考になれば幸いです!
もし同じような状況で困っている方がいたら、ぜひ試してみてください。
Qiitaでの「いいね」やコメントもお待ちしております!