

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立 IAM 政策和使用者
<a name="tutorial-stock-data-kplkcl-iam"></a>

指定 AWS 使用精細許可來控制對不同資源之存取的安全最佳實務。 AWS Identity and Access Management (IAM) 可讓您管理 中的使用者和使用者許可 AWS。[IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html)將明確列出允許的動作以及各項動作所適用的資源。

以下是 Kinesis Data Streams 生產者和取用者一般需要的最低許可。


**生產者**  

| 動作 | 資源 | 用途 | 
| --- | --- | --- | 
| DescribeStream, DescribeStreamSummary, DescribeStreamConsumer | Kinesis 資料串流 | 嘗試撰寫記錄之前，生產者應先檢查串流是否存在且處於作用中狀態、串流中是否含有碎片，以及串流是否有消費者。 | 
| SubscribeToShard, RegisterStreamConsumer | Kinesis 資料串流 | 訂閱並將消費者註冊至 Kinesis 資料串流碎片。 | 
| PutRecord, PutRecords | Kinesis 資料串流 | 將資料寫入至 Kinesis Data Streams。 | 


**消費者**  

| **動作** | **Resource** | **用途** | 
| --- | --- | --- | 
| 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 碎片執行分割/合併操作的情況下使用。 | 
| PutMetricData | Amazon CloudWatch 日誌 | KCL 還會上傳指標至 CloudWatch，這將有助於監控應用程式。 | 

針對此應用程式，您要建立單一 IAM 政策以授予上述所有許可。實際上，您可能要考慮建立兩項政策，一項政策用於生產者，另一項政策用於消費者。

**建立 IAM 政策**

1. 找出新串流的 Amazon Resource Name (ARN)。您可以在 **Details (詳細資訊)** 標籤頂端所列的 **Stream 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
   ```

   區域及帳戶與前一步驟如出一轍，但此處的 *name* 為消費者應用程式所建立與使用的資料表的名稱。消費者所用的 KCL 將使用應用程式名稱做為資料表名稱。請使用 `StockTradesProcessor`，即稍後將使用的應用程式名稱。

1. 在 IAM 主控台的**政策** ([https://console.aws.amazon.com/iam/home\$1policies](https://console.aws.amazon.com/iam/home#policies)) 中，選擇**建立政策**。如果這是您第一次使用 IAM 政策，請選擇**開始使用**、**建立政策**。

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_tw/streams/latest/dev/tutorial-stock-data-kplkcl-iam.html)

   在無須指定 ARN 的情況下要使用星號 (`*`)。此處使用星號是因為 CloudWatch 中沒有任何可對其叫用 `PutMetricData` 動作的特定資源。

1. 選擇 **Next Step (後續步驟)**。

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. 對於**使用者名稱**，輸入 `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 政策附接至使用者**

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)