

# Amazon EC2：要求进行 MFA (GetSessionToken) 以执行特定的 EC2 操作
<a name="reference_policies_examples_ec2_require-mfa"></a>

此示例说明如何创建基于身份的策略以允许完全访问 Amazon EC2 中的 AWS API 操作。不过，如果未使用[多重身份验证 (MFA) ](id_credentials_mfa.md)验证用户身份，则它显式拒绝访问 `StopInstances` 和 `TerminateInstances` API 操作。要以编程方式执行该操作，用户必须在调用 `GetSessionToken` 操作时包含可选的 `SerialNumber` 和 `TokenCode` 值。该操作返回已使用 MFA 验证的临时凭证。要了解 GetSessionToken 的更多信息，请参阅[为不受信任的环境中的用户请求凭证](id_credentials_temp_request.md#api_getsessiontoken)。

此策略有何作用？
+ `AllowAllActionsForEC2` 语句允许所有 Amazon EC2 操作。
+ 在缺少 MFA 上下文时，`DenyStopAndTerminateWhenMFAIsNotPresent` 语句拒绝 `StopInstances` 和 `TerminateInstances` 操作。这意味着，在缺少多重身份验证上下文（表示不使用 MFA）时，将拒绝这些操作。拒绝将覆盖允许。

**注意**  
`Deny` 语句中的 `MultiFactorAuthPresent` 的条件检查不应为 `{"Bool":{"aws:MultiFactorAuthPresent":false}}`，因为在未使用 MFA 时，该键不存在并且无法进行评估。因此，在检查值之前，请使用 `BoolIfExists` 检查以确定该键是否存在。有关更多信息，请参阅 [...IfExists 条件运算符](reference_policies_elements_condition_operators.md#Conditions_IfExists)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAllActionsForEC2",
            "Effect": "Allow",
            "Action": "ec2:*",
            "Resource": "*"
        },
        {
            "Sid": "DenyStopAndTerminateWhenMFAIsNotPresent",
            "Effect": "Deny",
            "Action": [
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {"aws:MultiFactorAuthPresent": false}
            }
        }
    ]
}
```

------