我该如何使用权限边界限制 IAM 用户和角色的范围,以及防止权限升级?

上次更新时间:2020 年 9 月 11 日

我该如何创建权限边界策略,以限制 AWS Identity and Access Management (IAM) 管理员访问权限并防止权限升级?

解决方法

使用以下 IAM 策略示例来提供这些限制:

  • 任何由 IAM 管理员创建的 IAM 委托人都具有对 AWS 资源进行访问的完整权限。完整的 AWS 资源访问权限取决于基于身份的策略,因为权限边界本身不会提供权限。
  • 该策略会限制 IAM 委托人访问与 AWS Billing and Cost Management 相关的服务。
  • IAM 委托人无法更改权限边界,从而使自己具有访问受限制服务的权限。
  • IAM 管理员无法创建比他们拥有更高权限的 IAM 委托人。
  • 由 IAM 管理员创建的 IAM 委托人无法创建比 IAM 管理员拥有更高权限的 IAM 委托人。

将此策略另存为托管策略,并且命名为 ScopePermissions。使用您的账户 ID 替换 YourAccount_ID

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAdminAccess",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        },
        {
            "Sid": "DenyAccessToCostAndBilling",
            "Effect": "Deny",
            "Action": [
                "account:*",
                "aws-portal:*",
                "savingsplans:*",
                "cur:*",
                "ce:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenyPermBoundaryIAMPolicyAlteration",
            "Effect": "Deny",
            "Action": [
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:CreatePolicyVersion",
                "iam:SetDefaultPolicyVersion"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
            ]
        },
        {
            "Sid": "DenyRemovalOfPermBoundaryFromAnyUserOrRole",
            "Effect": "Deny",
            "Action": [
                "iam:DeleteUserPermissionsBoundary",
                "iam:DeleteRolePermissionsBoundary"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:user/*",
                "arn:aws:iam::YourAccount_ID:role/*"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
                }
            }
        },
        {
            "Sid": "DenyAccessIfRequiredPermBoundaryIsNotBeingApplied",
            "Effect": "Deny",
            "Action": [
                "iam:PutUserPermissionsBoundary",
                "iam:PutRolePermissionsBoundary"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:user/*",
                "arn:aws:iam::YourAccount_ID:role/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
                }
            }
        },
        {
            "Sid": "DenyUserAndRoleCreationWithOutPermBoundary",
            "Effect": "Deny",
            "Action": [
                "iam:CreateUser",
                "iam:CreateRole"
            ],
            "Resource": [
                "arn:aws:iam::YourAccount_ID:user/*",
                "arn:aws:iam::YourAccount_ID:role/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::YourAccount_ID:policy/ScopePermissions"
                }
            }
        }
    ]
}

要测试此策略:

1.    创建一个新的 IAM 用户,名为 Bob

2.    将 AdministratorAccess 策略直接附加到 Bob,并附加 ScopePermissions 作为权限边界。

3.    以 Bob 的身份登录 AWS 管理控制台。然后,尝试:

  • 访问 AWS Billing and Cost Management 服务 Cost Explorer
  • 删除 Bob 的权限边界。
  • 创建新的不具有权限边界的 IAM 用户和角色。
  • 创建一个名为 Alice 并实施权限边界的 IAM 用户,然后将 AdministratorAccess 策略作为基于身份的策略附加到 Alice

4.    以 Alice 的身份登录 AWS 管理控制台,然后尝试:

权限边界将确保:

  • Bob 不会在不附加权限边界 ScopePermissions 的情况下创建新的用户。
  • Bob 创建的 IAM 用户和角色具有与 Bob 相同或更低的权限。
  • BobAlice 不能更改获取权限边界的 IAM 策略,例如,删除该策略的默认版本。
  • BobAlice 不能更改或删除所实施的其本身或其他用户的权限边界。
  • 权限边界拒绝对受限制的服务进行访问。
  • Alice 会展现出与 Bob 相同的权限,防止权限升级。如果 Alice 创建新的 IAM 用户,则该新用户不会拥有比 Bob 更高的权限。此权限边界确保不会创建没有权限边界的 IAM 委托人,从而防止权限升级。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?