对最终用户客户端应用程序进行身份验证以便进行 Amazon Chime SDK 消息传递 - Amazon Chime SDK

对最终用户客户端应用程序进行身份验证以便进行 Amazon Chime SDK 消息传递

您还可以通过最终用户客户端应用程序运行 Amazon Chime SDK 消息传递。如何从后端服务发出 SDK 调用以便进行 Amazon Chime SDK 消息传递 解释了如何调用以下 API,例如 create-channel、send-channel-message 及 list-channel-messages。浏览器和移动应用程序等最终用户客户端应用程序会进行相同的 API 调用。客户端应用程序还可以通过 WebSocket 进行连接,以接收有关其所属频道的消息和事件的实时更新。本节介绍如何向限于特定应用程序实例用户的客户端应用程序提供 IAM 凭证。最终用户获得这些凭证后,可以进行 如何从后端服务发出 SDK 调用以便进行 Amazon Chime SDK 消息传递 中所示的 API 调用。要查看客户端应用程序的完整演示,请参阅 https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat。有关接收来自客户端应用程序所属频道的实时消息的更多信息,请参阅 在 Amazon Chime SDK 消息传递中使用 WebSocket 接收消息

向最终用户提供 IAM 凭证

Amazon Chime SDK 消息传递与 AWS Identity and Access Management (IAM) 策略进行本地集成,用于对传入的请求进行身份验证。IAM 策略定义了个人用户可以做什么。可以制定 IAM 策略来为用例提供范围有限的凭证。有关为 Amazon Chime SDK 消息传递用户创建策略的更多信息,请参阅 用于 Amazon Chime SDK 消息传递的 IAM 角色示例

如果您已有身份提供商,则可以使用以下选项将现有身份与 Amazon Chime SDK 消息传递集成。

  • 您可以使用现有的身份提供商对用户进行身份验证,然后将身份验证服务与 AWS Security Token Service (STS) 集成,为客户端创建自己的凭证售卖服务。STS 提供用于担任 IAM 角色的 API。

  • 如果您已经有兼容 SAML 或 OpenID 的身份提供商,我们建议您使用 Amazon Cognito 身份池,以便提取对 AWS STS AssumeRoleWithSAMLAssumeRoleWithWebIdentity 的调用。Amazon Cognito 集成了 OpenID、SAML 和公共身份提供商,如 Facebook、Login with Amazon、Google 和 Sign in with Apple。

如果您没有身份提供商,则可以开始使用 Amazon Cognito 用户群体。有关如何将 Amazon Cognito 与 Amazon Chime SDK 消息传递功能配合使用的示例,请参阅使用 Amazon Chime SDK 消息传递在应用程序中构建聊天功能

或者,您可以使用 AWS STS 创建自己的凭证售卖服务或构建自己的身份提供商。

使用 STS 出售凭证

如果您已经拥有诸如 ActiveDirectory LDAP 之类的 IDP,并且想要实现自定义凭证售卖服务,或者向未经身份验证的会议与会者授予聊天权限,则可以使用 AWS STS AssumeRole API。为此,您需要首先创建一个 Amazon Chime SDK 消息传递 SDK 角色。有关创建该角色的更多信息,请参阅创建将权限委派给 IAM 用户的角色

该 IAM 角色将有权访问应用程序将使用的 Amazon Chime SDK 消息传递操作,如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "chime:GetMessagingSessionEndpoint" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "chime:SendChannelMessage", "chime:ListChannelMessages", "chime:CreateChannelMembership", "chime:ListChannelMemberships", "chime:DeleteChannelMembership", "chime:CreateChannelModerator", "chime:ListChannelModerators", "chime:DescribeChannelModerator", "chime:CreateChannel", "chime:DescribeChannel", "chime:ListChannels", "chime:DeleteChannel", "chime:RedactChannelMessage", "chime:UpdateChannelMessage", "chime:Connect", "chime:ListChannelBans", "chime:CreateChannelBan", "chime:DeleteChannelBan", "chime:ListChannelMembershipsForAppInstanceUser" "chime:AssociateChannelFlow", "chime:DisassociateChannelFlow", "chime:GetChannelMessageStatus" ], "Resource": [ "{chime_app_instance_arn}/user/${aws:PrincipalTag/my_applications_user_id}", "{chime_app_instance_arn}/channel/*" ] } ] }

在本示例中,将此角色称为 ChimeMessagingSampleAppUserRole

记下用户 ARN 资源中 ChimeMessagingSampleAppUserRole 策略 ${my_application_user_id} 中的会话标签。此会话标签在 AssumeRole API 调用中进行了参数化,以将返回的凭证限制为只拥有单个用户的权限。

AssumeRoleTagSession API 调用是使用已经获得认证的 IAM 实体(例如 IAM 用户)调用的。该 API 也可以由不同的 IAM 角色调用,例如 AWS Lambda 执行角色。该 IAM 身份必须有权在 ChimeMessagingSampleAppUserRole 上调用 AssumeRoleTagSession

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Resource": "arn:aws:iam::my_aws_account_id:role/ChimeMessagingSampleAppUserRole" } ] }

在本示例中,将此角色称为 ChimeSampleAppServerRole

您需要将 ChimeMessagingSampleAppUserRole 的信任策略设置为允许 ChimeMessagingSampleAppServerRole 调用其上的 STS AssumeRole API。有关将 IAM 角色与信任策略结合使用的更多信息,请参阅如何将 IAM 角色与信任策略结合使用。您可以使用 AWS IAM 角色控制台将此策略添加到 ChimeMessagingSampleAppUserRole。以下示例介绍了一种典型的信任关系。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS":"arn:aws:iam::my_aws_account_id:role/ChimeMessagingSampleAppServerRole" } "Action": "sts:AssumeRole" } ] }

在示例部署中,使用 ChimeMessagingSampleAppServerRole 启动 Amazon EC2 实例或 AWS Lambda。然后,服务器:

  1. 对客户端接收凭证的请求执行任何特定于应用程序的授权。

  2. ChimeMessagingSampleAppUserRole 上调用 STS AssumeRole,并使用标签来参数化 ${aws:PrincipalTag/my_applications_user_id}

  3. AssumeRole 调用中返回的凭证转发给用户。

以下示例介绍了在步骤 2 中扮演角色的 CLI 命令:

aws sts assume-role --role-arn arn:aws:iam::my_aws_account_id:role/ChimeMessagingSampleAppUserRole --role-session-name demo --tags Key=my_applications_user_id,Value=123456789