

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

# KCL 取用者應用程式所需的 IAM 許可
<a name="kcl-iam-permissions"></a>

 您必須將下列許可新增至與您的 KCL 取用者應用程式相關聯的 IAM 角色或使用者。

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

下表顯示 KCL 取用者應用程式通常所需的最低 IAM 許可：


**KCL 取用者應用程式的最低 IAM 許可**  

| 服務 | 動作 | 資源 ARNs) | 用途 | 
| --- | --- | --- | --- | 
| Amazon Kinesis Data Streams | `DescribeStream`<br />`DescribeStreamSummary`<br />`RegisterStreamConsumer` | KCL 應用程式將從中處理資料的 Kinesis 資料串流。<br />`arn:aws:kinesis:region:account:stream/StreamName` | 嘗試讀取記錄之前，消費者應先檢查資料串流是否存在、是否處於作用中狀態，以及資料串流中是否含有碎片。<br />將消費者註冊到碎片。 | 
| Amazon Kinesis Data Streams | `GetRecords`<br />`GetShardIterator`<br />`ListShards` | KCL 應用程式將從中處理資料的 Kinesis 資料串流。<br />`arn:aws:kinesis:region:account:stream/StreamName` | 從碎片讀取記錄。 | 
| Amazon Kinesis Data Streams | `SubscribeToShard`<br />`DescribeStreamConsumer` | KCL 應用程式將從中處理資料的 Kinesis 資料串流。只有在您使用增強型廣發 (EFO) 取用者時，才新增此動作。<br />`arn:aws:kinesis:region:account:stream/StreamName/consumer/*` | 為增強型廣發 (EFO) 消費者訂閱碎片。 | 
| Amazon DynamoDB | `CreateTable`<br />`DescribeTable`<br />`UpdateTable`<br />`Scan`<br />`GetItem`<br />`PutItem`<br />`UpdateItem`<br />`DeleteItem` | 租用資料表 (KCL 在 DynamoDB 中建立的中繼資料資料表。<br />`arn:aws:dynamodb:region:account:table/KCLApplicationName` | KCL 需要這些動作，才能管理在 DynamoDB 中建立的租用資料表。 | 
| Amazon DynamoDB | `CreateTable`<br />`DescribeTable`<br />`Scan`<br />`GetItem`<br />`PutItem`<br />`UpdateItem`<br />`DeleteItem` | 工作者指標和協調器狀態資料表 (DynamoDB 中的中繼資料資料表），由 KCL 建立。<br />`arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats`<br />`arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState` | KCL 需要這些動作來管理 DynamoDB 中的工作者指標和協調器狀態中繼資料表。 | 
| Amazon DynamoDB | `Query` | 租用資料表上的全域次要索引。<br />`arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*` | KCL 需要此動作，才能讀取在 DynamoDB 中建立之租用資料表的全域次要索引。 | 
| Amazon CloudWatch | `PutMetricData` | \* | 將指標上傳至 CloudWatch，這對於監控應用程式非常有用。使用星號 (\*) 是因為 CloudWatch 中沒有叫用`PutMetricData`動作的 spcific 資源。 | 

**注意**  
將 ARNs 中的 "region"、"account"、"StreamName" 和 "KCLApplicationName" 分別取代為您自己的 AWS 區域、 AWS 帳戶 number、Kinesis 資料串流名稱和 KCL 應用程式名稱。KCL 3.x 在 DynamoDB 中建立另外兩個中繼資料表。如需 KCL 建立之 DynamoDB 中繼資料資料表的詳細資訊，請參閱 [KCL 中的 DynamoDB 中繼資料表和負載平衡](kcl-dynamoDB.md)。如果您使用組態來自訂 KCL 建立的中繼資料表名稱，請使用這些指定的資料表名稱，而不是 KCL 應用程式名稱。

以下是 KCL 取用者應用程式的範例政策文件。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:DescribeStreamSummary",
                "kinesis:RegisterStreamConsumer",
                "kinesis:GetRecords",
                "kinesis:GetShardIterator",
                "kinesis:ListShards"
            ],
            "Resource": "arn:aws:kinesis:{{us-east-1}}:{{123456789012}}:stream/{{STREAM_NAME}}"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:SubscribeToShard",
                "kinesis:DescribeStreamConsumer"
            ],
            "Resource": "arn:aws:kinesis:{{us-east-1}}:{{123456789012}}:stream/{{STREAM_NAME}}/consumer/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:UpdateTable",
                "dynamodb:GetItem",
                "dynamodb:UpdateItem",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:Scan"
            ],
            "Resource": [
            "arn:aws:dynamodb:{{us-east-1}}:{{123456789012}}:table/{{KCL_APPLICATION_NAME}}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:GetItem",
                "dynamodb:UpdateItem",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:Scan"
            ],
            "Resource": [
            "arn:aws:dynamodb:{{us-east-1}}:{{123456789012}}:table/{{KCL_APPLICATION_NAME-WorkerMetricStats}}",
    "arn:aws:dynamodb:{{us-east-1}}:{{123456789012}}:table/{{KCL_APPLICATION_NAME-CoordinatorState}}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:Query"
            ],
            "Resource": [
            "arn:aws:dynamodb:{{us-east-1}}:{{123456789012}}:table/{{KCL_APPLICATION_NAME}}/index/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*"
        }
    ]
}
```

------

使用此範例政策之前，請檢查下列項目：
+ 將 REGION 取代為您的 AWS 區域 （例如 us-east-1)。
+ 以您的 AWS 帳戶 ID 取代 ACCOUNT\_ID。
+ 以 Kinesis 資料串流的名稱取代 STREAM\_NAME。
+ 以消費者的名稱取代 CONSUMER\_NAME，通常是使用 KCL 時的應用程式名稱。
+ 將 KCL\_APPLICATION\_NAME 取代為您的 KCL 應用程式名稱。