亚马逊AWS官方博客

如何使用 Amazon IAM Identity Center 的多个实例

最近,亚马逊推出了一项新功能,可以部署 Amazon IAM Identity Center 的账户实例。通过此次发布,您现在可以拥有两种类型的 IAM Identity Center 实例:组织实例账户实例组织实例是在使用 Amazon Organizations 创建的组织管理账户中启用的 IAM Identity Center 实例。该实例用于管理整个组织对 Amazon Web Services 账户和应用程序的访问。组织实例是部署 IAM Identity Center 时的最佳实践。许多客户要求提供一种使用测试沙盒身份启用 Amazon 应用程序的方法。新的账户实例旨在支持 Amazon 托管应用程序(例如 Amazon Redshift)的沙盒部署,并且只能在创建它们的账户和 Amazon Web Services 区域内使用。

在这篇博客文章中,我们将向您展示何时使用每种实例类型,如何控制账户实例的部署,以及如何使用增强的 IAM Identity Center API 大规模监控、管理和审核这些实例。

IAM Identity Center 实例类型

IAM Identity Center 现在提供两种部署类型,即传统的组织实例账户实例,如图 1 所示。在本节中,我们将向您介绍两者之间的区别。

图 1:IAM Identity Center 实例类型

IAM Identity Center 的组织实例

IAM Identity Center 的组织实例是 Amazon Organizations 提供的功能齐全的版本。此类型的实例可帮助您安全地创建或连接员工身份,并集中管理他们在组织的各个 Amazon Web Services 账户和应用程序中的访问权限。这是在 Amazon Web Services 上进行员工身份验证和授权的推荐方法,适用于各种规模和类型的组织。

使用 IAM Identity Center 的组织实例,您的身份中心管理员可以在 Identity Center 目录中创建和管理用户身份,或连接您现有的身份来源,包括 Microsoft Active Directory、Okta、Ping Identity、JumpCloud、Google Workspace 和 Azure Active Directory(Entra ID)。您可以使用多账户权限管理对所有 Amazon Web Services 账户的访问,并且可以支持对多个账户中的 Amazon 托管应用程序的访问。此外,如果您需要基本身份提供商,还可以管理对客户管理的 SAML 2.0 应用程序的访问。在组织级别,只有一个 IAM Identity Center 组织实例。

IAM Identity Center 的账户实例

IAM Identity Center 的账户实例提供组织实例的部分功能。具体来说,账户实例最初仅支持 Amazon Redshift 的用户和组分配。它们绑定到单个 Amazon Web Services 账户,您可以将它们部署在组织的成员账户或独立 Amazon Web Services 账户中。无论区域如何,每个 Amazon Web Services 账户只能部署一个账户实例。

如果应用程序位于同一账户和区域中,您可以使用 IAM Identity Center 的账户实例来提供对 Identity Center 启用的受支持应用程序的访问。

Identity Center 的账户实例不支持客户管理的 SAML 2.0 应用程序的权限集或分配。 只有在没有 IAM Identity Center 的组织实例时,才可以创建 Identity Center 的账户实例。如果您尚未启用 Identity Center 的组织实例,那么您现在可以使用账户实例。如果您尚未启用 Identity Center,则您现在可以使用账户实例。

如果您已经有组织实例,则无法创建账户实例。但是,在某些情况下,您可能希望在具有组织实例的组织中拥有一个账户实例。例如,您可能需要一个独立于组织环境的测试环境。您可以通过在独立账户中设置账户实例,然后邀请该账户加入已拥有组织实例的 Amazon Organizations 来实现这一点。此外,如果您在创建账户实例后添加组织实例,则可以保留账户实例。

Identity Center 实例部署模式

案例 1(推荐):组织实例可以支持不同账户中的多个 Amazon 托管应用程序。创建组织实例后,账户实例创建将被禁用。

图 2:IAM Identity Center 实例部署模式案例 1

案例 2:没有组织实例的 Amazon Organizations 部署可以创建多个账户实例(每个账户一个),以支持同一账户中的 Amazon 托管应用程序。

图 3:IAM Identity Center 实例部署模式案例 2

案例 3:独立账户(不在 Amazon Organizations 中)中的账户实例可以支持同一账户中的 Amazon 托管应用程序。

图 4:IAM Identity Center 实例部署模式案例 3

案例 4:具有组织实例的 Amazon Organization 部署可以邀请在添加到组织之前拥有账户实例的独立账户。

图 5:IAM Identity Center 实例部署模式案例 4

何时应该使用 IAM Identity Center 的账户实例?

账户实例适用于组织实例不可用或不可行的特定情况,包括:

  • 您想对受支持的 Amazon 托管应用程序进行临时试用,以确定它是否适合您的业务需求。参见其他注意事项
  • 您无法在整个组织中部署 IAM Identity Center,但仍想试用一个或多个 Amazon 托管应用程序。参见其他注意事项

其他注意事项

使用 IAM Identity Center 的多个实例时,需要注意以下几点:

  • IAM Identity Center 的每个实例都是独立的,并且与其他 Identity Center 实例分离。也就是说,用户和分配在每个实例中单独管理,无法保持同步。
  • 无法在实例之间进行迁移。这意味着在实例之间迁移应用程序需要在新实例中从头开始设置该应用程序。
  • 账户实例在更改身份来源时的注意事项与组织实例相同。一般来说,您需要在添加分配之前设置正确的身份来源。
  • 若要通过 IAM Identity Center 公共 API 自动执行应用程序的用户和组分配,还需要使用应用程序 API 确保这些用户和组在应用程序中拥有正确的权限。例如,如果您使用 Identity Center 将组分配给 CodeCatalyst,仍然需要从 Amazon Web Services 管理控制台的 Amazon Redshift 页面将组分配给 CodeCatalyst 空间。请参阅设置支持身份联合验证的空间文档。
  • 默认情况下,账户实例要求新添加的用户在首次登录时注册多重身份验证(MFA)设备。这可以在 Amazon Web Services 管理控制台中针对特定实例的 Identity Center 进行更改。

控制 IAM Identity Center 实例部署

如果您在 2023 年 11 月 15 日之前启用 IAM Identity Center,则账户实例创建默认处于关闭状态。如果您在 2023 年 11 月 15 日之后启用 IAM Identity Center,或者根本没有启用 Identity Center,则可以通过服务控制策略(SCP)控制 Identity Center 账户实例的创建。我们建议应用以下示例策略,将账户实例的使用限制为除一组选定的 Amazon 账户之外的所有账户。下面的示例 SCP 将帮助您拒绝为组织中的账户创建 Identity Center 的账户实例,除非账户 ID 与您在策略中指定的 ID 匹配。将 <ALLOWED-ACCOUNT_ID> 替换为允许创建 Identity Center 账户实例的账户 ID:

{
    "Version": "2012-10-17",
    "Statement" : [
        {
            "Sid": "DenyCreateAccountInstances",
            "Effect": "Deny",
            "Action": [
                "sso:CreateInstance"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": [
                    "aws:PrincipalAccount": ["<ALLOWED-ACCOUNT-ID>"]
                ]
            }
        }
    ]
}
PowerShell

要了解有关 SCP 的更多信息,请参阅有关服务控制策略的 Amazon Organizations 用户指南

使用 Amazon CloudTrail 监控实例活动

如果您的组织现有的日志提取管道解决方案可以通过 Amazon CloudTrail 收集日志并生成报告,则 IAM Identity Center 支持的 CloudTrail 操作将自动出现在您的管道中,包括 IAM Identity Center 操作的其他账户实例,例如 sso:CreateInstance。

要为组织中的 IAM Identity Center 事件创建监控解决方案,您应该通过 Amazon CloudTrail 设置监控。 CloudTrail 是一项服务,用于记录来自 Amazon 服务的事件,以便监控您账户中这些服务的活动。您可以创建 CloudTrail 跟踪来捕获组织中所有账户和所有区域的事件,并将其保存到 Amazon Simple Storage Service(Amazon S3)。

为您的组织创建跟踪后,您可以通过多种方式使用它。您可以将事件发送到 Amazon CloudWatch Logs 并设置 Identity Center 事件的监控和警报,这样可以立即接收有关受支持的 IAM Identity Center CloudTrail 操作的通知。通过在组织内部署多个 Identity Center 实例,您还可以启用实例活动通知,包括新实例创建、删除、应用程序注册、用户身份验证或其他支持的操作。

如果您想对 IAM Identity Center 事件执行操作,可以创建一个解决方案,使用附加服务(例如 Amazon Simple Notification Service、Amazon Simple Queue ServiceCloudTrail 处理库)来处理事件。使用此解决方案,您可以根据需要设置自己的业务逻辑和规则。

此外,您可能还需要考虑 Amazon CloudTrail Lake,它提供强大的数据存储,让您可以查询 CloudTrail 事件,而无需管理复杂的数据加载管道。您可以快速为新事件创建数据存储,这将立即开始收集数据,并可在几分钟内进行查询。要分析历史数据,您可以将组织跟踪复制到 CloudTrail Lake

以下是一个简单查询的示例,其中显示了一个包含已创建和已删除的 Identity Center 实例及其创建账户以及创建用户的列表。 将 <Event_data_store_ID> 替换为您的存储 ID。

SELECT 
    userIdentity.arn AS userARN, eventName, userIdentity.accountId 
FROM 
    <Event_data_store_ID> 
WHERE 
    userIdentity.arn IS NOT NULL 
    AND eventName = 'DeleteInstance' 
    OR eventName = 'CreateInstance'
PowerShell

您可以将查询结果保存到 S3 存储桶并下载 CSV 格式的结果副本。要了解更多信息,请按照下载 CloudTrail Lake 保存的查询结果中的步骤进行操作。图 6 显示了 CloudTrail Lake 的查询结果。

图 6:Amazon CloudTrail Lake 查询结果

组织内部的实例管理和发现

您可以在独立账户或属于您的组织的账户中创建 IAM Identity Center 的账户实例。可以通过成员账户中的 Identity Center 控制台的 API 调用(CreateInstance)进行创建,也可以通过支持的 Amazon 托管应用程序的设置体验进行创建。了解有关受支持的 Amazon 托管应用程序的更多信息。

如果您决定将前面显示的 DenyCreateAccountInstances SCP 应用到组织中的账户,则您将无法再在这些账户中创建 IAM Identity Center 的账户实例。但是,您还应该考虑到,当您邀请独立的 Amazon Web Services 账户加入您的组织时,该账户可能拥有 Identity Center 的现有账户实例。

要识别现有实例、谁在使用它们以及它们的用途,您可以审核您的组织以搜索新实例。 以下脚本显示如何发现组织中的所有 IAM Identity Center 实例并将 .csv 摘要导出到 S3 存储桶。 此脚本设计为在启用了 Identity Center 的账户上运行。单击此处可查看有关如何使用此脚本的说明。

. . .
. . .
accounts_and_instances_dict={}
duplicated_users ={}

main_session = boto3.session.Session()
sso_admin_client = main_session.client('sso-admin')
identity_store_client = main_session.client('identitystore')
organizations_client = main_session.client('organizations')
s3_client = boto3.client('s3')
logger = logging.getLogger()
logger.setLevel(logging.INFO)

#create function to list all Identity Center instances in your organization
def lambda_handler(event, context):
    application_assignment = []
    user_dict={}
    
    current_account = os.environ['CurrentAccountId']
 
    logger.info("Current account %s", current_account)
    
    paginator = organizations_client.get_paginator('list_accounts')
    page_iterator = paginator.paginate()
    for page in page_iterator:
        for account in page['Accounts']:
            get_credentials(account['Id'],current_account)
            #get all instances per account - returns dictionary of instance id and instances ARN per account
            accounts_and_instances_dict = get_accounts_and_instances(account['Id'], current_account)
                    
def get_accounts_and_instances(account_id, current_account):
    global accounts_and_instances_dict
    
    instance_paginator = sso_admin_client.get_paginator('list_instances')
    instance_page_iterator = instance_paginator.paginate()
    for page in instance_page_iterator:
        for instance in page['Instances']:
            #send back all instances and identity centers
            if account_id == current_account:
                accounts_and_instances_dict = {current_account:[instance['IdentityStoreId'],instance['InstanceArn']]}
            elif instance['OwnerAccountId'] != current_account: 
                accounts_and_instances_dict[account_id]= ([instance['IdentityStoreId'],instance['InstanceArn']])
    return accounts_and_instances_dict
  . . . 
  . . .
  . . .
PowerShell

下表显示了生成的 IAM Identity Center 实例摘要报告,其中包含您组织中的所有账户及其相应的 Identity Center 实例。

AccountId IdentityCenterInstance
111122223333 d-111122223333
111122224444 d-111122223333
111122221111 d-111111111111

跨多个实例的重复用户检测

对于具有多个 IAM Identity Center 实例的情况,要考虑的一种可能是同一个人存在于两个或更多实例中。在这种情况下,每个实例都会为同一个人创建一个唯一的标识符,并且该标识符将与应用程序相关的数据与用户关联起来。为进入和离开的用户创建与您在组织级别使用的流程类似的用户管理流程。例如,如果用户离开您的组织,您需要撤销该用户所在的所有 Identity Center 实例中的访问权限。

可以将以下代码添加到前面的脚本中,以帮助检测可能存在重复项的位置,从而采取适当的措施。如果您发现账户实例之间存在大量重复项,则应考虑采用组织实例,以便降低管理开销。

...
#determine if the member in IdentityStore have duplicate
def get_users(identityStoreId, user_dict): 
    global duplicated_users
    paginator = identity_store_client.get_paginator('list_users')
    page_iterator = paginator.paginate(IdentityStoreId=identityStoreId)
    for page in page_iterator:
        for user in page['Users']:
            if ( 'Emails' not in user ):
                print("user has no email")
            else:
                for email in user['Emails']:
                    if email['Value'] not in user_dict:
                        user_dict[email['Value']] = identityStoreId
                    else:
                        print("Duplicate user found " + user['UserName'])
                        user_dict[email['Value']] = user_dict[email['Value']] + "," + identityStoreId
                        duplicated_users[email['Value']] = user_dict[email['Value']]
    return user_dict 
...    
PowerShell

下表显示了生成的报告,其中包含组织中的重复用户及其相应的 IAM identity Center 实例。

User_email IdentityStoreId
username+adminuser@domain.com d-111122223333, d-111111111111
username2+adminuser@domain.com d-111122223333, d-111111111111, d-222222222222
username3+adminuser@domain.com d-111111111111, d-222222222222

上述所有用例的完整脚本可在 multiple-instance-management-iam-identity-center GitHub 存储库中找到。该存储库包含在管理账户中使用 Amazon Lambda 部署脚本的说明。部署后,您可以调用 Lambda 函数来获取包含组织中每个 IAM Identity Center 实例、分配给每个实例的应用程序以及有权访问这些应用程序的用户的 .csv 文件。通过此功能,您还可以获得关于存在于多个本地实例中的用户的报告。

总结

在这篇文章中,您了解了 IAM Identity Center 组织实例和账户实例之间的区别、何时使用账户实例的注意事项以及如何使用 Identity Center API 自动发现组织中的 Identity Center 账户实例。

要了解有关 IAM Identity Center 的更多信息,请参阅 Amazon IAM Identity Center 用户指南

如果您对这篇文章有疑问,请联系支持服务人员


Original URL: https://aws.amazon.com/blogs/security/how-to-use-multiple-instances-of-aws-iam-identity-center/

作者简介

Laura Reith

Laura 是 Amazon Web Services 的身份解决方案架构师,她致力于帮助客户克服安全和身份挑战。在闲暇时间,她喜欢沉船潜水和环游世界。

Steve Pascoe

Steve 是 Amazon Web Services Identity 团队的高级技术产品经理。他乐于为客户提供针对日常问题的创造性和独特的解决方案。除此之外,他还喜欢与家人一起通过乐高、木工以及新推出的 3D 打印技术来建造各种物品。

Sowjanya Rajavaram

Sowjanya 是一位高级解决方案架构师,专门研究 Amazon Web Services 中的身份和安全性。在整个职业生涯中,她一直专注于帮助各种规模的客户应对他们的身份和访问管理挑战。她喜欢旅行以及体验新的文化和美食。