0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker環境でAWS SSOを使う:ホストの認証情報をコンテナに引き継ぐ方法

Posted at

Docker環境でAWS SSOを使う:ホストの認証情報をコンテナに引き継ぐ方法

ローカル開発中に FastAPI や Node.js アプリを Docker 上で動かしていると、
AWS SDK(boto3 など)から S3 にアクセスした際に次のようなエラーが出ることがあります。

botocore.exceptions.NoCredentialsError: Unable to locate credentials

これは、コンテナの中に AWS の認証情報が届いていないためです。
この記事では、ホストで aws sso login 済みの情報をコンテナでも共有して使う方法を紹介します。

🧩 背景:AWS CLI の認証情報の仕組み

AWS CLI / SDK は以下の順で認証情報を探します:

  1. 環境変数(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
  2. コンテナロール(ECS/EKS)
  3. ~/.aws/credentials
  4. ~/.aws/sso/cache/~/.aws/cli/cache/(SSOやSTSのトークン)

SSO でログインした場合、セッション情報はホスト上の ~/.aws/sso/cache/ に保存されるため、
このディレクトリを コンテナにマウント することで再利用できます。


🗂️ SSOログイン情報の格納場所

ディレクトリ 用途 永続性
~/.aws/credentials アクセスキー認証(静的) 永続
~/.aws/config プロファイル・SSO設定 永続
~/.aws/sso/cache/ aws sso login の一時トークン 一時(数時間)
~/.aws/cli/cache/ STS一時クレデンシャル 一時(数時間)

🐳 docker-compose.yml の設定例

services:
  app:
    build: .
    volumes:
      - ~/.aws:/root/.aws:ro   # ホストのAWS設定を読み取り専用でマウント
    environment:
      - AWS_PROFILE=default    # 使用するプロファイル名を指定
    command: uvicorn main:app --host 0.0.0.0 --port 8000

ポイント:

  • :ro は “read-only” の意味で、安全にマウントできます。
  • AWS_PROFILE~/.aws/config に定義されたプロファイル名と合わせてください。

✅ 動作確認

1. ホスト側でログイン

aws sso login
aws sts get-caller-identity

2. コンテナ内で同じ確認

docker exec -it app bash
aws sts get-caller-identity

→ 同じアカウント情報が表示されればOK!


⚠️ 注意点

  • SSOトークンの有効期限は数時間。期限切れ時は再ログインが必要です。
  • 読み取り専用(:ro)でマウントすることで、誤操作による上書きを防止。
  • CI/CDや本番環境ではこの方法は避け、IAMロール(ECS/EKSロールなど)を使用してください。

🧠 なぜこれで動くのか

AWS SDK は OS のホームディレクトリ(~/.aws/)を自動的に参照します。
Dockerコンテナ内では通常 /root/ がホームディレクトリなので、
~/.aws → /root/.aws とマウントしておけば、CLI も boto3 も自然に認識します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?