AWS ロール引き受け時の MFA 保護の確認

利用者が機密性の高いロールを引き受ける際に MFA を要求し、実際のポリシーも確認してください。

説明

利用者が MFA なしで AWS ロールを引き受けられると、盗まれた認証情報だけでロールを利用されるリスクが高まります。実際の引き受けには、呼び出し元の権限やロールの信頼ポリシーなども満たす必要があります。

要求に MFA の値を渡すことと、MFA のない要求をポリシーで拒否することは別です。非対話型のワークロードでは、利用者の MFA コードを保存せず、実行環境のロールやフェデレーションによる一時認証情報を使用してください。

想定される影響

  • 盗まれた利用者の認証情報で、利用可能なロールの権限が悪用されるおそれがあります。
  • MFA の入力だけを追加しても、別の要求経路では MFA なしで引き受けられる場合があります。

対処方法

  • MFA が必要な AssumeRole 要求には、正しい mfa_serial_number と現在有効な mfa_token を渡してください。トークンや返された認証情報をログに出さないでください。
  • 利用者のアクセス経路に対応する信頼ポリシーで aws:MultiFactorAuthPresent 条件を適切に強制し、実際の許可・拒否を確認してください。ワークロードの認証方法は別途設計してください。

例

既存のモジュール名を使った抜粋です。インストール済みのコレクションが対応する名前を確認してください。現在のモジュールは amazon.aws.sts_assume_role です。実際のロール ARN と MFA デバイス一覧を用意し、実行時に有効な current_mfa_token を渡してください。

変更前

yaml
- name: 既存のロールを引き受ける
  community.aws.sts_assume_role:
    mfa_serial_number: "{{ mfa_devices.mfa_devices[0].serial_number }}"
    role_arn: "arn:aws:iam::123456789012:role/someRole"
    role_session_name: "someRoleSession"
  register: assumed_role

- name: ロールを引き受ける
  sts_assume_role:
    role_arn: "arn:aws:iam::123456789012:role/someRole"
    role_session_name: "someRoleSession"
  register: assumed_role

変更後

yaml
- name: 既存のロールを引き受ける
  community.aws.sts_assume_role:
    mfa_serial_number: "{{ mfa_devices.mfa_devices[0].serial_number }}"
    mfa_token: "{{ current_mfa_token }}"
    role_arn: "arn:aws:iam::123456789012:role/someRole"
    role_session_name: "someRoleSession"
  register: assumed_role
  no_log: true

補足:

  • 変更前: 最初のタスクはデバイス識別子だけを指定し、次のタスクには MFA の値がありません。実際の許可は IAM ポリシーによって決まります。
  • 変更後: デバイス識別子と現在のトークンを渡し、ログ出力を抑制します。ポリシーによる MFA の強制は別途確認する必要があります。

参考資料