説明
重要な 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 権限が自動的に保護されるわけではありません。