我该如何使用权限边界限制 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 管理控制台,然后尝试:
- 访问 AWS Billing and Cost Management 服务 Cost Explorer。
- 删除 Alice 的权限边界。
- 创建新的不具有权限边界的 IAM 用户和角色。
权限边界将确保:
- Bob 不会在不附加权限边界 ScopePermissions 的情况下创建新的用户。
- 由 Bob 创建的 IAM 用户和角色具有与 Bob 相同或更低的权限。
- Bob 和 Alice 不能更改获取权限边界的 IAM 策略,例如,删除该策略的默认版本。
- Bob 和 Alice 不能更改或删除所实施的其本身或其他用户的权限边界。
- 权限边界拒绝对受限制的服务进行访问。
- Alice 会展现出与 Bob 相同的权限,防止权限升级。如果 Alice 创建新的 IAM 用户,则该新用户不会拥有比 Bob 更高的权限。此权限边界确保不会创建没有权限边界的 IAM 委托人,从而防止权限升级。