You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何控制IAM角色在新策略中可定义的资源与操作?

如何创建受限AWS管理员角色(防权限绕过)

问题背景

我想做一个仅禁止访问少量特定资源的管理员角色,一开始的思路是给角色挂AWS托管的AdministratorAccess策略,再加个拒绝特定资源的内联策略:

ManagedPolicyArns:
  - arn:aws:iam::aws:policy/AdministratorAccess
Policies:
  - PolicyName: DenyAccess
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Deny
          Action:
            - '*'
          Resource:
            - arn:aws:s3:::example-bucket
            - ...

但这方案有漏洞:这个角色有完整IAM权限,用户可以新建一个全权限策略挂到Lambda角色上,通过Lambda就能绕过原角色的拒绝策略,访问受限资源。

我试过用权限边界解决,但配置后没效果,我的权限边界配置是这样的:

- PolicyName: BoundaryPolicy
  PolicyDocument:
    Version: '2012-10-17'
    Statement:
      - Effect: Allow
        Action: 'iam:*'
        Resource: !Sub arn:aws:iam::${AWS::AccountId}:role/*
        Condition:
          StringEquals:
            iam:PermissionsBoundary: !Sub arn:aws:iam::${AWS::AccountId}:policy/DenyPolicy

想问下有没有办法控制这个IAM角色在新建策略时能定义的资源和操作?

可行解决方案

要搞定这个问题,得从两个核心点入手:给管理员角色本身加权限边界限制最大权限,同时强制它创建的所有IAM实体都必须继承这个边界,绝不让绕过的机会。

1. 先做权限边界策略

这个策略是用来定义所有角色能拥有的最大权限——允许所有操作,但禁止访问你指定的资源,专门用作权限边界:

PolicyName: DenyRestrictedResourcesBoundary
PolicyDocument:
  Version: '2012-10-17'
  Statement:
    # 允许所有操作,作为权限边界的上限
    - Effect: Allow
      Action: '*'
      Resource: '*'
    # 拒绝访问特定资源
    - Effect: Deny
      Action: '*'
      Resource:
        - arn:aws:s3:::example-bucket
        - # 这里填其他需要受限的资源ARN

2. 创建管理员角色并绑定权限边界

给角色挂AdministratorAccess托管策略,同时把上面的权限边界绑定到这个角色上:

Resources:
  RestrictedAdminRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: RestrictedAdministrator
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              AWS: !Sub arn:aws:iam::${AWS::AccountId}:user/your-admin-user
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess
      # 绑定权限边界,限制该角色的最大权限
      PermissionsBoundary: !Sub arn:aws:iam::${AWS::AccountId}:policy/DenyRestrictedResourcesBoundary

3. 加内联策略强制所有新IAM实体用这个边界

给管理员角色加个内联策略,确保它创建的所有角色、用户、策略都必须指定上述权限边界,还得禁止删除边界的操作:

Policies:
  - PolicyName: EnforcePermissionsBoundary
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
        # 允许创建/修改IAM实体,但必须带指定的权限边界
        - Effect: Allow
          Action:
            - iam:CreateRole
            - iam:PutRolePermissionsBoundary
            - iam:AttachRolePolicy
            - iam:CreatePolicy
            - iam:AttachUserPolicy
            - iam:CreateUser
            - iam:PutUserPermissionsBoundary
          Resource: '*'
          Condition:
            StringEquals:
              iam:PermissionsBoundary: !Sub arn:aws:iam::${AWS::AccountId}:policy/DenyRestrictedResourcesBoundary
        # 禁止删除权限边界,防止用户解除限制
        - Effect: Deny
          Action:
            - iam:DeleteRolePermissionsBoundary
            - iam:DeleteUserPermissionsBoundary
          Resource: '*'

为什么之前的配置失效?

你之前的配置有两个关键漏洞:

  • 没给管理员角色本身绑定正确的权限边界,导致角色自身的权限不受限制
  • 只限制了角色相关的IAM操作,没覆盖用户、策略的创建,也没禁止删除边界的操作,用户很容易绕开限制

内容的提问来源于stack exchange,提问作者JanJetze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:25:16