一般社団法人 全国個人事業主支援協会

COLUMN コラム

前回はAWS Vaultの基本的な使い方を紹介しましたが、今回は実践編として、MFA認証と複数アカウント間のロール切り替えについて解説します。
実際の運用では、一つのベースアカウントで認証して、開発・本番など複数のアカウントのロールにスイッチするケースが多いと思います。

■ 構成イメージ

今回想定する構成:

ベースアカウント(認証用アカウント)
├─ IAMユーザー(MFA有効)
↓ AssumeRole
開発アカウント
└─ 開発者ロール
本番アカウント
└─ 本番運用ロール

ベースアカウントのIAMユーザーで認証し、MFAトークンを使って他のアカウントのロールにスイッチします。

■ 前提条件

※MacOS上で動かしていきます

【AWSアカウント側の準備】
・ベースアカウントにIAMユーザーが作成されている
・IAMユーザーにMFAデバイスが設定されている
・各アカウント(開発・本番)にスイッチ先のIAMロールが作成されている
・ロールの信頼関係でベースアカウントからのAssumeRoleが許可されている

【必要な情報】
・ベースアカウントのAccess Key ID / Secret Access Key
・MFAデバイスのARN(例:arn:aws:iam::123456789012:mfa/username)
・スイッチ先ロールのARN(例:arn:aws:iam::987654321098:role/DeveloperRole)

■ AWS Vaultの設定

【1. ベースアカウントの認証情報を追加】

aws-vault add base

Access Key IDとSecret Access Keyを入力します。
この情報は暗号化されてキーチェーンに保存されます。

【2. ~/.aws/configファイルの設定】

今回紹介するのは、credential_processを使った安全な構成です。
この方法では、認証情報が完全にAWS Vault経由でのみ取得されるため、より安全に管理できます。

~/.aws/config ファイルを編集:

[profile base]
region = ap-northeast-1
mfa_serial = arn:aws:iam::123456789012:mfa/username
role_session_name = your-session-name

[profile dev-src]
include_profile = base
role_arn = arn:aws:iam::987654321098:role/DeveloperRole

[profile dev]
credential_process = aws-vault export –format=json –prompt=osascript dev-src
region = ap-northeast-1

[profile prod-src]
include_profile = base
role_arn = arn:aws:iam::111222333444:role/ProductionRole

[profile prod]
credential_process = aws-vault export –format=json –prompt=osascript prod-src
region = ap-northeast-1

【設定の説明】
profile base: ベースアカウントの基本設定
– mfa_serial: MFAデバイスのARN
– role_session_name: AssumeRole時のセッション名(CloudTrailのログに記録される)

profile dev-src: 開発アカウントへのスイッチ設定(中間プロファイル)
– include_profile: ベースプロファイルの設定を継承
– role_arn: スイッチ先のロールARN
– ※ mfa_serialは不要(baseから継承される)

profile dev: 実際に使用する開発環境プロファイル
– credential_process: AWS Vaultから認証情報を取得
– –prompt=osascript: macOSのネイティブダイアログでパスワード入力
– region: 使用するリージョン

profile prod-src / prod: 本番環境も同様の構成

【この構成の利点】
・認証情報が完全にAWS Vault経由でのみ取得される
・~/.aws/credentialsファイルは一切使用しない
・credential_processにより、AWS CLIが自動的にAWS Vaultから認証情報を取得
・セキュリティが大幅に向上
・baseからdevにsource_profileでAssumeRoleする設定だと一時認証トークンが平文でキャッシュファイルで保存されるため、保存防止のためこの構成にしている

■ 基本的な使い方

この構成では、aws-vault execコマンドは不要です。
通常のAWS CLIコマンドに –profile オプションを付けるだけで使えます。

【開発環境でコマンドを実行】
aws –profile dev s3 ls

初回実行時、macOSのダイアログでキーチェーンのパスワード入力とMFAトークンの入力を求められます。
認証後は、セッションがキャッシュされるため、一定時間内は再入力不要です。

【本番環境でコマンドを実行】
aws –profile prod s3 ls

同様に、本番環境のロールにスイッチしてコマンドを実行します。

■ MFAの自動化(応用編)

MFAトークンの入力を自動化したい場合、1Password CLIなどのツールと組み合わせることができます。

【1Password CLIのインストール】
brew install 1password-cli

【~/.aws/configにmfa_processを追加】
[profile base]
region = ap-northeast-1
mfa_serial = arn:aws:iam::123456789012:mfa/username
mfa_process = op read op://vault/item/totp –otp
role_session_name = your-session-name

※ op://vault/item/totp の部分は、1Passwordに保存しているMFAトークンのパスに置き換えてください

この設定により、MFAトークンの入力が完全に自動化され、よりシームレスに複数アカウントを切り替えられます。

■ まとめ

・credential_processを使うことで、認証情報が完全にAWS Vault経由でのみ取得される安全な構成を実現
・include_profileで設定を継承し、構成ファイルをシンプルに保てる
・通常のAWS CLIコマンドに –profile を付けるだけで使える
・1Password CLIと組み合わせることで、MFAトークンの入力も自動化可能
・開発環境と本番環境を明確に分離して管理できる

この構成により、セキュリティを保ちながら、複数のAWSアカウントを効率的に管理できます。
~/.aws/credentialsファイルに平文で認証情報を保存する必要がなくなり、よりセキュアな運用が可能になります。

今回はここまで。

The following two tabs change content below.

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア