亚马逊AWS官方博客

使用 IAM Identity Center API 来审核和管理应用程序分配

您现在可以使用 Amazon IAM Identity Center 应用程序分配 API 以编程方式管理和审核用户和组对 Amazon 托管应用程序的访问权限。以前,您必须使用 IAM Identity Center 控制台手动向应用程序分配用户和组。而现在,您可以自动执行此任务,这样就能够在组织不断发展的过程中更高效地进行扩展。

在这篇文章中,我们将向您展示如何使用 IAM Identity Center API 以编程方式管理和审核用户和组对应用程序的访问权限。我们分享的程序适用于 IAM Identity Center 的组织实例和账户实例。

自动管理应用程序的用户和组分配

在 IAM Identity Center 中,您可以一次性创建或连接员工用户,并集中管理他们对多个 Amazon Web Services 账户和应用程序的访问权限。您可以将 Amazon 托管应用程序配置为直接从相关应用程序控制台中使用 IAM Identity Center,然后管理哪些用户或组需要应用程序的权限。

您已经可以使用账户分配 API 来自动执行多账户访问,并使用 IAM Identity Center 权限集审核分配给用户的访问权限。今天,我们通过新的应用程序分配 API 扩展了这一功能。您可以使用这些新的 API 以编程方式控制应用程序分配,并开发用于审核这些任务的自动化工作流。

Amazon 托管应用程序直接从 IAM Identity Center 访问用户和组信息。Amazon Redshift 就是 Amazon 托管应用程序的一个示例。当您使用 IAM Identity Center 将 Amazon Redshift 配置为 Amazon 托管应用程序,并且组织中的用户访问数据库时,他们在 IAM Identity Center 中定义的组成员身份可以映射到授予他们特定权限的 Amazon Redshift 数据库角色。这使您可以更轻松地管理用户,因为您不必为每个人设置数据库对象权限。有关更多信息,请参阅 Redshift 与 Amazon IAM Identity Center 集成的好处 

配置 IAM Identity Center 和 Amazon Redshift 之间的集成后,您可以使用 DeleteApplicationAssignment 和 CreateApplicationAssignment API 自动分配或删除用户和组,如图 1 所示。

图 1:使用 CreateApplicationAssignment API 将用户和组分配给 Amazon Redshift

在本节中,您将了解如何使用 Identity Center API 将组分配给您的 Amazon Redshift 应用程序。您还将了解如何删除小组作业。

先决条件

要完成本演练,请确保您已满足以下先决条件:

步骤 1:获取您的 Identity Center 实例信息

第一步是运行以下命令来获取您正在使用的实例的 Amazon 资源名称(ARN)和 Identity Store ID:

aws sso-admin list-instances

输出应如下所示:

{
  "Instances": [
      {
          "InstanceArn": "arn:aws:sso:::instance/ssoins-****************",
          "IdentityStoreId": "d-**********",
          "OwnerAccountId": "************",
          "Name": "MyInstanceName",
          "CreatedDate": "2023-10-08T16:45:19.839000-04:00",
          "State": {
              "Name": "ACTIVE"
          },
          "Status": "ACTIVE"
      }
  ],
  "NextToken": <<TOKEN>>
}

记下 IdentityStoreId 和 InstanceArn — 在后面的步骤中将会用到它们。

步骤 2:在 Identity Store 中创建用户和组

下一步是在您的 Identity Store 中创建用户和组。

注意:如果您的 Identity Center 实例中已经有一个组,请获取其组 ID,然后继续执行步骤 3。您可以通过以下命令来使用 GroupID:

aws identitystore get-group-id --identity-store-id “d-********” –alternate-identifier “GroupName” ,

使用您在上一步中记下的 IdentityStoreId 来创建新用户。

aws identitystore create-user --identity-store-id "d-**********" --user-name "MyUser" --emails Value="MyUser@example.com",Type="Work",Primary=true —display-name "My User" —name FamilyName="User",GivenName="My" 

输出应如下所示:

{
    "UserId": "********-****-****-****-************",
    "IdentityStoreId": "d--********** "
}

在您的 Identity Store 中创建组:

aws identitystore create-group --identity-store-id d-********** --display-name engineering

在输出中,记下 GroupId— 稍后在步骤 4 中创建应用程序分配时将会用到它:

{
    "GroupId": "********-****-****-****-************",
    "IdentityStoreId": "d-**********"
}

运行以下命令以将用户添加到组:

aws identitystore create-group-membership --identity-store-id d-********** --group-id ********-****-****-****-************ --member-id UserId=********-****-****-****-************ 

结果将如下所示:

{
    "MembershipId": "********-****-****-****-************",
    "IdentityStoreId": "d-**********"
}

步骤 3:获取您的 Amazon Redshift 应用程序 ARN 实例

下一步是确定应用程序 ARN。要获取 ARN,请运行以下命令。

aws sso-admin list-applications --instance-arn "arn:aws:sso:::instance/ssoins-****************"

如果您的环境中有多个应用程序,请使用筛选器标志来指定应用程序账户或应用程序提供商。要了解有关筛选选项的更多信息,请参阅 ListApplications API 文档

在本例下,我们只有一个应用程序:Amazon Redshift。 响应应如下所示。记下 ApplicationArn — 在后面的步骤中将会用到它。

{

    "ApplicationArn": "arn:aws:sso:::instance/ssoins-****************/apl-***************",
    "ApplicationProviderArn": "arn:aws:sso::aws:applicationProvider/Redshift",
    "Name": "Amazon Redshift",
    "InstanceArn": "arn:aws:sso:::instance/ssoins-****************",
    "Status": "ENABLED”,
    "PortalOptions": {
        "Visible": true,
        "Visibility": "ENABLED",
        "SignInOptions": {
            "Origin": "IDENTITY_CENTER"
        }
    },
    "AssignmentConfig": {
        "AssignmentRequired": true
    },
    "Description": "Amazon Redshift",
    "CreatedDate": "2023-10-09T10:48:44.496000-07:00"
}

第 4 步:将组添加到 Amazon Redshift 应用程序

现在,您可以将您的新组添加到由 IAM Identity Center 管理的 Amazon Redshift 应用程序中。principal-id 是您在步骤 2 中创建的 GroupId

aws sso-admin create-application-assignment --application-arn "arn:aws:sso:::instance/ssoins-****************/apl-***************" --principal-id "********-****-****-****-************" --principal-type "GROUP" 

该组现在可以访问 Amazon Redshift,但在 Amazon Redshift 中拥有默认权限。要授予对数据库的访问权限,您可以创建角色来控制一组表或视图的可用权限。

要在 Amazon Redshift 中创建这些角色,您需要连接到集群并运行 SQL 命令。要连接到集群,请使用以下选项之一:

图 2 显示了通过查询编辑器 v2 与 Amazon Redshift 的连接。

图 2:查询编辑器 v2

默认情况下,所有用户都对数据库的 PUBLIC 架构具有 CREATE 和 USAGE 权限。要禁止用户在数据库的 PUBLIC 模式中创建对象,请使用 REVOKE 命令删除该权限。有关详细信息,请参阅默认数据库用户权限

作为 Amazon Redshift 数据库管理员,您可以创建角色,其中角色名称包含身份提供商命名空间前缀以及组名或用户名。 为此,请使用以下语法:

CREATE ROLE <identitycenternamespace:rolename>;

rolename 需要与 IAM Identity Center 中的组名相匹配。 Amazon Redshift 会自动将 IAM Identity Center 组或用户映射到之前创建的角色。 要扩展用户的权限,请使用 GRANT 命令。

当您创建 Amazon Redshift 和 IAM Identity Center 之间的集成时,会分配 identityprovidernamespace 命名空间。它代表您组织的名称,并作为您的 IAM Identity Center 托管用户和角色的前缀添加到 Redshift 数据库中。

因此,您的语法应如下所示:

CREATE ROLE <AWSIdentityCenter:MyGroup>;

步骤 5:移除应用程序分配

如果您决定新组不再需要访问 Amazon Redshift 应用程序,但应保留在 IAM Identity Center 实例中,请运行以下命令:

aws sso-admin delete-application-assignment --application-arn "arn:aws:sso:::instance/ssoins-****************/apl-***************" --principal-id "********-****-****-****-************" --principal-type "GROUP" 

注意:移除组的应用程序分配并不会将该组从您的 Identity Center 实例中移除

注意:我们建议您在移除或添加用户分配时查看应用程序的文档,因为您可能需要执行其他步骤才能完全加入或退出给定用户或组。 例如,当您移除用户或组分配时,还必须移除 Amazon Redshift 中的相应角色。您可以使用 DROP ROLE 命令来执行此操作。有关更多信息,请参阅管理数据库安全

审核用户和组对应用程序的访问权限

让我们考虑一下如何使用新的 API 来帮助您审核应用程序分配。在前面的示例中,您使用 Amazon CLI 创建和删除了 Amazon Redshift 的分配。现在,我们将向您展示如何使用新的 ListApplicationAssignments API 列出当前分配给您的 Amazon Redshift 应用程序的组。

aws sso-admin list-application-assignments --application-arn arn:aws:sso::****************:application/ssoins-****************/apl-****************

输出应如下所示—在本例中,您有一个分配给应用程序的组。

{
    "ApplicationAssignments": [
        {
        "ApplicationArn": "arn:aws:sso::****************:application/ssoins-****************/apl-****************",
        "PrincipalId": "********-****-****-****-************",
        "PrincipalType": "GROUP"
        }
    ]
}

要查看组成员身份,请使用 PrincipalId 信息来查询 Identity Store,并结合使用 ListGroupMemberships API 和 DescribeGroupMembership API 来获取分配给该组的用户的信息。

如果您有多个应用程序由 IAM Identity Center 管理,还可以创建脚本来自动审核这些应用程序。您可以在您的环境中的 Amazon Lambda 函数中定期运行此脚本,以保持对添加到每个应用程序的成员的监督。

要获取此用例的脚本,请参阅 multiple-instance-management-iam-identity-center GitHub 存储库。该存储库包含在 Amazon Organizations 委派管理员账户中使用 Lambda 部署脚本的说明。部署后,您可以调用 Lambda 函数来获取包含组织中每个 IAM Identity Center 实例、分配给每个实例的应用程序以及有权访问这些应用程序的用户的 .csv 文件。

总结

在这篇文章中,您学习了如何使用 IAM Identity Center 应用程序分配 API 将用户分配到 Amazon Redshift,并在用户不再属于组织时将其从应用程序中移除。您还学习了如何列出在每个账户中部署的应用程序,以及为每个应用程序分配的用户。

要了解有关 IAM Identity Center 的更多信息,请参阅 Amazon IAM Identity Center 用户指南。要测试应用程序分配 API,请参阅 SSO-admin API 参考指南

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


Original URL: https://aws.amazon.com/blogs/security/use-iam-identity-center-apis-to-audit-and-manage-application-assignments/

作者简介

Laura Reith

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

Steve Pascoe

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