

# 访问 IAM 资源所需的权限
<a name="access_permissions-required"></a>

*Resources*（资源）是服务中的对象。IAM 资源包括组、用户、角色和策略。如果您使用 AWS 账户根用户 凭证进行登录，则在管理 IAM 凭证或 IAM 资源方面没有任何限制。不过，必须显式为 IAM 用户授予权限以管理凭证或 IAM 资源。您可以将基于身份的策略附加到用户以执行此操作。

**注意**  
在整个 AWS 文档中，在提及 IAM policy 而未提到任何特定类别时，我们指的是基于身份的客户管理型策略。有关策略类别的详细信息，请参阅[AWS Identity and Access Management 中的策略和权限](access_policies.md)。

## 用于管理 IAM 身份的权限
<a name="access_permissions-required-identities"></a>

管理 IAM 组、用户、角色和凭证所需的权限通常与该任务的 API 操作相对应。例如，要创建 IAM 用户，您必须具有执行相应 API 命令的 `iam:CreateUser` 权限：[https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html)。要允许 IAM 用户创建其他 IAM 用户，您可以将类似下面的 IAM policy 附加到该用户：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "iam:CreateUser",
    "Resource": "*"
  }
}
```

------

在策略中，`Resource` 元素的值取决于操作以及操作能够影响的资源。在上述示例中，策略允许用户创建任何用户 (`*` 是与所有字符串匹配的通配符)。相反，仅允许用户更改自己的访问密钥的策略（API 操作 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html) 和 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html)）通常具有一个 `Resource` 元素。在此情况下，ARN 包含一个解析为当前用户名的变量 (`${aws:username}`)，如以下示例中所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListUsersForConsole",
            "Effect": "Allow",
            "Action": "iam:ListUsers",
            "Resource": "arn:aws:iam::*:*"
        },
        {
            "Sid": "ViewAndUpdateAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:UpdateAccessKey",
                "iam:CreateAccessKey",
                "iam:ListAccessKeys"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        }
    ]
}
```

------

在上述示例中，`${aws:username}` 是解析为当前用户的用户名的变量。有关策略变量的更多信息，请参阅 [IAM policy 元素：变量和标签](reference_policies_variables.md)。

一般来说，在操作名称中使用通配字符 (`*`) 可更轻松地为与特定任务相关的所有操作授予权限。例如，要允许用户执行任意 IAM 操作，您可以为操作使用 `iam:*`。要允许用户执行仅与访问密钥相关的操作，您可以在策略语句的 `iam:*AccessKey*` 元素中使用 `Action`。这可以授予用户执行 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html)、[https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html)、[https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html)、[https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html) 和 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html) 操作的权限。（如果未来在 IAM 中添加了名称包含“AccessKey”的操作，为 `Action` 元素使用 `iam:*AccessKey*` 还会授予用户执行该新操作的权限。） 以下示例演示允许用户执行与自己的访问密钥有关的所有操作（将 `account-id` 替换为您的 AWS 账户 ID）的策略：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "iam:*AccessKey*",
        "Resource": "arn:aws:iam::111122223333:user/${aws:username}"
    }
}
```

------

有些任务（例如删除组）涉及多个操作：必须先从组中删除用户，再分离或删除组的策略，然后才能真正删除组。如果您希望一个用户能够删除群组，必须确保授予该用户执行所有相关操作的权限。

## 在 AWS 管理控制台中工作的权限
<a name="Credentials-Permissions-overview-console"></a>

上述示例演示允许用户使用 [AWS CLI](https://aws.amazon.com/cli/) 或 [AWS 开发工具包](https://aws.amazon.com/tools/)执行操作的策略。

在用户使用控制台时，控制台向 IAM 发出请求以列出组、用户、角色和策略并获取与组、用户或角色关联的策略。控制台还会发出请求以获取 AWS 账户 信息以及有关主体的信息。主体是在控制台中发出请求的用户。

通常，要执行某个操作，您必须仅在策略中包含匹配的操作。要创建用户，您需要具有调用 `CreateUser` 操作的权限。通常，在使用控制台执行操作时，您必须具有相应的权限才能在控制台中显示、列出、获取或以其他方式查看资源。您必须具有该权限，以便能够在控制台中导航以执行指定的操作。例如，如果用户 Jorge 要使用控制台更改自己的访问密钥，他可以访问 IAM 控制台并选择 **Users**（用户）。这种操作会导致控制台发出 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) 请求。如果 Jorge 没有执行 `iam:ListUsers` 操作的权限，在控制台尝试列出用户时，将会被拒绝访问。因此，Jorge 无法获取自己的名称和访问密钥，即使他具有执行 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html) 和 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html) 操作的权限。

如果要为用户授予权限以使用 AWS 管理控制台管理组、用户、角色、策略和凭证，您需要包含控制台执行的操作的权限。有关可用于向用户授予这些权限的部分策略示例，请参阅[管理 IAM 资源的策略示例](id_credentials_delegate-permissions_examples.md)。

## 向 AWS 帐户授予权限
<a name="UserPermissionsAcrossAccounts"></a>

您可以直接向自己账户中的 IAM 用户授予对您的资源的访问权限。如果其他账户中的用户需要访问您的资源，您可以创建 IAM 角色，该角色是一个实体，其包含权限，但不与特定用户相关联。随后，其他账户中的用户可以使用角色，并根据您分配给角色的权限来访问资源。有关更多信息，请参阅 [在您拥有的其他 AWS 账户 中 IAM 用户的访问权限](id_roles_common-scenarios_aws-accounts.md)。

**注意**  
有些服务支持基于资源的策略，如 [基于身份的策略和基于资源的策略](access_policies_identity-vs-resource.md) 中所述（例如 Amazon S3、Amazon SNS 和 Amazon SQS）。对于这些服务，使用角色的替代方法是将策略附加到要共享的资源（存储桶、主题或队列）。基于资源的策略可以指定具有访问资源权限的 AWS 账户。

## 某种服务访问其他服务的权限
<a name="UserPermissionsAcrossAWS_ARCHIVE"></a>

许多 AWS 服务都要访问其他 AWS 服务。例如，几个 AWS 服务（包括 Amazon EMR、Elastic Load Balancing 和 Amazon EC2 Auto Scaling）负责管理 Amazon EC2 实例。其他 AWS 服务利用 Amazon S3 存储桶、Amazon SNS 主题、Amazon SQS 队列等。

在这些情况下管理许可的方案根据服务的不同而各异。下面是一些如何针对不同服务处理许可的示例：
+ 在 Amazon EC2 Auto Scaling 中，用户必须拥有使用 Auto Scaling 的权限，但无需明确获得管理 Amazon EC2 实例的权限。
+ 在 AWS Data Pipeline 中，IAM 角色决定了管道可以执行哪些操作；用户需要权限来担任角色。（有关详细信息，请参阅 *AWS Data Pipeline 开发人员指南*中的[使用 IAM 向管道授予权限](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)。） 

有关如何正确配置权限以便 AWS 服务能够完成您打算执行的任务的详细信息，请参阅您调用服务的文档。要了解如何为服务创建角色，请参阅[创建向 AWS 服务委派权限的角色](id_roles_create_for-service.md)。

**使用 IAM 角色配置服务以代表您工作**  
当要配置 AWS 服务代表您工作时，您通常要为 IAM 角色提供 ARN，用于定义允许该服务执行哪些操作。AWS 会检查并确保您有权将角色传递给该服务。有关更多信息，请参阅 [向用户授予权限以将角色传递给 AWS 服务](id_roles_use_passrole.md)。

## 所需的操作
<a name="access_permissions-required-dependent-actions"></a>

操作是可以对资源执行的操作，例如，查看、创建、编辑和删除该资源。操作是由每个 AWS 服务定义的。

要允许某个人执行操作，您必须在应用于进行调用的身份或受影响的资源的策略中包含所需的操作。通常，要提供执行某个操作所需的权限，您必须在策略中包括该操作。例如，要创建用户，您需要在策略中添加 CreateUser 操作。

在某些情况下，操作可能要求在策略中包含其他相关操作。例如，要为某个人提供在 AWS Directory Service 中使用 `ds:CreateDirectory` 操作创建目录的权限，您必须在策略中包含以下操作：
+ `ds:CreateDirectory`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeVpcs`
+ `ec2:CreateSecurityGroup`
+ `ec2:CreateNetworkInterface`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:AuthorizeSecurityGroupIngress`
+ `ec2:AuthorizeSecurityGroupEgress`

在使用可视化编辑器创建或编辑策略时，将显示警告和提示以帮助您选择您的策略所需的所有操作。

有关在 AWS Directory Service 中创建目录所需的权限的更多信息，请参阅[示例 2：允许用户创建目录](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/IAM_Auth_Access_IdentityBased.html#IAMPolicyExamples_DS_create_directory)。