亚马逊AWS官方博客

使用 AWS Organizations 集中管理客户的根访问权限



AWS Identity and Access Management(IAM)正在推出一项新功能,使安全团队能够集中管理 AWS Organizations 内成员账户的根访问权限。现在,您可以轻松管理根用户凭证并执行高权限操作。

大规模管理根用户凭证
长期以来,Amazon Web Services(AWS)账户一直预置了高权限的根用户凭证,这些凭证可以无限制地访问账户。这种根访问权限虽然功能强大,但也带来了重大的安全风险。必须通过添加多层保护 [如多重身份验证(MFA)]来确保每个 AWS 账户的根用户安全。安全团队需要手动管理和保护这些根凭证。该过程包括定期轮换凭证、安全存储凭证,以及确保凭证符合安全策略。

随着客户不断扩展其 AWS 环境,这种手动方法变得繁琐且容易出错。例如,运营数百或数千个成员账户的大型企业在确保所有账户根访问权限的一致性方面面临挑战。手动干预不仅增加了运营负担,还导致了账户预置延迟,因此会阻碍全面自动化并增加安全风险。如果根访问权限没有得到妥善保护,可能会导致账户被盗用以及对敏感资源未经授权的访问。

此外,每当需要执行特定的根操作 [例如解锁 Amazon Simple Storage Service(Amazon S3)存储桶策略Amazon Simple Queue Service(Amazon SQS)资源策略] 时,安全团队都必须检索和使用根凭证,这只会增加攻击面。即使有严格的监控和强大的安全策略,维护长期根凭证仍然可能带来管理不善、合规风险以及人为错误等潜在问题。

安全团队开始寻求更自动化、更可扩展的解决方案。他们需要一种方法,不仅能够集中管理根凭证,而且无需长期凭证即可通过编程方式管理根访问权限。

集中管理根访问权限
借助集中管理根访问权限的新功能,我们解决了跨多个账户管理根凭证这一长期挑战。这项新功能引入了两项基本功能:根凭证根会话的集中管理。这两项功能相结合,为安全团队提供了一种安全、可扩展且合规的方式来跨 AWS Organizations。

首先,我们来讨论一下根凭证的集中管理。借助此功能,您现在可以集中管理和保护 AWS Organizations 中所有账户的特权根凭证。通过根凭证管理,您可以:

  • 移除长期根凭证 — 安全团队现在可以通过编程方式从成员账户中移除根用户凭证,确保不会留下任何可能被滥用的长期特权凭证。
  • 防止凭证恢复 — 它不仅可以移除凭证,还可以防止其恢复,从而防止将来出现任何意外或未经授权的根访问。
  • 配置默认安全账户 — 由于您现在可以从一开始就创建没有根凭证的成员账户,因此无需在账户预置后再应用 MFA 等其他安全措施。默认情况下,账户是安全的,这大大降低了与长期根访问权限相关的安全风险,并有助于简化整个预置过程。
  • 帮助保持合规性 – 安全团队可以通过根凭证管理集中发现和监控所有成员账户的根凭证状态,从而证明合规性。这种自动可见性可确认不存在长期根凭证,因此能够更轻松地满足安全策略和监管要求。

但是,我们怎样才能确保仍然可以对账户执行选定的根操作呢? 这是我们今天发布的第二项功能:根会话。它为维护长期根访问权限提供了一种安全的替代方案。安全团队现在可以获得对成员账户的短期、任务范围的根访问权限,而不必在需要特权操作时手动访问根凭证。此功能确保无需长期根凭证即可安全地执行诸如解锁 S3 存储桶策略或 SQS 队列策略之类的操作。

根会话的主要优势包括:

  • 任务范围的根访问权限 — AWS 遵循最低权限的最佳实践,为特定操作提供短期根访问权限。这可以限制可执行操作的范围,并最大限度地缩短访问时间,从而降低潜在风险。
  • 集中管理 — 您现在可以从中央账户执行特权根操作,而无需单独登录每个成员账户。这可以简化流程并减轻安全团队的运营负担,使他们能够专注于更高级别的任务。
  • 与 AWS 最佳实践保持一致 — 通过使用短期凭证,组织可以与 AWS 安全最佳实践保持一致,这些最佳实践强调最低权限原则以及尽可能使用短期临时访问权限。

此新功能不授予完全根访问权限。它提供临时凭证来执行这五项特定操作之一。前三项操作可以通过集中管理根账户来实现。后两项操作在启用根会话时实现。

  • 审核根用户凭证 — 查看根用户信息的只读访问权限
  • 重新启用账户恢复 — 在没有根凭证的情况下重新激活账户恢复
  • 删除根用户凭证 — 移除控制台密码、访问密钥、签名证书和 MFA 设备
  • 解锁 S3 存储桶策略 — 编辑或删除拒绝所有主体的 S3 存储桶策略
  • 解锁 SQS 队列策略 — 编辑或删除拒绝所有主体的 Amazon SQS 资源策略

如何获取成员账户的根凭证
在本演示中,我将向您展示如何准备管理账户、在没有根凭证的情况下创建成员账户,以及如何获取临时根凭证,以便对成员账户进行五个授权的 API 调用之一。假设您已经创建了一个组织。

首先,我要创建一个成员账户。

aws organizations create-account    \
     --email stormacq+rootaccountdemo@amazon.com \
     --account-name 'Root Accounts Demo account'
{
    "CreateAccountStatus": {
        "Id": "car-695abd4ee1ca4b85a34e5dcdcd1b944f",
        "AccountName": "Root Accounts Demo account",
        "State": "IN_PROGRESS",
        "RequestedTimestamp": "2024-09-04T20:04:09.960000+00:00"
    }
}

然后,在我的管理账户上启用这两项新功能。别担心,除了启用新功能外,这些命令不会以任何方式改变账户的行为。

➜  aws organizations enable-aws-service-access \
        --service-principal iam.amazonaws.com

➜  aws iam enable-organizations-root-credentials-management
{
    "OrganizationId": "o-rlrup7z3ao",
    "EnabledFeatures": [
        "RootCredentialsManagement"
    ]
}

➜  aws iam enable-organizations-root-sessions
{
    "OrganizationId": "o-rlrup7z3ao",
    "EnabledFeatures": [
        "RootSessions",
        "RootCredentialsManagement"
    ]
}

或者,我也可以在管理账户上使用控制台。在访问权限管理下,选择账户设置

根访问权限管理

现在,我已经准备好请求获取临时根凭证了。我必须传递五个 IAM 托管策略中的一个,以便将凭证范围缩小到特定的操作。

➜  aws sts assume-root \
       --target-principal <my member account id> \
       --task-policy-arn arn=arn:aws:iam::aws:policy/root-task/S3UnlockBucketPolicy 

{
    "Credentials": {
        "AccessKeyId": "AS....XIG",
        "SecretAccessKey": "ao...QxG",
        "SessionToken": "IQ...SS",
        "Expiration": "2024-09-23T17:44:50+00:00"
    }
}

获得访问密钥 ID、秘密访问密钥和会话令牌后,我照常将它们与 AWS 命令行界面(AWS CLI)AWS SDK 一起使用。

例如,我可以将这三个值作为环境变量传递。

$ export AWS_ACCESS_KEY_ID=ASIA356SJWJITG32xxx
$ export AWS_SECRET_ACCESS_KEY=JFZzOAWWLocoq2of5Exxx
$ export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEMb//////////wEaCXVxxxx

现在,我收到了临时凭证,可以在成员账户上以根用户身份进行受限 API 调用。首先,我确认我现在有根凭证。Arn 字段确认我正在使用根账户。


# Call get Caller Identity and observe I'm root in the member account
$ aws sts get-caller-identity
{
   "UserId": "012345678901",
   "Account": "012345678901",
   "Arn": "arn:aws:iam::012345678901:root"
}

然后,我使用 S3 中的 delete-bucket-policy 来移除已应用于存储桶的错误策略。该无效策略移除了所有人的所有存储桶访问权限。移除此类策略需要根凭证。

aws s3api delete-bucket-policy --bucket my_bucket_with_incorrect_policy

如果没有输出,则表示操作成功。我现在可以对此存储桶应用正确的访问策略。

凭证仅在 15 分钟内有效。我编写了一个简短的 shell 脚本来自动执行获取 JSON 格式的凭证、导出正确的环境变量以及发出我想要以根用户身份运行的命令的过程。

可用性
除了没有根账户的 AWS GovCloud(美国)和 AWS 中国区域外,所有 AWS 区域均可免费集中管理根访问权限。根会话随处可用。

您可以通过 IAM 控制台、AWS CLI 或 AWS SDK 开始使用它。有关更多信息,请访问我们文档中的 AWS 账户根用户,并遵循保护 AWS 账户的最佳实践。

— seb


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。