

# 通过将内联策略附加到 IAM 用户，从而控制访问密钥的使用
<a name="access-keys_inline-policy"></a>

建议最好[让工作负载使用带有 IAM 角色的临时凭证](best-practices.md#bp-workloads-use-roles)来访问 AWS。应为拥有访问密钥的 IAM 用户分配最低访问权限，并启用[多重身份验证 (MFA)](id_credentials_mfa.md)。有关代入 IAM 角色的更多信息，请参阅[担任角色的方法](id_roles_manage-assume.md)。

但是，如果您正在为服务自动化或其他短期用例创建概念验证测试，并选择使用具有访问密钥的 IAM 用户来运行工作负载，建议[使用策略条件来进一步限制对其 IAM 用户凭证的访问权限](best-practices.md#use-policy-conditions)。

在此情况下，您可以创建有时限的策略，使凭证在指定时间后过期，或者如果您是从安全网络运行工作负载，可以使用 IP 限制策略。

对于这两个用例，可使用附加到拥有访问密钥的 IAM 用户的内联策略。

**为 IAM 用户配置有时限的策略**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**用户**，然后为短期用例选择用户。如果尚未创建用户，您可以立即[创建用户](getting-started-workloads.md)。

1. 在角色的**详细信息**页面上，选择**权限**选项卡。

1. 选择**添加权限**，然后选择**创建内联策略**。

1. 在**策略编辑器**部分，选择 **JSON** 显示 JSON 编辑器。

1. 在 JSON 编辑器中输入以下策略，将 `aws:CurrentTime` 时间戳的值替换为所需的到期日期和时间：

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

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Deny",
         "Action": "*",
         "Resource": "*",
         "Condition": {
         "DateGreaterThan": {
         "aws:CurrentTime": "2025-03-01T00:12:00Z"
           }
         }
       }
     ]
   }
   ```

------

   该策略使用 `Deny` 效果来限制在指定日期后对所有资源执行所有操作。`DateGreaterThan` 条件比较当前的时间与您设置的时间戳。

1. 选择**下一步**，进入**查看并创建**页面。在**策略**详细信息的**策略名称**下，输入策略的名称，然后选择**创建策略**。

创建策略后，策略将显示在用户的**权限**选项卡上。当前时间大于或等于该策略中指定的时间时，用户就无法再访问 AWS 资源。请务必让工作负载开发人员了解您为这些访问密钥指定的到期日期。

**为 IAM 用户配置 IP 限制策略**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**用户**，然后再选择将从安全网络运行工作负载的用户。如果尚未创建用户，您可以立即[创建用户](getting-started-workloads.md)。

1. 在角色的**详细信息**页面上，选择**权限**选项卡。

1. 选择**添加权限**，然后选择**创建内联策略**。

1. 在**策略编辑器**部分，选择 **JSON** 显示 JSON 编辑器。

1. 将以下 IAM 策略复制到 JSON 编辑器，并根据需要更改公有 IPv4 或 IPv6 地址或范围。可使用 [https://checkip.amazonaws.com](https://checkip.amazonaws.com/) 确定当前的公有 IP 地址。您可以使用斜杠标记指定单个 IP 地址或 IP 地址范围。有关更多信息，请参阅 [aws:SourceIp](reference_policies_condition-keys.md#condition-keys-sourceip)。
**注意**  
不得通过 VPN 或代理服务器对 IP 地址进行模糊处理。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid":"IpRestrictionIAMPolicyForIAMUser",
         "Effect": "Deny",
         "Action": "*",
         "Resource": "*",
         "Condition": {
           "NotIpAddress": {
             "aws:SourceIp": [
               "203.0.113.0/24",
               "2001:DB8:1234:5678::/64",
               "203.0.114.1"
             ]
           },
           "BoolIfExists": {
             "aws:ViaAWSService": "false"
           }
         }
       }
     ]
   }
   ```

------

   此策略示例拒绝使用应用该策略的 IAM 用户访问密钥，除非请求来自（以 CIDR 表示法指定的）网络“203.0.113.0/24”、“2001:DB8:1234:5678::/64”或特定 IP 地址“203.0.114.1” 

1. 选择**下一步**，进入**查看并创建**页面。在**策略**详细信息的**策略名称**下，输入策略的名称，然后选择**创建策略**。

创建策略后，策略将显示在用户的**权限**选项卡上。

您还可以将该策略作为服务控制策略 (SCP) 应用于 AWS Organizations 中的多个 AWS 账户，我们建议使用附加条件 `aws:PrincipalArn` 让该策略声明仅适用于受此 SCP 约束的 AWS 账户中的 IAM 用户。以下策略包括更新：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IpRestrictionServiceControlPolicyForIAMUsers",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "203.0.113.0/24",
            "2001:DB8:1234:5678::/64",
            "203.0.114.1"
          ]
        },
        "BoolIfExists": {
          "aws:ViaAWSService": "false"
        },
        "ArnLike": {
          "aws:PrincipalArn": "arn:aws:iam::*:user/*"
        }
      }
    }
  ]
}
```

------