

经过仔细考虑，我们决定停用适用于 SQL 应用程序的 Amazon Kinesis Data Analytics：

1. 从 **2025年9月1日起，**我们将不再为适用于SQL应用程序的Amazon Kinesis Data Analytics Data Analytics提供任何错误修复，因为鉴于即将停产，我们对其的支持将有限。

2. 从 **2025 年 10 月 15 日**起，您将无法为 SQL 应用程序创建新的 Kinesis Data Analytics。

3. 从 **2026 年 1 月 27 日**起，我们将删除您的应用程序。您将无法启动或操作 Amazon Kinesis Data Analytics for SQL 应用程序。从那时起，将不再提供对 Amazon Kinesis Data Analytics for SQL 的支持。有关更多信息，请参阅 [Amazon Kinesis Data Analytics for SQL 应用程序停用](discontinuation.md)。

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

# Kinesis Data Analytics 中的身份和访问管理
<a name="iam-role"></a>

Amazon Kinesis Data Analytics 需要适当权限才能从应用程序输入配置中指定的流式传输源读取记录。Amazon Kinesis Data Analytics 还需要权限才能将您在应用程序输出写入您在应用程序输出配置中指定的流。

您可以创建 Amazon Kinesis Data Analytics 可担任的 IAM 角色以授予这些权限。您为该角色授予的权限决定了 Amazon Kinesis Data Analytics 服务在担任该角色时可以执行的操作。



**注意**  
如果要自己创建 IAM 角色，此部分中的信息是非常有用的。在 Amazon Kinesis Data Analytics 控制台中创建应用程序时，控制台可以在此时为您创建一个 IAM 角色。对于创建的 IAM 角色，控制台使用以下命名约定：  

```
kinesis-analytics-ApplicationName
```
在创建角色后，您可以在 IAM 控制台中查看该角色和附加的策略。

每个 IAM 角色附加了两个策略。在信任策略中，您可以指定谁可以代入该角色。在权限策略（可以有一个或多个）中，您应当指定要向此角色授予的权限。以下部分说明了这些策略，您可以在创建 IAM 角色时使用这些策略。



## 信任策略
<a name="iam-role-trust-policy"></a>

要为 Amazon Kinesis Data Analytics 授予代入某个角色的权限以访问流式传输源或引用源，您可以将以下信任策略附加到 角色：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "kinesisanalytics.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

## 权限策略
<a name="iam-role-permissions-policy"></a>

如果要创建 IAM 角色以允许 Amazon Kinesis Data Analytics 从应用程序流式传输源中读取，您必须授予相关读取操作的权限。根据您的源（例如，Kinesis 流、Firehose 传输流或 Amazon S3 存储桶中的引用源），您可以附加以下权限策略。



### 读取 Kinesis 流的权限策略
<a name="iam-role-permissions-policy-stream"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadInputKinesis",
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:GetShardIterator",
                "kinesis:GetRecords",
                "kinesis:ListShards"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-1:123456789012:stream/inputStreamName"
            ]
        }
    ]
}
```

------

### 读取 Firehose 传输流的权限策略
<a name="iam-role-permissions-policy-delivery-stream"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadInputFirehose",
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:Get*"
            ],
            "Resource": [
                "arn:aws:firehose:us-east-1:123456789012:deliverystream/inputFirehoseName"
            ]
        }
    ]
}
```

------

**注意**  
`firehose:Get*` 权限是指 Kinesis Data Analytics 用于访问流的内部访问器。Firehose 传输流没有公共访问器。

如果您指示 Amazon Kinesis Data Analytics 将输出写入到应用程序输出配置中的外部目标，您需要为 IAM 角色授予以下权限。

### 写入到 Kinesis 流的权限策略
<a name="iam-role-permissions-policy-ak-stream"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "WriteOutputKinesis",
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-1:123456789012:stream/output-stream-name"
            ]
        }
    ]
}
```

------

### 写入到 Firehose 传输流的权限策略
<a name="iam-role-permissions-policy-af-delivery-stream"></a>



------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "WriteOutputFirehose",
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": [
                "arn:aws:firehose:us-east-1:123456789012:deliverystream/output-firehose-name"
            ]
        }
    ]
}
```

------

### 从 Amazon S3 存储桶中读取引用数据源的权限策略
<a name="iam-role-permissions-policy-reference"></a>



------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "*"
    }
  ]
}
```

------

# 防止跨服务混淆代理
<a name="iam-cross-service-confused-deputy-prevention"></a>

在中 AWS，当一个服务（调用服务）调用另一个服务（被调用的服务）时，可能会发生跨服务模拟。尽管调用服务不应具有适当的权限，但仍可操纵以对另一个客户的资源进行操作，这会导致代理混淆。

为了防止众议员感到困惑，我们 AWS 提供了一些工具，这些工具可帮助您使用已获准访问您账户中资源的服务委托人保护所有服务的数据。本节重点介绍的是 Kinesis Data Analytics 特有的跨服务混淆代理人问题防范功能，您可以在 *IAM 用户指南*的[混淆代理人问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)部分了解更多相关信息。

在 Kinesis Data Analytics for SQL 的背景下，我们建议在角色信任策略中使用 a [w](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) s SourceArnSourceAccount: [和](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) aws: 全局条件上下文密钥，将对角色的访问权限限制为仅限预期资源生成的那些请求。

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

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

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

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

虽然 Kinesis Data Analytics for SQL API 中的大多数操作（[CreateApplication](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/API_CreateApplication.html)例如[AddApplicationInput[DeleteApplication](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/API_DeleteApplication.html)](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/API_AddApplicationInput.html)和）都是在特定应用程序的上下文中执行的，但[DiscoverInputSchema](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/API_DiscoverInputSchema.html)该操作不会在任何应用程序的上下文中执行。这意味着此操作中使用的角色不得在 `SourceArn` 条件键中完全指定资源。以下是使用通配符 ARN 的示例：

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

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

您向 Kinesis Data Analytics 提供的角色策略以及为您生成的角色的信任策略可以使用 awsSourceArn: [和 a [w](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) sSourceAccount: 条件密](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)钥。

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

**防止出现代理混淆问题**

1. 登录 AWS 管理控制台并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 选择**角色**，然后选择要修改的角色。

1. 选择**编辑信任策略**。

1. 在**编辑信任策略**页面上，将默认 JSON 策略替换为使用 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文密钥中的一个或两个的策略。请参阅以下示例策略：

1. 选择**更新策略**。

------
#### [ JSON ]

****  

   ```
   {
      "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"
               }
            }
         }
      ]
   }
   ```

------