防止跨服务混淆代理 - 适用于 Amazon Kinesis Data Analytics·for·SQL 应用程序开发人员指南
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

对于新项目,建议您使用新的适用于 Apache Flink Studio 的托管服务,而不是使用 Kinesis Data Analytics for SQL 应用程序。Managed Service for Apache Flink Studio 不仅操作简单,还具有高级分析功能,使您能够在几分钟内构建复杂的流处理应用程序。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

防止跨服务混淆代理

在中 Amazon,当一个服务(调用服务)调用另一个服务(被调用的服务)时,可能会发生跨服务模拟。尽管呼叫服务不应有适当权限,但仍可以通过操纵该服务对其它客户的资源进行操作,导致混淆代理人问题。

为了防止众议员感到困惑,我们 Amazon 提供了一些工具,这些工具可帮助您使用已获准访问您账户中资源的服务委托人保护所有服务的数据。本节重点介绍的是 Kinesis Data Analytics 特有的跨服务混淆代理人问题防范功能,您可以在 IAM 用户指南混淆代理人问题部分了解更多相关信息。

在 Kinesis Data Analytics for SQL 的背景下,我们建议在角色信任策略中使用 a w s SourceArnSourceAccount: aws: 全局条件上下文密钥,将对角色的访问权限限制为仅限预期资源生成的那些请求。

如果您只希望将一个资源与跨服务访问相关联,请使用 aws:SourceArn。如果您想允许该账户中的任何资源与跨服务使用操作相关联,请使用 aws:SourceAccount

aws:SourceArn 的值必须是 Kinesis Data Analytics 使用资源的 ARN,其指定格式为:arn:aws:kinesisanalytics:region:account:resource

防范混淆代理问题的建议方法是使用 aws:SourceArn 全局条件上下文键和资源的完整 ARN。

如果不知道资源的完整 ARN,或者正在指定多个资源,请针对 ARN 未知部分使用带有通配符字符 (*) 的 aws:SourceArn 键。例如:arn:aws:kinesisanalytics::111122223333:*

虽然 Kinesis Data Analytics for SQL API 中的大多数操作(CreateApplication例如AddApplicationInputDeleteApplication和)都是在特定应用程序的上下文中执行的,但DiscoverInputSchema该操作不会在任何应用程序的上下文中执行。这意味着此操作中使用的角色不得在 SourceArn 条件键中完全指定资源。以下是使用通配符 ARN 的示例:

{ ... "ArnLike":{ "aws:SourceArn":"arn:aws:kinesisanalytics:us-east-1:123456789012:*" } ... }

Kinesis Data Analytics for SQL 生成的默认角色使用此通配符。这可确保控制台发现输入架构的无缝体验。但是,建议在发现架构后编辑信任策略,从而使用完整 ARN,充分缓解混淆代理人问题。

您向 Kinesis Data Analytics 提供的角色策略以及为您生成的角色的信任策略可以使用 awsSourceArn: 和 a w sSourceAccount: 条件密钥。

为了防止出现代理混淆的问题,请执行以下步骤:

若要防范混淆代理问题
  1. 登录 Amazon 管理控制台并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

  2. 选择角色,然后选择要修改的角色。

  3. 选择编辑信任策略

  4. 编辑信任策略页面上,将默认 JSON 策略替换为使用 aws:SourceArnaws:SourceAccount 全局条件上下文键或使用其中一个键的策略。请参阅以下策略:

  5. 选择更新策略

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"kinesisanalytics.amazonaws.com" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"Account ID" }, "ArnEquals":{ "aws:SourceArn":"arn:aws:kinesisanalytics:us-east-1:123456789012:application/my-app" } } } ] }