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

IAM 身份的权限边界

AWS 支持基于身份的策略、基于资源的策略、访问控制列表 (ACL) 和 AWS Organizations 服务控制策略 (SCP)。这些策略类型可分类为权限策略权限边界。权限策略定义所附加到的对象的权限。这些包括基于身份的策略(最常见)、基于资源的策略和 ACL。权限边界是一项高级功能,在其中,您限制委托人可以具有的最大权限。这些边界可应用于 AWS Organizations 组织或者 IAM 用户或角色。有关这些策略类型的更多信息,请参阅策略类型

您可以使用 AWS 托管策略或客户托管策略为用户或角色设置边界。该策略限制用户或角色的最大权限。

例如,假定应允许名为 ShirleyRodriguez 的用户只管理 Amazon S3、Amazon CloudWatch 和 Amazon EC2。要执行此规则,您可以使用以下策略为 ShirleyRodriguez 用户设置权限边界:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "cloudwatch:*", "ec2:*" ], "Resource": "*" } ] }

当使用策略为用户设置权限边界时,它会限制用户的权限,但自己不提供权限。在此示例中,ShirleyRodriguez 用户边界允许她在 Amazon S3、CloudWatch 和 Amazon EC2 中执行所有操作。但是,Shirley 无法在任何其他服务(包括 IAM)中执行操作,即使她有一个允许这样做的权限策略也是如此。例如,您可以将以下策略添加给 ShirleyRodriguez 用户:

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

此策略允许委托人在 IAM 中创建用户。如果您将此策略附加到 ShirleyRodriguez 用户,然后 Shirley 尝试创建用户,该操作会失败。失败的原因是策略评估逻辑会检查用作权限边界的策略,该策略不允许 iam:CreateUser 操作。要允许 Shirley 在 AWS 中执行操作,您必须添加包含 Amazon S3、Amazon CloudWatch 或 Amazon EC2 中的操作的权限策略。

评估具有边界的有效权限

用户或角色的权限边界限制实体可以具有的最大权限。这可以更改该用户或角色的有效权限。实体的有效权限是评估影响用户或角色的所有策略时授予的权限。有关如何评估策略的更多信息,请参阅策略评估逻辑

AWS 将基于策略类型和类别评估应用于请求上下文的策略。如果用户或角色具有权限边界,则仅允许权限边界和权限策略的交集操作。权限边界限制最大权限,但自己不授予访问权限。权限策略独自提供权限,但可以通过权限边界进行限制。


        effective_permissions_policy-types_Diagram

假定 people-admin 用户具有一个只允许 Amazon S3 操作的权限策略。还假定用于设置权限边界的策略只允许 IAM 操作。在这种情况下,这两个策略的有效权限隐式拒绝所有操作的访问。要提供访问 IAM 的预期有效权限,您必须将以下权限策略附加到用户。此策略允许所有 IAM 操作。

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

在评估此策略时,它允许除设置为权限边界的策略显式拒绝的操作之外的所有其他 IAM 操作。

使用权限边界将责任委派给其他人

您可以使用权限边界将权限管理任务(如用户创建)委派给您账户中的 IAM 用户。这允许其他人在特定权限边界内代表您执行任务。

例如,假定 María 是 X 公司 AWS 账户的管理员。她希望将用户创建责任委派给 Zhang。但是,她必须确保 Zhang 创建的用户符合以下公司规则:

  • 用户不能使用 IAM 来创建或管理用户、组、角色或策略。

  • 拒绝用户访问 Amazon S3 logs 存储桶,并且用户无法访问 i-1234567890abcdef0 Amazon EC2实例。

  • 用户无法删除自己的边界策略。

为执行这些规则,María 完成以下任务,下面包括其详细信息:

  1. María 创建 XCompanyBoundaries 托管策略以用作账户中的所有新用户的权限边界。

  2. María 创建 DelegatedUserBoundary 托管策略并将其指定为 Zhang 的权限边界。

  3. María 创建 DelegatedUserPermissions 托管策略并将其作为 Zhang 的权限策略进行附加。

  4. María 告诉 Zhang 他的新责任和限制。

任务 1:María 必须首先创建托管策略来为新用户定义边界。María 将允许 Zhang 向用户授予他们所需的权限策略,但她希望限制这些用户。为此,她创建以下名为 XCompanyBoundaries 的客户托管策略。此策略允许用户完全访问若干服务,限制 IAM 中的自助管理访问,并拒绝用户访问 Amazon S3 日志存储桶或 i-1234567890abcdef0 Amazon EC2 实例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ServiceBoundaries", "Effect": "Allow", "Action": [ "s3:*", "cloudwatch:*", "ec2:*", "dynamodb:*", "iam:ListUsers" ], "Resource": "*" }, { "Sid": "AllowIndividualUserToSeeAndManageOnlyTheirOwnAccountInformation", "Effect": "Allow", "Action": [ "iam:ChangePassword", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:DeleteAccessKey", "iam:DeleteLoginProfile", "iam:GetAccessKeyLastUsed", "iam:GetLoginProfile", "iam:GetUser", "iam:GetUserPolicy", "iam:ListAccessKeys", "iam:ListAttachedUserPolicies", "iam:ListGroupsForUser", "iam:ListUserPolicies", "iam:UpdateAccessKey", "iam:UpdateLoginProfile", "iam:DeactivateMFADevice", "iam:EnableMFADevice", "iam:ListMFADevices", "iam:ResyncMFADevice", "iam:ListSigningCertificates", "iam:DeleteSigningCertificate", "iam:UpdateSigningCertificate", "iam:UploadSigningCertificate", "iam:ListSSHPublicKeys", "iam:GetSSHPublicKey", "iam:DeleteSSHPublicKey", "iam:UpdateSSHPublicKey", "iam:UploadSSHPublicKey" ], "Resource": "arn:aws:iam::*:user/${aws:username}" }, { "Sid": "DenyS3Logs", "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::logs", "arn:aws:s3:::logs/*" ] }, { "Sid": "DenyEC2Production", "Effect": "Deny", "Action": "ec2:*", "Resource": "arn:aws:ec2:*:*:instance/i-1234567890abcdef0" } ] }

每个语句用于不同目的:

  1. 此策略的 ServiceBoundaries 语句允许完全访问指定的 AWS 服务。这意味着,新用户在这些服务中的操作仅受附加到该用户的权限策略的限制。它还提供了对列出所有 IAM 用户的访问权限,这是在 AWS 管理控制台 中浏览Users (用户) 页面所必需的。

  2. AllowIndividualUserToSeeAndManageOnlyTheirOwnAccountInformation 语句允许用户仅管理自己的凭证。这非常重要,因为如果 Zhang 或其他管理员授予新用户包含完全 IAM 访问权限的权限策略,则该用户就可以更改自己或其他用户的权限。此语句可防止这种情况的发生。

  3. DenyS3Logs 语句显式拒绝对 logs 存储桶的访问。

  4. DenyEC2Production 语句显式拒绝对 i-1234567890abcdef0 实例的访问。

任务 2:María 希望允许 Zhang 创建所有 X 公司用户,但仅具有 XCompanyBoundaries 权限边界。她创建以下名为 DelegatedUserBoundary 的客户托管策略。此策略定义 Zhang 可以具有的最大权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateOrChangeOnlyWithBoundary", "Effect": "Allow", "Action": [ "iam:CreateUser", "iam:DeleteUserPolicy", "iam:AttachUserPolicy", "iam:DetachUserPolicy", "iam:PutUserPermissionsBoundary" ], "Resource": "*", "Condition": {"StringEquals": {"iam:PermissionsBoundary": "arn:aws:iam::111122223333:policy/XCompanyBoundaries"}} }, { "Sid": "CloudWatchAndOtherIAMTasks", "Effect": "Allow", "Action": [ "cloudwatch:*", "iam:GetUser", "iam:ListUsers", "iam:DeleteUser", "iam:UpdateUser", "iam:CreateAccessKey", "iam:CreateLoginProfile", "iam:GetAccountPasswordPolicy", "iam:GetLoginProfile", "iam:*Group*", "iam:CreatePolicy", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetUserPolicy", "iam:GetRolePolicy", "iam:ListPolicies", "iam:ListPolicyVersions", "iam:ListEntitiesForPolicy", "iam:ListUserPolicies", "iam:ListAttachedUserPolicies", "iam:ListRolePolicies", "iam:ListAttachedRolePolicies", "iam:PutUserPolicy", "iam:SetDefaultPolicyVersion", "iam:SimulatePrincipalPolicy", "iam:SimulateCustomPolicy" ], "Resource": "*" }, { "Sid": "NoBoundaryPolicyEdit", "Effect": "Deny", "Action": [ "iam:CreatePolicyVersion", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:SetDefaultPolicyVersion" ], "Resource": [ "arn:aws:iam::123456789012:policy/XCompanyBoundaries", "arn:aws:iam::123456789012:policy/DelegatedUserBoundary" ] }, { "Sid": "NoBoundaryUserDelete", "Effect": "Deny", "Action": "iam:DeleteUserPermissionsBoundary", "Resource": "*" } ] }

每个语句用于不同目的:

  1. CreateOrChangeOnlyWithBoundary 语句允许 Zhang 创建 IAM 用户,但仅限他使用 XCompanyBoundaries 策略设置权限边界时。此语句还允许他为现有用户设置权限边界,但仅使用该相同策略。最后,此语句允许 Zhang 管理设置了此权限边界的用户的权限策略。

  2. CloudWatchAndOtherIAMTasks 语句允许 Zhang 完成其他用户、组和策略管理任务。请注意,Zhang 没有权限从自己或任何其他用户删除权限边界。

  3. NoBoundaryPolicyEdit 语句拒绝 Zhang 访问以更新 XCompanyBoundaries 策略。不允许他更改用于为自己或其他用户设置权限边界的任何策略。

  4. NoBoundaryUserDelete 语句拒绝 Zhang 访问以便为他或其他用户删除权限边界。

María 然后将 DelegatedUserBoundary 策略指定为 Zhang 用户的权限边界

任务 3:由于权限边界限制最大权限,但自己不授予访问权限,Maria 必须为 Zhang 创建权限策略。她创建以下名为 DelegatedUserPermissions 的策略。此策略定义 Zhang 在定义的边界内可以执行的操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAM", "Effect": "Allow", "Action": "iam:*", "Resource": "*" }, { "Sid": "CloudWatchLimited", "Effect": "Allow", "Action": [ "cloudwatch:GetDashboard", "cloudwatch:GetMetricData", "cloudwatch:ListDashboards", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics" ], "Resource": "*" }, { "Sid": "S3BucketContents", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::ZhangBucket" } ] }

每个语句用于不同目的:

  1. 此策略的 IAM 语句允许 Zhang 完全访问 IAM。但是,由于他的权限边界只允许某些 IAM 操作,他的有效 IAM 权限仅受他的权限边界限制。

  2. CloudWatchLimited 语句允许 Zhang 在 CloudWatch 中执行五种操作。他的权限边界允许 CloudWatch 中的所有操作,因此他的有效 CloudWatch 权限仅受他的权限策略限制。

  3. S3BucketContents 语句允许 Zhang 列出 ZhangBucket Amazon S3 存储桶。但是,他的权限边界不允许任何 Amazon S3 操作,因此无论他的权限策略如何,他都无法执行任何 S3 操作。

María 然后将 DelegatedUserPermissions 策略作为 Zhang 用户的权限策略进行附加。

任务 4:她向 Zhang 提供创建新用户的说明。她告诉他,他可以创建具有所需任何权限的新用户,但他必须为他们分配 XCompanyBoundaries 策略作为权限边界。

Zhang 完成以下任务:

  1. Zhang 使用 AWS 管理控制台 创建用户。他为该用户键入用户名 Nikhil 并启用控制台访问。

  2. 设置权限页面上,Zhang 选择允许 Nikhil 执行其工作的 IAMFullAccessAmazonS3ReadOnlyAccess 权限策略。

  3. Zhang 跳过设置权限边界部分,忘记 María 的说明。

  4. Zhang 查看用户详细信息并选择创建用户

    操作失败,并且拒绝访问。Zhang 的 DelegatedUserBoundary 权限边界要求他创建的任何用户都将 XCompanyBoundaries 策略用作权限边界。

  5. Zhang 返回到上一页。在设置权限边界部分中,他选择了 XCompanyBoundaries 策略。

  6. Zhang 查看用户详细信息并选择创建用户

    将创建用户。

当 Nikhil 登录时,他有权访问 IAM 和 Amazon S3,但权限边界拒绝的操作除外。例如,他可以在 IAM 中更改自己的密码,但无法创建另一个用户或编辑他的策略。他可以查看和管理 Amazon S3 中他拥有的所有存储桶,但他无法访问 logs 存储桶。