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

IAM 实体的权限边界

AWS 对于 IAM 实体(用户或角色)支持权限边界。权限边界是一项高级功能,借助该功能,您可以使用托管策略来设置基于身份的策略可以授予 IAM 实体的最大权限。当您设置实体的权限边界时,该实体只能执行其基于身份的策略和其权限边界同时允许的操作。

有关策略类型的更多信息,请参阅策略类型

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

例如,假定应允许名为 ShirleyRodriguez 的 IAM 用户只管理 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 中的操作的权限策略。或者,您也可以更新权限边界,以允许她在 IAM 中创建用户。

评估具有边界的有效权限

IAM 实体(用户或角色)的权限边界设置实体可以具有的最大权限。这可以更改该用户或角色的有效权限。实体的有效权限是影响用户或角色的所有策略所授予的权限。在账户中,基于身份的策略、基于资源的策略、权限边界、组织 SCP 或会话策略可以影响实体的权限。有关不同类型的策略的更多信息,请参阅策略和权限

如果以下任一策略类型显式拒绝操作的访问权限,则请求会被拒绝。多个权限类型向实体授予的权限更复杂。有关 AWS 如何评估策略的更多信息,请参阅策略评估逻辑

基于身份的策略及边界 – 基于身份的策略是附加到用户、用户组或角色的内联或托管策略。基于身份的策略向实体授予权限,而权限边界限制这些权限。有效的权限是这两种策略类型都允许的一切权限。其中任一项策略中的显式拒绝将覆盖允许。


                评估基于身份的策略和权限边界

基于资源的策略 – 基于资源的策略控制指定的委托人可以访问策略附加到的资源。在账户中,权限边界不减少基于资源的策略所授予的权限。权限边界减少由基于身份的策略授予实体的权限,然后基于资源的策略向实体提供额外的权限。这组策略类型的有效权限是基于资源的策略允许的一切权限 由权限边界和基于身份的策略这两者所允许的一切权限。任一项策略中的显式拒绝将覆盖允许。


                评估基于资源的策略、权限边界和基于身份的策略

组织 SCP – SCP 应用于整个 AWS 账户。它们限制账户中的委托人所提出的每个请求的权限。如果 IAM 实体(用户或角色)提出的请求受 SCP、权限边界和基于身份的策略所影响,则仅当所有三个策略类型都允许时,才允许此请求。任一项策略中的显式拒绝将覆盖允许。


                评估 SCP、权限边界和基于身份的策略

会话策略 – 会话策略是当您以编程方式为角色或联合身份用户创建临时会话时作为参数传递的高级策略。会话的权限来自用于创建会话的 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:*" ], "Resource": "*" }, { "Sid": "AllowIAMConsoleForCredentials", "Effect": "Allow", "Action": [ "iam:ListUsers", "iam:GetAccountPasswordPolicy" ], "Resource": "*" }, { "Sid": "AllowManageOwnPasswordAndAccessKeys", "Effect": "Allow", "Action": [ "iam:*AccessKey*", "iam:ChangePassword", "iam:GetUser", "iam:*ServiceSpecificCredential*", "iam:*SigningCertificate*" ], "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 服务。这意味着,新用户在这些服务中的操作仅受附加到该用户的权限策略的限制。

  2. AllowIAMConsoleForCredentials 语句允许列出所有 IAM 用户的访问权限。要在 AWS 管理控制台中导航用户页面,此访问权限是必需的。它还允许查看账户的密码要求,这在更改自己的密码时是必需的。

  3. AllowManageOwnPasswordAndAccessKeys 语句允许用户仅管理其自己的控制台密码和编程访问密钥。这非常重要,因为如果 Zhang 或其他管理员授予新用户包含完全 IAM 访问权限的权限策略,则该用户就可以更改自己或其他用户的权限。此语句可防止这种情况的发生。

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

  5. 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 中更改自己的密码,但无法创建另一个用户或编辑他的策略。Nikhil 对 Amazon S3 中他拥有的所有存储桶都具有只读访问权限。但是,即使某人授予他对 logs 存储桶的所有权,他也无法查看它。有关存储桶所有权的详细信息,请参阅 Amazon Simple Storage Service 开发人员指南管理对您的 Amazon S3 资源的访问权限

如果有人将基于资源的策略添加到允许 Nikhil 来启动和停止实例的 i-1234567890abcdef0 实例,他仍无法管理该实例。其原因是,对 i-1234567890abcdef0 实例执行的任何操作均被他的权限边界显式拒绝。任何策略类型中的显式拒绝都会导致请求被拒绝。但是,如果附加到 Secrets Manager 密钥的基于资源的策略允许 Nikhil 执行 secretsmanager:GetSecretsValue 操作,则 Nikhil 可以检索和解密密钥。原因是,Secrets Manager 操作未被他的权限边界显式拒绝,且权限边界不限制基于资源的策略。