AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

访问 IAM 资源所需的权限

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

注意

在整个 AWS 文档中,在提及 IAM 策略而未提到任何特定类别时,我们指的是基于身份的客户托管策略。有关策略类别的详细信息,请参阅策略和权限

用于管理 IAM 身份的权限

管理 IAM 组、用户、角色和凭证所需的权限通常与该任务的 API 操作相对应。例如,要创建 IAM 用户,您必须具有执行相应 API 命令的 iam:CreateUser 权限:CreateUser。要允许 IAM 用户创建其他 IAM 用户,您可以将类似下面的 IAM 策略附加到该用户:

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

在策略中,Resource 元素的值取决于操作以及操作能够影响的资源。在上述示例中,策略允许用户创建任何用户 (* 是与所有字符串匹配的通配符)。相反,仅允许用户更改自己的访问密钥的策略 (API 操作 CreateAccessKeyUpdateAccessKey) 通常具有一个 Resource 元素。在这种情况下,ARN 包含一个解析为当前用户名的变量,如以下示例中所示 (将 ACCOUNT-ID-WITHOUT-HYPHENS 替换为您的 AWS 账户 ID):

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:CreateAccessKey", "iam:UpdateAccessKey" ], "Resource": "arn:aws-cn:iam::accountid:user/${aws:username}" } }

在上述示例中,${aws:username} 是解析为当前用户的用户名的变量。有关策略变量的更多信息,请参阅IAM 策略元素:变量

一般来说,在操作名称中使用通配字符 (*) 可更轻松地为与特定任务相关的所有操作授予权限。例如,要允许用户执行任意 IAM 操作,您可以为操作使用 iam:*。要允许用户执行仅与访问密钥相关的操作,您可以在策略语句的 Action 元素中使用 iam:*AccessKey*。这可以授予用户执行 CreateAccessKeyDeleteAccessKeyGetAccessKeyLastUsedListAccessKeysUpdateAccessKey 操作的权限。(如果未来在 IAM 中添加了名称包含“AccessKey”的操作,为 Action 元素使用 iam:*AccessKey* 还会授予用户执行该新操作的权限。)以下示例演示允许用户执行与自己的访问密钥有关的所有操作 (将 ACCOUNT-ID-WITHOUT-HYPHENS 替换为您的 AWS 账户) 的策略:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws-cn:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/${aws:username}" } }

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

在 AWS 管理控制台中工作的权限

上述示例演示允许用户使用 AWS CLIAWS 软件开发工具包执行操作的策略。

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

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

例如,如果用户 Bob 希望使用控制台更改其访问密钥,则可访问 IAM 控制台并选择 Users。这种操作会导致控制台发出 ListUsers 请求。如果 Bob 没有执行 iam:ListUsers 操作的权限,则在控制台尝试列出用户时会被拒绝访问。因此,Bob 无法获得自己的名称和访问密钥,即使他拥有执行 CreateAccessKeyUpdateAccessKey 操作的权限。

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

授予跨 AWS 账户权限

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

注意

对于基于身份的策略和基于资源的策略中介绍的支持基于资源的策略的服务(如 Amazon S3、Amazon SNS 和 Amazon SQS),使用角色的一种替代方法是将策略附加到您要共享的资源(存储桶、主题或队列)。基于资源的策略可以指定有权访问资源的 AWS 账户。

一个服务访问其他服务的权限

许多 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 向管道授予权限。)

有关如何正确配置权限以便 AWS 服务能够完成您打算执行的任务的详细信息,请参阅您调用服务的文档。要了解如何为服务创建角色,请参阅创建向 AWS 服务委托权限的角色

使用IAM角色配置服务以代表您工作

当要配置AWS服务代表您工作时,您通常要提供 IAM 角色的 ARN,其将定义哪些服务允许执行。AWS 检查并确保您拥有传递角色至服务的许可。有关更多信息,请参阅 向用户授予许可以将角色传递给 AWS 服务

所需的操作

操作是可以对资源执行的操作,例如,查看、创建、编辑和删除该资源。操作是由每个 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:允许用户创建目录