IAM ユーザーアクセスの MFA 要件の確認

人が行う重要な AWS 操作で、MFA が実際に要求されることを確認してください。

説明

重要な AWS 操作を人の認証情報だけで許可すると、パスワードやキー漏えい時の影響が大きくなります。必要なログインと API アクセスに MFA を適用し、実際の認証方式と有効なポリシー全体を確認してください。

MFA デバイスを登録するだけで、すべての API 呼び出しに MFA が強制されるわけではありません。長期アクセスキーには aws:MultiFactorAuthPresent がないため、対応する MFA 一時認証情報の手順を使ってください。フェデレーションでは外部 IdP の MFA ポリシーも確認してください。

想定される影響

  • 漏えいした認証情報で、データアクセスや重要なリソース変更が許可されるおそれがあります。
  • 条件を誤ると、MFA 情報がない要求を許可したり、必要な自動化を中断したりする場合があります。

対処方法

  • 人が行う重要な操作に MFA を要求し、その有無で許可・拒否をテストしてください。自動化は最小権限のワークロードロールに分けてください。
  • Allow の BoolIfExists を true にしても、キーがない要求は許可されます。MFA を実際に必須とする条件と、他のポリシーによる許可を併せて確認してください。

例

既存ユーザーと var.target_role_arn に指定する実際のロールを用意してください。例はロール引き受けの許可文であり、対象の信頼と他の権限は別途必要です。

変更前

hcl
resource "aws_iam_user_policy" "example" {
  name = "terraform-user"
  user = aws_iam_user.example.name

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": "${var.target_role_arn}",
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

変更後

hcl
resource "aws_iam_user_policy" "example" {
  name = "terraform-user"
  user = aws_iam_user.example.name

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": "${var.target_role_arn}",
      "Action": "sts:AssumeRole",
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    }
  ]
}
EOF
}

補足:

  • 変更前: この文は MFA なしでロールの引き受けを許可する場合があります。
  • 変更後: この許可文は MFA 値が true の場合だけに適用されます。すべてのログインや他の API 権限が自動的に保護されるわけではありません。

参考資料