资讯中心

如何在特定路径下强制创建角色 安全博客

2026-01-27 13:53:05

如何在特定路径中强制创建角色

文章重点

Key Takeaways

使用 IAM 路径来加强对敏感角色的控制,实现集中式治理与去中心化访问管理之间的平衡。透过设置资料夹来保护中央 IT 团队的角色,同时允许开发团队自助创建角色。实施预防和检测控制来保障 IAM 路径的安全性。

更新日期: 2024年5月20日:本文已添加用例示例。

本文探讨了如何使用 AWS 身份与访问管理 (IAM) 的路径功能来优化 AWS 管理。这种方法旨在实现集中 IT 部门与开发团队之间的平衡。集中 IT 团队负责管理关键基础设施和资源,由于其敏感性,因此需要保持严格的治理。然而,过于僵化的治理方式可能会妨碍业务的灵活性以及开发团队的生产力。本文提出了一种促进灵活性的策略,既支持集中治理,又允许根据各团队的需求进行去中心化的访问管理。

IAM 路径功能在集中控制与开发团队的访问管理之间取得平衡。中央 IT 团队可以获得专门的路径例如,/iam/、/security/、/network/来管理各自领域中的身份和权限。您可以通过使用 服务控制策略 (SCP)、IAM 政策和 权限边界 来为这些路径实施严格的防护措施。同时,开发团队可以获得专门的路径例如,/devteam/、/product/以自助访问并自定义符合其工作流程的政策。

解决方案概况

在本文中,我们将探讨如何利用 IAM 路径来实现以下两个用例:

为集中团队的敏感角色提供安全保障:使用 IAM 路径创建和隔离供安全、合规及基础设施团队使用的特权角色。通过为敏感团队的角色定义 IAM 路径,您可以限制访问并为最关键的 AWS 资源提供细颗粒的权限,从而增强安全性。为开发者启用自助角色创建:通过为开发团队指定独立的路径以及 权限边界,赋予开发团队根据需要创建和管理自己 IAM 角色的能力。这条路径作为开发者独立配置角色的分隔,并且保持在安全边界之内。设置开发者权限边界有助于促进灵活性与责任感。

示例架构

如图1所示,IAM 路径展示了您如何使用角色路径来分隔集中 IT 团队和开发团队的角色。通过定义独立的角色路径,您可以在不同层级实施安全控制,以实现细颗粒的权限管理。举例来说,/iam/ 路径整合了需要严格管理的特权角色,如集中 IT 团队的 IAM 管理员,而 /D1/ 路径则为开发团队的开发者和测试者角色分配自订的访问权限。

如何在特定路径下强制创建角色 安全博客

这种方法还提供了几项其他优势,包括:

免费加速器下载安装减少 SCP 维护:通过基于 IAM 路径而非个别 IAM 角色的 SCP,集中 IT 团队可以减少对 SCP 的修改需求,节省时间和资源。可扩展性和审核:随著组织的增长,您可以通过为新团队分配专用的 IAM 路径来适应,帮助建立可扩展和易于管理的 IAM 架构。此外,使用 IAM 路径还便于审核,因为根据 IAM 路径提供了角色和权限的明确分隔。

为中央团队提供敏感角色的安全保障

我们将具体探讨如何在预定义的 IAM 路径中创建中央 IT 团队的角色,以及可以基于这些路径实施的一些预防性和检测性控制示例。

您可以使用 AWS CLI 的 createrole 命令创建一个名为 IAMAdmin 的 IAM 管理员角色,并通过 AWS CLI 的 putrolepolicy 命令附加策略文档。

也可以使用 AWS CloudFormation 模板 和 IAM API 创建具有路径的 IAM 角色。

AWS CLI 命令示例

bashaws iam createrole rolename IAMAdmin path /iam/ assumerolepolicydocument file//assumejson # 假设 assumejson 是信任策略 JSON 文档aws iam putrolepolicy rolename IAMAdmin policyname IAMAdminpolicy policydocument file//policyjson # 假设 policyjson 是 IAM 管理员的 IAM 策略

这些命令会为集中 IT 行政功能创建一个位于 /iam/ 路径下的 IAMAdmin 角色。

中央 IT 团队敏感路径的预防性控制

为确保新的 /iam/ 路径仅可由中央 IAM 团队访问,您可以设置 SCP。以下是您可以配置的 SCP 步骤。

以下 SCP 限制 IAM 行动在中央 IT 团队如 /iam/、/network/ 和 /security/ 路径中的执行:

json{ Version 20121017 Statement [ { Sid DenyIAMActionsforNonCentralteamRoles Effect Deny Action [ iamAttachRolePolicy iamCreateRole iamDeleteRole iamDeleteRolePermissionsBoundary iamDeleteRolePolicy iamDetachRolePolicy iamPutRolePermissionsBoundary iamPutRolePolicy iamUpdateRole iamUpdateAssumeRolePolicy iamUpdateRoleDescription iamTagRole iamUntagRole ] Resource [ arnawsiamrole/network/ arnawsiamrole/security/ arnawsiamrole/iam/ ] Condition { ArnNotLike { awsPrincipalArn [ arnawsiamrole/iam/ ] } } } ]}

此 SCP 透过一条语句即能对中央 IT 团队的高权限角色提供保护。强烈建议为敏感路径中的高权限角色保护 iamPassRole 和 stsAssumeRole。

此示例使用以下路径:

/network/ 集中 IT 团队的角色,用于管理整个组织的核心网络基础设施。/security/ 集中 IT 团队的角色,用于管理整个组织的核心安全操作。/iam/ 集中 IT 团队的角色,可进行 IAM 操作,如 CreateRole、AttachPolicy 或 DeleteRole,这些角色通常拥有 IAM 管理权限。

如果拥有 iamCreateRole 权限的开发团队在 /D1/ 路径尝试创建 IAM 角色于 /iam/ 路径,他们将因 SCP 的规定而收到 AccessDenied 错误。以下是错误片段的例子:

bashUser arnawssts123456789012assumedrole/D1/iamadmin is not authorized to perform iamCreateRole on resource arnawsiam123456789012role/iam/NewRole with an explicit deny in a service control policy

当中央 IT 团队的 IAM 管理员在 /iam/ 路径中添加新角色时,他们不需要更新 SCP 以保护新创建的 IAM 角色。因为 SCP 已应用于 /iam/ 路径,因此在该路径内创建的角色将自动受到 SCP 的保护。

以下 SCP 限制对集中 IT 团队拥有的敏感数据桶的访问,例如集中式 AWS CloudTrail 桶:

json{ Version 20121017 Statement [ { Sid RestrictAccessPolicy Effect Deny Action s3 Resource [ arnawss3sensitivedatabucket arnawss3sensitivedatabucket/ ] Condition { ArnNotLike { awsPrincipalArn [ arnawsiam123456789012role/security/ ] } } } ]}

如果开发团队拥有 S3 权限且位于 /D1/ 路径中尝试访问 sensitivedatabucket,他们将由于 SCP 的规定而收到 AccessDenied 错误。以下是错误片段的例子:

bashUser arnawssts123456789012assumedrole/D1/developer is not authorized to perform s3GetObject on resource arnawss3sensitivedatabucket/sensitivedatatxt with an explicit deny in a service control policy

中央 IT 团队的检测性控制

现在,我们将探讨可以在中央 IT 团队的敏感路径上启用的一些检测性控制。

以下 AWS CloudTrail Lake 查询可以用来监控 CreateRole API 行为:

sqlSELECT userIdentityarn as Username eventTime eventSource eventName sourceIPAddress errorCode errorMessageFROM lt事件资料存储 IDgtWHERE userIdentityarn IS NOT NULL AND eventName = CreateRole AND userIdentityarn LIKE /iam/ AND eventTime gt 20230701 140000 AND eventTime lt 20231108 180000

此查询列出 /iam/ 路径中的 CreateRole 事件。以下是一些输出示例:

bashUser arnawssts123456789012assumedrole/D1/iamadmin is not authorized to perform iamCreateRole on resource arnawsiam123456789012role/iam/IAMAdmTest with an explicit deny in a service control policy

若要接收有关敏感 IAM 路径例如 /iam/内活动的警报,您可以使用 Amazon EventBridge 规则作为检测性控制,当在 /iam/ 路径中创建 IAM 角色时使用 SNS 主题发送电子邮件通知。以下是示例规则:

json{ AWSTemplateFormatVersion 20100909 Description CloudFormation template for EventBridge rule EnterpriseRoleCreationNotification Resources { EventRule0 { Type AWSEventsRule Properties { EventBusName default EventPattern { source [awsiam] detailtype [AWS API Call via CloudTrail] detail { eventSource [iamamazonawscom] eventName [CreateRole] requestParameters { path [{wildcard /iam/}] } } } Name EnterpriseRoleCreationNotification State ENABLED Targets [ { Id xxxxxxxxxxxxxxxxxxxxxxxxx Arn ltSNS主题的 ARNgt } ] } } }}

使用 IAM 路径来管理集中 IT 团队的角色具有以下权衡:

优势重要考量通过在 IAM 路径中创建高权限角色,您可以在路径层级实施更全面的安全控制复杂的路径可能难以维护IAM 路径传达了角色的上下文目的角色路径是不可变的角色名称在不同 IAM 路径上不能相同,因此转向这一方法将要求创建不同名称的新角色

为开发团队安全授权 IAM 角色创建

为了使开发团队能够在他们自己的路径中创建角色,我们将探讨如何创建开发团队的角色。

以下是一个由 IAMAdmin 角色创建的开发团队 D1 的示例 IAM 策略,称为 D1IAMAdmin。D1IAMAdmin 角色可供开发团队 D1 自助满足其 IAM 需求。

D1IAMAdmin 角色的 IAM 策略示例

json{ Version 20121017 Statement [ { Condition { StringEquals { iamPermissionsBoundary [arnawsiam987456123000policy/permissionsboundaries/PermissionsboundaryA] } } Action [ iamCreateRole iamAttachRolePolicy iamDetachRolePolicy iamPutRolePolicy iamDeleteRolePolicy iamDeleteRole ] Resource arnawsiam987456123000role/D1/ Effect Allow } { Action [ iamCreatePolicy iamCreatePolicyVersion iamDeletePolicyVersion ] Resource arnawsiam987456123000policy/D1/ Effect Allow } { Action [ iamGetRole iamListRoles ] Resource Effect Allow } { Action [ iamCreateInstanceProfile iamAddRoleToInstanceProfile iamRemoveRoleFromInstanceProfile iamDeleteInstanceProfile ] Resource [ arnawsiam987456123000role/D1/ arnawsiam987456123000instanceprofile/D1/instanceprofiles/ ] Effect Allow } { Action iamPassRole Resource arnawsiam987456123000role/D1/ Effect Allow } ]}

这些权限允许 D1IAMAdmin 在 /D1/ IAM 路径中创建额外的 IAM 角色,同时强制在此过程中使用 权限边界。

当开发者尝试通过 D1IAMAdmin 在 /D1/ 以外的路径例如 /iam/ 路径创建角色时,他们会收到以下错误:

bashUser arnawssts987456123000assumedrole/D1/IAMAdmin is not authorized to perform iamCreateRole on resource arnawsiam987456123000role/iam/CreateRoleTest because no identitybased policy allows the iamCreateRole action (Service Iam Status Code 403 Request ID b81c39badae84d749202136b0c86a37b)

当开发者尝试在 /D1/ 路径中利用 D1IAMAdmin 创建角色时,则

在亚马逊 Bedrock 知识库中实现网页爬虫 机器学习博客
在亚马逊 Bedrock 知识库中实现网页爬虫 机器学习博客
2026-01-27
将有状态应用程序转换为无状态应用程序使用 AWS 服务 架构博客
将有状态应用程序转换为无状态应用程序使用 AWS 服务 架构博客
2026-01-27