如何使用多个 AWS IAM 身份中心实例 安全博客
- 21
使用多个 AWS IAM 身份中心实例的指南
关键要点
AWS IA 身份中心现已支持两种实例类型:组织实例和帐户实例。组织实例用于管理整个组织的访问,而帐户实例主要用于特定的 AWS 帐户。了解何时使用每种实例,如何控制帐户实例的部署,以及如何有效地监控这些实例至关重要。近期,AWS 推出了一个新功能,允许部署 AWS IAM 身份中心 的帐户实例。此更新使您可以拥有两种类型的 IAM 身份中心实例: 组织实例 和 帐户实例。组织实例是在您的 AWS Organizations 管理帐户中启用的 IAM 身份中心实例,用于管理整个组织内的 AWS 帐户和应用访问。对于实施 IAM 身份中心,组织实例被认为是最佳实践。
不仅如此,许多客户期待一种使用 测试 或 沙箱 身份启用 AWS 应用程序的方法。新推出的帐户实例旨在支持 AWS 管理应用程序的沙箱部署,例如 Amazon CodeCatalyst,它们只能在创建时的帐户和 AWS 区域内使用。
在这篇博文中,我们将讨论何时使用每种实例类型,如何控制帐户实例的部署,以及如何利用增强的 IAM 身份中心 API,以规模化的方式监控、管理和审核这些实例。
IAM 身份中心实例类型
IAM 身份中心现在提供两种部署类型:传统的 组织实例 和 帐户实例。
IAM 身份中心的组织实例
组织实例 是功能完备的版本,适用于 AWS Organizations。此类型的实例帮助您安全地创建和连接您的劳动力身份,并在整个组织的 AWS 帐户和应用中集中管理其访问。这是适用于任何规模和类型的组织在 AWS 上进行劳动力认证和授权的推荐方法。

使用 IAM 身份中心的组织实例,您的身份中心管理员可以在身份中心目录中创建和管理用户身份,或连接现有身份源,包括 Microsoft Active Directory、Okta、Ping Identity、JumpCloud、Google Workspace 和 Azure Active DirectoryEntra ID。您可以使用多帐户权限管理对 AWS 帐户的访问,并支持跨多个帐户访问 AWS 管理应用。如果您需要基本身份提供者,您还可以管理对客户管理的 SAML 20 应用的访问。组织级别仅有一个 IAM 身份中心的组织实例,您可以使用该实例访问组织内的任何帐户。
IAM 身份中心的帐户实例
帐户实例 提供了组织实例的部分功能。具体来说,帐户实例最初仅支持对 Amazon CodeCatalyst 的用户和组分配。它们绑定到单个 AWS 帐户,您可以在组织的成员帐户或独立 AWS 帐户中部署它们。每个 AWS 帐户只能部署一个帐户实例,无论区域如何。
若要使用 IAM 身份中心的帐户实例,您可以提供对相同帐户和区域内支持的身份中心启用应用程序的访问。
帐户实例不支持权限集或对 客户管理 SAML 20 应用 的分配。如果您在默认启用的 AWS 区域内在2023年11月15日之前启用了身份中心,则必须从您的管理帐户启用帐户实例创建。若要了解更多,请参考 在 AWS 管理控制台中启用帐户实例。如果您尚未启用身份中心,或者是在2023年11月15日之后启用身份中心,则现在可以使用帐户实例。
成员帐户如果在一个选择加入optin区域内尚未部署 IAM 身份中心的实例,可以创建帐户实例。部署在选择加入区域的身份中心组织实例将防止创建帐户实例。有关区域的信息,请参见 AWS IAM 身份中心区域可用性。
IAM 身份中心实例的部署模式
以下是 IAM 身份中心实例的不同部署模式:
情况描述案例 1推荐组织实例可以支持多个 AWS 管理应用程序,并且在创建组织实例后,帐户实例创建被禁用。案例 2没有组织实例的 AWS Organizations 部署可以创建多个帐户实例,每个帐户一个,用于支持同一帐户中的 AWS 管理应用。案例 3独立帐户中的帐户实例可以支持同一帐户中的 AWS 管理应用。案例 4与组织实例的 AWS Organizations 部署可以邀请以前有帐户实例的独立帐户加入组织。案例 5与组织实例的 AWS Organizations 部署可以选择在成员帐户中拥有帐户实例。何时应使用 IAM 身份中心的帐户实例?
帐户实例适用于某些情况下,其中组织实例不可用或不切实际,包括:
您希望临时试用受支持的 AWS 管理应用程序,以确定其是否符合您的业务需求。 您无法在整个组织中部署 IAM 身份中心,但仍希望试验一个或多个 AWS 管理应用程序。 您已经有一个 IAM 身份中心的组织实例,但希望将受支持的 AWS 管理应用程序部署给与您组织实例中的用户不同的用户。其他注意事项
在使用多个 IAM 身份中心实例时,需要注意以下几点:
每个 IAM 身份中心实例是独立的,与其他实例互不关联。这意味着用户和分配在每个实例中独立管理,且没有同步的手段。在实例之间迁移是不可能的。这意味着在新实例中将应用程序迁移至需重新设置。帐户实例在更改身份源时与组织实例有相同的 考虑事项。通常,您希望在添加分配之前设置正确的身份源。通过 IAM 身份中心公共 API 自动化用户和组对应用的分配也需要使用应用 API,以确保这些用户和组在应用中拥有正确的权限。例如,如果您使用身份中心将组分配给 CodeCatalyst,您仍需从 AWS 管理控制台的 Amazon CodeCatalyst 页面,将组分配给 CodeCatalyst 空间。请参见 设置支持身份联邦的空间 文档。默认情况下,帐户实例要求新增加的用户在首次登录时注册多因素认证MFA设备。可以在特定实例的 AWS 管理控制台中修改。在选择加入区域内创建组织实例后,无法再创建帐户实例。现有的帐户实例将继续功能。只有部分 AWS 管理应用程序 支持帐户实例。控制 IAM 身份中心实例的部署
如果您在2023年11月15日之前启用了 IAM 身份中心,则默认情况下帐户实例创建处于关闭状态。如果您在2023年11月15日之后启用身份中心,或者如果根本没有启用身份中心,您可以通过 服务控制策略(SCP) 控制 IAM 身份中心帐户实例的创建。我们建议应用以下示例策略,以将帐户实例的使用限制为仅限特定 AWS 帐户。以下示例 SCP 将帮助您拒绝在组织帐户中创建 IAM 身份中心的帐户实例,除非帐户 ID 与您在策略中指定的帐户 ID 匹配:
json{ Version 20121017 Statement [ { Sid DenyCreateAccountInstances Effect Deny Action ssoCreateInstance Resource Condition { StringNotEquals { awsPrincipalAccount [ ltALLOWEDACCOUNTIDgt ] } } } ]}
要了解有关 SCP 的更多信息,请参阅 AWS Organizations 用户指南中的服务控制策略。
使用 AWS CloudTrail 监控实例活动
如果您的组织有现有的日志摄取管道解决方案,通过 AWS CloudTrail 收集日志和生成报告,那么支持 IAM 身份中心的 CloudTrail 操作将自动出现在您的管道中,包括帐户实例的 IAM 身份中心操作,如 ssoCreateInstance。
要在组织中创建 IAM 身份中心事件的监控解决方案,您应通过 AWS CloudTrail 设置监控。CloudTrail 是一项记录 AWS 服务事件的服务,便于监控您帐户中这些服务的活动。您可以创建一个 CloudTrail 路径, 捕获您组织中所有帐户和区域的事件,并将其持久化到 Amazon Simple Storage Service (Amazon S3)。
创建组织的路径后,您可以以多种方式使用它。您可以将事件发送至 Amazon CloudWatch Logs,并为身份中心事件设置 监控和警报,这可以实现对支持的 IAM 身份中心 CloudTrail 操作 的即时通知。通过在组织内部署多个身份中心实例,您还可以启用通知实例活动,包括新实例创建、删除、应用程序注册、用户认证或其他受到支持的操作。
如果您希望对 IAM 身份中心事件采取措施,可以创建一个解决方案,利用 Amazon Simple Notification Service、Amazon Simple Queue Service 以及 CloudTrail 处理库 处理事件。通过此解决方案,您可以根据需要设置自己的业务逻辑和规则。
此外,您还可以考虑 AWS CloudTrail Lake,该服务提供强大的数据存储,允许您 查询 CloudTrail 事件,无需管理复杂的数据加载管道。您可以快速 为新事件创建数据存储,这将立即开始收集数据,可以在几分钟内查询到。要分析历史数据,您可以 将组织路径复制到 CloudTrail Lake。
以下是一个简单查询的示例,显示已创建和删除的身份中心实例列表,包括创建它们的帐户和用户。请用您的存储 ID 替换 ltEventdatastoreIDgt。
sqlSELECT userIdentityarn AS userARN eventName userIdentityaccountId FROM ltEventdatastoreIDgt WHERE userIdentityarn IS NOT NULL AND eventName = DeleteInstance OR eventName = CreateInstance
您可以将查询结果保存到 S3 存储桶,并下载一份 CSV 格式的结果副本。要了解更多,请按照 下载 CloudTrail Lake 保存的查询结果 中的步骤操作。
如果希望自动化安全数据的获取、聚合、规范化和管理,可以使用 Amazon Security Lake,它使您的组织安全数据广泛可用于您首选的安全分析解决方案,用于威胁检测、调查和事件响应等用例。了解更多请查看 什么是 Amazon Security Lake?。
组织内的实例管理和发现
您可以在独立帐户或属于您组织的帐户中创建 IAM 身份中心的帐户实例。创建可以通过 API 调用CreateInstance从成员帐户的身份中心控制台或受支持 AWS 管理应用程序的设置体验中执行。了解更多关于受支持的 AWS 管理应用程序。
如果您决定向组织中的帐户应用之前展示的拒绝创建帐户实例的 SCP,则在这些帐户中将无法创建 IAM 身份中心的帐户实例。但您还需要考虑,当您邀请一个独立的 AWS 帐户加入组织时,该帐户可能已经有现有的帐户实例。
为了识别现有实例、使用它们的人以及用途,您可以审核您的组织以搜索新实例。以下脚本显示如何发现您的组织中的所有 IAM 身份中心实例并将 csv 总结导出到 S3 存储桶。该脚本旨在在启用身份中心的帐户上运行。点击这里 查看如何使用此脚本的说明。
pythonaccountsandinstancesdict = {}duplicatedusers = {}
mainsession = boto3sessionSession()ssoadminclient = mainsessionclient(ssoadmin)identitystoreclient = mainsessionclient(identitystore)organizationsclient = mainsessionclient(organizations)s3client = boto3client(s3)logger = logginggetLogger()loggersetLevel(loggingINFO)
创建函数以列出组织中的所有身份中心实例
def lambdahandler(event context) applicationassignment = [] userdict = {}
currentaccount = osenviron[CurrentAccountId]loggerinfo(当前帐户 s currentaccount)paginator = organizationsclientgetpaginator(listaccounts)pageiterator = paginatorpaginate()for page in pageiterator for account in page[Accounts] getcredentials(account[Id] currentaccount) # 获取每个帐户的所有实例 返回每个帐户的实例 ID 和实例 ARN 的字典 accountsandinstancesdict = getaccountsandinstances(account[Id] currentaccount)
def getaccountsandinstances(accountid currentaccount) global accountsandinstancesdict
加速器下载官方instancepaginator = ssoadminclientgetpaginator(listinstances)instancepageiterator = instancepaginatorpaginate()for page in instancepageiterator for instance in page[Instances] # 返回所有实例和身份中心 if accountid == currentaccount accountsandinstancesdict = {currentaccount [instance[IdentityStoreId] instance[InstanceArn]]} elif instance[OwnerAccountId] != currentaccount accountsandinstancesdict[accountid] = ([instance[IdentityStoreId] instance[InstanceArn]])return accountsandinstancesdict以下表格显示了包含您组织中所有帐户及其对应的身份中心实例的 IAM 身份中心实例摘要报告。
AccountIdIdentityCenterInstance111122223333d111122223333111122224444d111122223333111122221111d111111111111跨多个实例的重复用户检测
拥有多个 IAM 身份中心实例的一个考虑是可能会出现同一个人在两个或多个实例中存在的情况。在这种情况下,每个实例为同一个人创建唯一标识符,并且该标识符将与用户关联的应用程序相关数据。为新进和离开的用户创建与您在组织级别使用的类似的用户管理流程。例如,如果有用户离开您的组织,则需要撤销在所有存在该用户的身份中心实例中的访问权限。
以下代码可以添加到上述脚本,以帮助检测可能存在重复的地方,以便您采取适当措施。如果您发现跨帐户实例有大量重复,您应考虑采用组织实例来减轻管理负担。
python
确定身份库中的成员是否存在重复
def getusers(identityStoreId userdict) global duplicatedusers paginator = identitystoreclientgetpaginator(listusers) pageiterator = paginatorpaginate(IdentityStoreId=identityStoreId) for page in pageiterator for user in page[Users] if Emails not in user print(用户没有邮箱) else for email in user[Emails] if email[Value] not in userdict userdict[email[Value]]