IAM 사용자 정책의 MFA 요구 조건 점검

사람의 역할 전환에 필요한 MFA를 실제 자격 증명과 전체 정책에서 확인하세요.

설명

중요한 역할 전환을 MFA 없이 허용하면 유출된 IAM 사용자 자격 증명이 더 강한 권한에 접근하는 데 악용될 수 있습니다. 사용자 정책과 대상 역할의 신뢰 정책 등 실제 권한 평가에서 MFA가 요구되는지 확인하세요.

aws:MultiFactorAuthPresent는 모든 자격 증명에 존재하지 않습니다. 장기 액세스 키 자체에는 MFA 상태가 없으며, 지원되는 MFA 임시 자격 증명이나 역할 전환 절차를 사용해야 합니다. 외부 IdP의 MFA는 해당 인증 체계에서 별도로 적용하세요.

잠재적 영향

  • MFA가 필요한 작업이 유출된 자격 증명만으로 허용될 수 있습니다.
  • 다른 정책의 허용을 놓치면 한 문장에 넣은 MFA 조건만으로 접근을 제한하지 못할 수 있습니다.

해결 방법

  • 사람의 역할 전환에 MFA가 필요하면 해당 권한과 신뢰 정책을 함께 제한하세요. Allow의 BoolIfExists는 키가 없어도 통과하므로 MFA를 확실히 요구하는 조건으로 사용하지 마세요.
  • MFA가 있는 요청과 없는 요청을 각각 시험하고 다른 허용 정책도 검토하세요. 자동화에는 적절한 워크로드 역할을 사용하세요.

예시

기존 IAM 사용자와 실제 대상 역할 ARN을 준비하세요. 사용자 권한 정책에는 Principal을 넣지 않으며 대상 역할 신뢰 정책은 별도로 필요합니다.

변경 전

hcl
resource "aws_iam_user_policy" "example" {
  name = "test"
  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 = "test"
  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인 요청에만 적용됩니다. 다른 정책이 MFA 없는 접근을 허용하는지 별도로 점검하세요.

참조