发布于: Jun 17, 2022

身份验证

实现解决方案平衡的身份验证/授权模型使与会者单击一下即可观看广播,确保未经充分的授权或审查,任何人都无法进入实时广播会议。它不需要用户创建账户,这意味着您可以轻松使不同组的用户参与事件。

为了能够举手,每个与会者的 URL 中必须包含一个预先生成的唯一 UUID。该 UUID 是在事件之前生成的,如后文所述。您可以选择是否公开广播以允许未经授权的与会者观看;未经授权的与会者将无法举手。

主持人和人才的 URL 中也需要包含唯一 UUID,此外,还需要在事件发生前生成附加访问密钥(等效于一次性密码)并提供给他们。登录时,系统会向他们分发一个会话令牌,向他们授予参加实时广播会议的特殊权限。该解决方案使用 Amazon Web Services Key Management Service (Amazon Web Services KMS) 来管理我们用于生成和验证这些会话令牌的密钥。

访问密钥为主持人和人才进入实时广播会议提供了额外的安全保护。针对与会者的额外访问控制措施是,与会者必须先由主持人进行预筛选,然后才能加入实时会议。他们在经过筛选后将获得一个令牌,使他们能够进入实时会议的休息室。主持人可以从休息室将他们添加到实时广播中。

先决条件

  • 安装 Node。
  • 安装 Amazon Web Services CLI 的版本 2。
  • 安装 Amazon Web Services SAM CLI。
  • 安装并运行 Docker。
  • 选择以下资源的名称:
    • 部署存储桶名称:此存储桶将用于促进部署。
    • 堆栈名称:将创建的 Amazon Web Services CloudFormation 部署堆栈的名称。

配置对账户的访问权限

在您的账户中禁用对 Amazon S3 的公有访问阻止,以便在部署期间正确配置 Web 资产。有关配置此设置的说明,请阅读 Amazon S3 公有访问阻止 – 为您的账户和存储桶提供又一层保护。(您可以在部署后重新启用它。)

通过运行 Amazon Web Services configure 并提供访问密钥和加密密钥,将 CLI 配置为使用您的 Amazon Web Services 账户。有关更多详细步骤,请阅读“配置 Amazon Web Services CLI”文档。

如果要限制对广播输出流的访问,则需要生成一个 CloudFront 密钥对,以对用于限制访问的凭据进行签名。这将需要 root 权限以访问您的账户。阅读“为受信任的签名者创建 CloudFront 密钥对”文档,以获取生成密钥对的说明。然后,您必须以隐私增强邮件 (PEM) 格式将密钥对的私钥部分存储到 Amazon Web Services Secrets Manager 中。对于下面的部署脚本,您将需要在 Secrets Manager 中安装的密钥的密钥 ID 和 ARN。

该解决方案作为 amazon-chime-live-events 托管在 GitHub 上。使用以下命令克隆存储库:

git clone https://github.com/aws/amazon-chime-live-events.git  

注意:如果您拥有要用于此解决方案的域名,请在部署前按照 src/backend/serverless/README.md 中的步骤配置您的域和 ACM 证书。您还需要按照 GitHub README 中的说明在部署脚本中指定您的域。

导航到 src/backend/serverless 目录:

cd src/backend/serverless

使用以下示例命令部署解决方案,将参数替换为您选择的名称:

node ./deploy.js -r us-east-1 -b live-event-deployment-bucket -s live-event-stack

您必须为脚本提供以下参数:

-r, --region                 目标区域,默认为 'us-east-1'
-b, --s3-bucket              用于部署的 S3 存储桶
-s, --stack-name             CloudFormation 堆栈名称

如果您选择将广播设为私有,请将密钥 ID 和在 Secrets Manager 中安装的密钥的 ARN 分别作为 --signing-key-id 和 --signing-key-arn 传递给 deploy.js 参数。您还应该设置 --access-duration 参数,以指定希望查看者能够访问输出流的时长。将持续时间设置为足以覆盖整个事件,再加上一些缓冲时间。它默认为一天,但是您可能希望将其限制为较短的时间段。

其他可选参数在 GitHub 上的 src/backend/serverless/README.md 中列出。

创建堆栈后,CloudFormation 将输出 CloudFront 分发名称。如果在部署过程中指定了域名,则此分发名称将以传递给部署脚本的域名作为别名:

  • CloudFrontDomainName

该脚本还将分别使用以下密钥输出与会者、主持人、人才和广播 Web 应用程序的应用程序 URL:

  • AttendeeURL
  • ModeratorURL
  • TalentURL
  • BroadcastURL

该脚本还会输出两个 MediaLive 输入终端节点,您可以使用它们向其发送广播输入流。它们接受 RTMP 格式:

  • MediaLivePrimaryEndpoint
  • MediaLiveSecondaryEndpoint

这两个输出将用于以下部分,以生成您的第一个事件:

GenerateEventFunction
CustomerImportS3Bucket

此输出是将用于启动和停止广播的 Amazon Web Services Lambda 函数的名称:

  • BroadcastLambdaFunction

现在,您可以在账户中重新启用对 Amazon S3 的公有访问阻止,因为仅在部署过程中才需要该功能。有关配置此设置的说明,请阅读 Amazon S3 公有访问阻止 – 为您的账户和存储桶提供又一层保护。

要生成事件,请创建三个逗号分隔值 (CSV) 格式的文件,每个文件分别对应一种参与者类型:主持人、与会者和人才。(人才文件将只有一个姓名,因为解决方案目前仅支持一名人才参与者。)这些 CSV 的唯一必填字段是 full_name。这是最小的 CSV 文件的内容示例:

full_nameAdam Smith Alexander Hamilton Marie Curie

将三个 CSV 文件上传到在部署脚本的输出中指定了名称的 CustomerImportS3Bucket。

GenerateEventFunction 也是部署脚本的输出,它是将用于生成事件的 Amazon Web Services Lambda 函数的名称。在 Amazon Web Services控制台中导航到 Amazon Web Services Lambda 服务。为 GenerateEventFunction Lambda 生成一个测试事件,并指定您刚刚创建的三个 CSV 文件:

{
  "attendeesKey": "Attendees.csv", "moderatorsKey": "Moderators.csv", "talentsKey": "Talents.csv"
}

运行测试事件。

Lambda 将在您将 CSV 文件上传到的同一个 CustomerImportS3Bucket 中生成四个 JSON 文件。将有三个 JSON 文件包含适用于事件所有参与者(与会者、主持人和人才)的访问信息。还有第四个
JSON 文件,该文件将具有开始广播所需的广播 URL。

以下是所生成输出的示例:

{ "full_name": "John Doe", "eventId": "LiveEventSample-ke40", "attendeeId": "d59f0394-9b56-48e9-9954-b2309a617220", "access_url": "http://localhost:9001/moderator.html?aId=d59f0394-9b56-48e9-9954-b2309a617220&eId=LiveEventSample-ke40&name=John%20Doe", "access_key": "jHkbdH2TJIlGfrzcWUYtUE3J"
  }

将 access_url 复制到您的浏览器以访问应用程序。如果要访问主持人或人才视图,您还需要复制 access_key 以登录。您可以在不同的浏览器选项卡中以不同的参与者类型登录,从而试用交互模型。以与会者和主持人的身份登录,然后从与会者的视图发送举手。您将在主持人的屏幕中看到举手信息弹出。

在开始广播前,您将需要启动 MediaLive 实例。在 Amazon Web Services 控制台中导航到 Amazon Web Services Elemental MediaLive 服务,选择以您为此解决方案创建的堆栈名称为前缀的通道,然后单击开始。

通过将测试事件提交给 BroadcastLambdaFunction(其名称为部署脚本的输出),可以在事件的开始和结束时开始和停止广播。

转到 Amazon Web Services 控制台,然后查找 BroadcastLambdaFunction。

从设置事件时在 S3 中转储的 “broadcaster” JSON 文件中获取广播 URL。另外,获取从部署脚本 MediaLivePrimaryEndpoint 输出的 RTMP 终端节点。

使用以下结构将这两个参数放入测试事件中。然后,单击测试按钮以开始广播:

{
   "action": "start", "meetingURL": "<your-url-to-be-broadcast>", "rtmpEndpoint": "<your-rtmp-endpoint-url>"
 }

上面命令的输出是 Amazon ECS 任务 ID。它将用于停止广播。要停止广播,请试用下面输入中的任务 ID 另外创建一个测试事件,然后单击测试按钮:

{ "action": "stop", "taskId": "<your-ecs-task-id-or-arn>"
 }

一段短暂的延迟(通常为 20-45 秒)后,您可以在应用程序的与会者视图中看到广播流。

停止广播后,可以停止 MediaLive 实例。导航到 Amazon Web Services 控制台中的 MediaLive 服务,然后单击以您为此解决方案创建的堆栈名称为前缀的通道。单击停止。

为了完全避免产生将来任何费用,请在试用解决方案后删除两个 CloudFormation 堆栈创建的所有资源。

为了防止创建的事件在您的账户中运行并产生费用,请从 AccessKeys DynamoDB 表中删除所有行。

相关文章