

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

# 创建 IAM 策略和用户
<a name="tutorial-stock-data-kplkcl-iam"></a>

的安全最佳实践 AWS 要求使用细粒度的权限来控制对不同资源的访问权限。 AWS Identity and Access Management (IAM) 允许您在中管理用户和用户权限 AWS。[IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html) 明确列出了允许的操作以及这些操作适用于的资源。

下面是 Kinesis Data Streams 创建器和消费端通常需要的最低权限。


**Producer**  

| 操作 | 资源 | 用途 | 
| --- | --- | --- | 
| DescribeStream, DescribeStreamSummary, DescribeStreamConsumer | Kinesis 数据流 | 在尝试写入记录之前，创建者会检查流是否存在且处于活动状态、分片是否包含在流中，以及流是否具有消费端。 | 
| SubscribeToShard, RegisterStreamConsumer | Kinesis 数据流 | 订阅 Kinesis 数据流分片并注册一个消费端。 | 
| PutRecord, PutRecords | Kinesis 数据流 | 将记录写入 Kinesis Data Streams。 | 


**消费端**  

| **操作** | **资源** | **目的** | 
| --- | --- | --- | 
| DescribeStream | Kinesis 数据流 | 在尝试读取记录前，消费端需检查流是否存在并处于活动状态，以及分片是否包含在流中。 | 
| GetRecords, GetShardIterator  | Kinesis 数据流 | 从 Kinesis Data Streams 分片读取记录。 | 
| CreateTable, DescribeTable, GetItem, PutItem, Scan, UpdateItem | Amazon DynamoDB 表 | 如果消费端是使用 Kinesis Client Library（KCL）开发的，则需要 DynamoDB 表的权限才能跟踪应用程序的处理状态。第一个消费端已开始创建表。 | 
| DeleteItem | Amazon DynamoDB 表 | 当使用者对 Kinesis Data Streams 分片执行 split/merge 操作时。 | 
| PutMetricData | 亚马逊 CloudWatch 日志 | KCL 还会将指标上传到 CloudWatch，这对于监控应用程序非常有用。 | 

对于此应用程序，请创建授予上述所有权限的单个 IAM policy。实际上，您可能需要考虑创建两个策略，一个策略适用于创建器，另一个策略适用于消费端。

**创建 IAM policy**

1. 找到新流的 Amazon 资源名称 (ARN)。您可以在**详细信息**选项卡顶部找到作为**流 ARN** 列出的此 ARN。ARN 格式如下所示：

   ```
   arn:aws:kinesis:region:account:stream/name
   ```  
*region*  
区域代码，例如 `us-west-2`。有关更多信息，请参阅[区域和可用区域概念](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions-availability-zones)。  
*账户*  
 AWS 账户 ID，如[账户设置](https://console.aws.amazon.com/billing/home?#/account)中所示。  
*name*  
[创建数据流](tutorial-stock-data-kplkcl-create-stream.md) 中的流名称，即 `StockTradeStream`。

1. 确定要由消费端使用（并由第一个消费端实例创建）的 DynamoDB 表的 ARN。它必须采用以下格式：

   ```
   arn:aws:dynamodb:region:account:table/name
   ```

   区域和账户来自上一步骤中的相同位置，但这一次，*名称* 为消费端应用程序创建和使用的表的名称。消费端所使用的 KCL 将应用程序名称用作表名称。使用 `StockTradesProcessor`，它是稍后使用的应用程序名称。

1. 在 IAM 控制台的**策略** (h [https://console.aws.amazon.com/iam/ome \$1policies](https://console.aws.amazon.com/iam/home#policies)) 中，选择**创建策略**。如果这是您首次使用 IAM policy，请依次选择**开始使用**、**创建策略**。

1. 在 **Policy Generator** 旁，选择 **Select**。

1. 选择 **Amazon Kinesis** 作为服务。 AWS 

1. 选择 `DescribeStream`、`GetShardIterator`、`GetRecords`、`PutRecord` 和 `PutRecords` 作为允许的操作。

1. 输入您在步骤 1 中创建的 ARN。

1. 对以下各项使用 **Add Statement (添加语句)**：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/streams/latest/dev/tutorial-stock-data-kplkcl-iam.html)

   在不需要指定 ARN 时使用的星号 (`*`)。在这种情况下，这是因为没有用于调用`PutMetricData`操作 CloudWatch 的特定资源。

1. 选择**下一步**。

1. 将 **Policy Name (策略名称)** 更改为 `StockTradeStreamPolicy`，审阅代码，然后选择 **Create Policy (创建策略)**。

生成的策略文档应类似于以下内容：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt123",
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords",
                "kinesis:GetShardIterator",
                "kinesis:GetRecords",
                "kinesis:ListShards",
                "kinesis:DescribeStreamSummary",
                "kinesis:RegisterStreamConsumer"
            ],
            "Resource": [
                "arn:aws:kinesis:us-west-2:111122223333:stream/StockTradeStream"
            ]
        },
        {
            "Sid": "Stmt234",
            "Effect": "Allow",
            "Action": [
                "kinesis:SubscribeToShard",
                "kinesis:DescribeStreamConsumer"
            ],
            "Resource": [
                "arn:aws:kinesis:us-west-2:111122223333:stream/StockTradeStream/*"
            ]
        },
        {
            "Sid": "Stmt456",
            "Effect": "Allow",
            "Action": [
                "dynamodb:*"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:111122223333:table/StockTradesProcessor"
            ]
        },
        {
            "Sid": "Stmt789",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

**若要创建 IAM 用户**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在 **Users (用户)** 页面上，选择 **Add user (添加用户)**。

1. 对于 **User name**，键入 `StockTradeStreamUser`。

1. 对于 **Access type (访问类型)**，选择 **Programmatic access (编程访问)**，然后选择 **Next: Permissions (下一步: 权限)**。

1. 选择**直接附上现有策略**。

1. 按名称搜索您创建的策略。选中策略名称左侧的框，然后选择 **Next: Review (下一步: 审核)**。

1. 查看详细信息和摘要，然后选择 **Create user (创建用户)**。

1. 复制 **Access key ID (访问密钥 ID)**，并将其私下保存。在 **Secret access key (私有访问密钥)** 下面选择 **Show (显示)**，然后也将该密钥私下保存。

1. 将访问密钥和私有密钥粘贴到一个只有您可以访问的位于安全位置的本地文件中。对于此应用程序，请创建名为 ` ~/.aws/credentials`（具有严格权限）的文件。该文件应采用以下格式：

   ```
   [default]
   aws_access_key_id=access key
   aws_secret_access_key=secret access key
   ```

**将 IAM policy 附加到用户**

1. 在 IAM 控制台中打开[策略](https://console.aws.amazon.com/iam/home?#policies)，然后选择**策略操作**。

1. 选择 `StockTradeStreamPolicy` 和 **Attach (附加)**。

1. 选择 `StockTradeStreamUser` 和 **Attach Policy (附加策略)**。

## 后续步骤
<a name="tutorial-stock-data-kplkcl-iam-next"></a>

[下载和构建实现代码](tutorial-stock-data-kplkcl-download.md)