説明
重要なロールの引き受けを MFA なしで許可すると、漏えいした IAM ユーザーの認証情報が、より強い権限へのアクセスに悪用されるおそれがあります。ユーザーポリシーや対象ロールの信頼ポリシーを含む実際の認可で、MFA が必要か確認してください。
aws:MultiFactorAuthPresent は、すべての認証情報に存在するわけではありません。長期アクセスキー自体には MFA 状態がなく、対応する MFA 一時認証情報やロール引き受け手順が必要です。外部 IdP の MFA は、その認証基盤で別途適用してください。
想定される影響
- MFA が必要な操作が、漏えいした認証情報だけで許可されるおそれがあります。
- 他のポリシーの許可があると、一つの文の MFA 条件だけではアクセスを制限できない場合があります。
対処方法
- 人のロール引き受けに MFA が必要なら、権限と対象ロールの信頼を併せて制限してください。
AllowのBoolIfExistsはキーがなくても成立するため、MFA を確実に要求する条件にはしないでください。 - MFA がある要求とない要求をテストし、他の許可ポリシーも確認してください。自動化には適切なワークロードロールを使ってください。
例
既存の IAM ユーザーと実際の対象ロール ARN を用意してください。ユーザーの ID ベースポリシーには 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 なしのアクセスを許可していないか別途確認してください。