

经过仔细考虑，我们决定停用适用于 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)。

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

# 为 使用基于身份的策略（IAM 策略）
<a name="using-identity-based-policies"></a>

下面提供了基于身份的策略的示例，这些示例展示了账户管理员如何将权限策略附加到 IAM 身份（即用户、组和角色），从而授予对资源执行操作的权限。

**重要**  
我们建议您首先阅读以下介绍性主题，这些主题说明了可用于管理 资源访问的基本概念和选项。有关更多信息，请参阅 [管理 资源的访问权限概述](access-control-overview.md)。

**Topics**
+ [使用 控制台所需要的权限](#console-permissions)
+ [适用于 的 Amazon 托管（预定义）策略](#access-policy-aws-managed-policies)
+ [客户托管策略示例](#access-policy-customer-managed-examples)

下面介绍权限策略示例。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1473028104000",
            "Effect": "Allow",
            "Action": [
                "kinesisanalytics:CreateApplication"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

该策略包含一个语句：
+ 第一个语句使用应用程序的 Amazon 资源名称 (ARN) 授予权限以对资源执行一个 操作 (`kinesisanalytics:CreateApplication`)。此示例中的 ARN 指定通配符 (\$1)，表示为任何资源授予相应权限。

有关显示所有 API 操作及其适用资源的表，请参阅 [API 权限：操作、权限和资源参考](api-permissions-reference.md)。

## 使用 控制台所需要的权限
<a name="console-permissions"></a>

您必须为用户授予所需的权限才能使用 控制台。例如，如果希望用户拥有相应权限以创建应用程序，请授予显示账户中的流式传输源的权限，以便用户可以在控制台中配置输入和输出。

我们建议执行下列操作：
+ 使用 Amazon 托管策略向用户授权。有关可用的策略，请参阅[适用于 的 Amazon 托管（预定义）策略](#access-policy-aws-managed-policies)。
+ 创建自定义策略。在本示例中，我们建议您查看此部分中提供的示例。有关更多信息，请参阅 [客户托管策略示例](#access-policy-customer-managed-examples)。





## 适用于 的 Amazon 托管（预定义）策略
<a name="access-policy-aws-managed-policies"></a>

AWS 通过提供由创建和管理的独立 IAM 策略来解决许多常见用例 AWS。这些 Amazon 托管策略可针对常用案例授予必要的权限，使您免去调查所需权限的工作。有关更多信息，请参阅*《IAM 用户指南》*中的 [Amazon 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

以下 Amazon 托管策略（可附加到您账户中的用户）特定于：
+ **`AmazonKinesisAnalyticsReadOnly`**— 授予允许用户列出应用程序和查看 input/output 配置的操作权限。这还会授予权限以允许用户查看 Kinesis 流和 Firehose 传输流列表。应用程序运行时，用户可以在控制台中查看源数据和实时分析结果。

   
+ **`AmazonKinesisAnalyticsFullAccess`** - 为所有操作授予权限，并授予所有其他权限以允许用户创建和管理 应用程序。但是，请注意以下事项：

   
  + 如果用户要在控制台中创建一个新的 IAM 角色，这些权限并不能满足需求（这些权限允许用户选择现有角色）。如果您希望用户能够在控制台中创建 IAM 角色，请添加 `IAMFullAccess` Amazon 托管策略。

     
  + 在配置应用程序时，用户必须具有 `iam:PassRole` 操作权限才能指定 IAM 角色。此 Amazon 托管策略将 `iam:PassRole` 操作的权限仅授予给以前缀 `service-role/kinesis-analytics` 开头的 IAM 角色中的用户。

    如果用户要为 应用程序配置的角色没有该前缀，您必须先在特定角色中为用户明确授予 `iam:PassRole` 操作的权限。

此外，您还可以创建您自己的自定义 IAM policy，以授予 操作和资源的相关权限。您可以将这些自定义策略附加到需要这些权限的 用户或组。

## 客户托管策略示例
<a name="access-policy-customer-managed-examples"></a>

此部分中的示例提供了一组可附加到用户的示例策略。如果您是首次创建策略，建议您先在账户中创建一个用户。然后，按顺序将策略附加到用户，如此部分中的步骤所述。然后，在将每个策略附加到用户时，可使用控制台验证该策略的效果。

最初，用户没有权限并且无法在控制台中执行任何操作。在将策略附加到用户时，可以验证用户是否能在控制台中执行各种操作。 

建议使用两种浏览器窗口。在一个窗口中，创建用户和授予权限。另一方面， AWS 管理控制台 使用用户的证书登录，并在您授予权限时验证权限。

 有关说明如何创建可用作资源执行角色的 IAM 角色的示例，请参阅*《IAM 用户指南》*中的[创建 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

**Topics**
+ [步骤 1：创建一个 IAM 用户](#console-permissions-createuser)
+ [步骤 2：为用户授予非 特定的操作的权限](#console-permissions-grant-non-ka-permissions)
+ [步骤 3：允许用户查看应用程序列表和查看详细信息](#console-permissions-grant-list-applications)
+ [步骤 4：允许用户启动特定应用程序](#console-permissions-start-app)
+ [步骤 5：允许用户创建 应用程序](#console-permissions-grant-create-applications)
+ [步骤 6：允许应用程序使用 Lambda 预处理](#console-permissions-grant-lambda)



### 步骤 1：创建一个 IAM 用户
<a name="console-permissions-createuser"></a>

首先，您需要创建一个用户，将该用户添加到具有管理权限的 IAM 组，然后向您创建的用户授予管理权限。然后，您可以使用特殊的 URL 和该用户的凭据 AWS 进行访问。

有关说明，请参考*《IAM 用户指南》*中的[创建您的第一个 IAM 用户和管理员组](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)。

### 步骤 2：为用户授予非 特定的操作的权限
<a name="console-permissions-grant-non-ka-permissions"></a>

首先，为用户授予非 特定的所有操作的权限，在用户使用应用程序时需要具有这些权限。其中包括处理流的权限（Amazon Kinesis Data Streams 操作、Amazon Data Firehose 操作）和操作权限。 CloudWatch 将下面的策略附加到用户。

您需要通过提供要向其授予 `iam:PassRole` 权限的 IAM 角色名来更新策略，或者指定通配符 (\$1) 来表示所有 IAM 角色。这不是安全做法；但是，您可能未在此测试期间创建特定 IAM 角色。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:CreateStream",
                "kinesis:DeleteStream",
                "kinesis:DescribeStream",
                "kinesis:ListStreams",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:ListDeliveryStreams"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "logs:GetLogEvents",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListPolicyVersions",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/service-role/role-name"
        }
    ]
}
```

------

### 步骤 3：允许用户查看应用程序列表和查看详细信息
<a name="console-permissions-grant-list-applications"></a>

以下策略为用户授予以下权限：
+ `kinesisanalytics:ListApplications` 操作的权限，以便用户可以查看应用程序列表。这是服务级别的 API 调用，因此您应当指定“\$1”作为 `Resource` 值。
+ `kinesisanalytics:DescribeApplication` 操作的权限，以便您可以获取任何应用程序的相关信息。

将此策略添加到用户。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesisanalytics:ListApplications"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesisanalytics:DescribeApplication"
            ],
            "Resource": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/*"
        }
    ]
}
```

------

 使用用户凭证登录到控制台以验证这些权限。

### 步骤 4：允许用户启动特定应用程序
<a name="console-permissions-start-app"></a>

如果您希望用户可以启动某个现有 应用程序，请将以下策略附加到用户。该策略提供 `kinesisanalytics:StartApplication` 操作的权限：您必须通过提供您的账户 ID、 AWS 地区和应用程序名称来更新政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesisanalytics:StartApplication"
            ],
            "Resource": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/application-name"
        }
    ]
}
```

------

### 步骤 5：允许用户创建 应用程序
<a name="console-permissions-grant-create-applications"></a>

如果您希望用户创建 应用程序，您可以将以下策略附加到该用户。您必须更新政策并提供 AWS 区域、您的账户 ID 以及您希望用户创建的特定应用程序名称，或者 “\$1” 以便用户可以指定任何应用程序名称（从而创建多个应用程序）。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1473028104000",
            "Effect": "Allow",
            "Action": [
                "kinesisanalytics:CreateApplication"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesisanalytics:StartApplication",
                "kinesisanalytics:UpdateApplication",
                "kinesisanalytics:AddApplicationInput",
                "kinesisanalytics:AddApplicationOutput"
            ],
            "Resource": "arn:aws:kinesisanalytics:us-east-1:123456789012:application/application-name"
        }
    ]
}
```

------

### 步骤 6：允许应用程序使用 Lambda 预处理
<a name="console-permissions-grant-lambda"></a>

如果希望应用程序能够使用 Lambda 预处理，请将以下策略附加到角色。

```
     {
       "Sid": "UseLambdaFunction",
       "Effect": "Allow",
       "Action": [
           "lambda:InvokeFunction",
           "lambda:GetFunctionConfiguration"
       ],
       "Resource": "<FunctionARN>"
   }
```