

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

# 使用 IAM 控制對 Amazon Kinesis Data Streams 資源的存取
<a name="controlling-access"></a>

AWS Identity and Access Management (IAM) 可讓您執行下列動作：
+ 在 AWS 您的帳戶下建立使用者和群組
+ 將唯一的安全登入資料指派給您 AWS 帳戶下的每個使用者
+ 控制每個使用者使用 AWS 資源執行任務的許可
+ 允許另一個 AWS 帳戶中的使用者共用您的 AWS 資源
+ 為您的 AWS 帳戶建立角色，並定義可擔任這些角色的使用者或服務
+ 為您的企業使用現有的身分，授予使用 AWS 資源執行任務的許可

搭配 Kinesis Data Streams 使用 IAM，您可以控制組織中的使用者是否可以使用特定的 Kinesis Data Streams API 動作來執行任務，以及是否可以使用特定的 AWS 資源。

若您使用 Kinesis Client Library (KCL) 開發應用程式，您的政策就必須包含對 Amazon DynamoDB 和 Amazon CloudWatch 的許可；KCL 使用 DynamoDB 追蹤應用程式的狀態資訊，並且使用 CloudWatch 代表您向 CloudWatch 傳送 KCL 指標。如需 KCL 的詳細資訊，請參閱[開發 KCL 1.x 消費者](developing-consumers-with-kcl.md)。

如需 IAM 的詳細資訊，請參閱下列各項：
+ [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
+ [IAM 入門](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html)
+ [IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)

如需 IAM 和 Amazon DynamoDB 的詳細資訊，請參閱《Amazon DynamoDB 開發人員指南》中的[使用 IAM 控制對 Amazon DynamoDB 資源的存取](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html)。**

如需 IAM 和 Amazon CloudWatch 的詳細資訊，請參閱《*Amazon CloudWatch 使用者指南*[AWS 》中的控制帳戶的使用者存取權](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/UsingIAM.html)。

**Topics**
+ [政策語法](#policy-syntax)
+ [適用於 Kinesis Data Streams 的動作](#kinesis-using-iam-actions)
+ [Kinesis Data Streams 的 Amazon Resource Name (ARN)](#kinesis-using-iam-arn-format)
+ [Kinesis Data Streams 的範例政策](#kinesis-using-iam-examples)
+ [與其他 帳戶共用您的資料串流](#sharing-data-streams)
+ [將 AWS Lambda 函數設定為從另一個帳戶中的 Kinesis Data Streams 讀取](#sharing-data-streams-example)
+ [使用資源型政策共用存取權](resource-based-policy-examples.md)

## 政策語法
<a name="policy-syntax"></a>

IAM 政策為包含一或多個陳述式的 JSON 文件。每個陳述式的結構如下所示：

```
{
  "Statement":[{
    "Effect":"{{effect}}",
    "Action":"{{action}}",
    "Resource":"{{arn}}",
    "Condition":{
      "{{condition}}":{
        "{{key}}":"{{value}}"
        }
      }
    }
  ]
}
```

陳述式由各種元素組成：
+ **Effect** (效果)：*效果* 可以是 `Allow` 或 `Deny`。根據預設，IAM 使用者沒有使用資源和 API 動作的許可，因此所有請求均會遭到拒絕。明確允許覆寫預設值。明確拒絕覆寫任何允許。
+ **Action** (動作)：*動作* 是您授予或拒絕許可的特定 API 動作。
+ **Resource** (資源)：受動作影響的資源。若要在陳述式中指定資源，您必須使用其 Amazon Resource Name (ARN)。
+ **Condition** (條件)：條件為選擇性。您可以用以控制何時政策開始生效。

當您建立和管理 IAM 政策時，可能想要使用 [IAM 政策產生器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator)和 [IAM 政策模擬器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html)。

## 適用於 Kinesis Data Streams 的動作
<a name="kinesis-using-iam-actions"></a>

在 IAM 政策陳述式中，您可以從任何支援 IAM 的服務指定任何 API 動作。針對 Kinesis Data Streams，請在 API 動作名稱使用下列字首：`kinesis:`。例如：`kinesis:CreateStream`、`kinesis:ListStreams` 和 `kinesis:DescribeStreamSummary`。

若要在單一陳述式中指定多個動作，請用逗號分隔，如下所示：

```
"Action": ["kinesis:action1", "kinesis:action2"]
```

您也可以使用萬用字元指定多個動作。例如，您可以指定名稱開頭有「Get」文字的所有動作，如下所示：

```
"Action": "kinesis:Get*"
```

若要指定所有的 Kinesis Data Streams 操作，請使用 \* 萬用字元，如下所示：

```
"Action": "kinesis:*"
```

如需完整 Kinesis Data Streams API 動作清單，請參閱 [Amazon Kinesis API 參考](https://docs.aws.amazon.com/kinesis/latest/APIReference/)。

## Kinesis Data Streams 的 Amazon Resource Name (ARN)
<a name="kinesis-using-iam-arn-format"></a>

每個 IAM 政策陳述式都會套用到您使用其 ARN 指定的資源。

對 Kinesis Data Streams 使用以下的 ARN 資源格式：

```
arn:aws:kinesis:{{region}}:{{account-id}}:stream/{{stream-name}}
```

例如：

```
"Resource": arn:aws:kinesis:*:111122223333:stream/my-stream
```

## Kinesis Data Streams 的範例政策
<a name="kinesis-using-iam-examples"></a>

以下範例政策示範如何控制使用者存取您的 Kinesis Data Streams。

------
#### [ Example 1: Allow users to get data from a stream ]

**Example**  
 此政策允許使用者或群組對指定的串流執行 `DescribeStreamSummary`、`GetShardIterator` 及 `GetRecords` 操作，對任何串流執行 `ListStreams`。此政策可套用到應能夠從特定串流取得資料的使用者。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:Get*",
                "kinesis:DescribeStreamSummary"
            ],
            "Resource": [
            "arn:aws:kinesis:{{us-east-1}}:{{111122223333}}:stream/{{stream1}}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:ListStreams"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------
#### [ Example 2: Allow users to add data to any stream in the account ]

**Example**  
此政策允許使用者或群組對某帳戶的任一串流使用 `PutRecord` 操作。此政策可套用到應能夠加入資料記錄至帳戶中所有串流的使用者。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:PutRecord"
            ],
            "Resource": [
                "arn:aws:kinesis:{{us-east-1}}:{{111122223333}}:stream/*"
            ]
        }
    ]
}
```

------
#### [ Example 3: Allow any Kinesis Data Streams action on a specific stream ]

**Example**  
此政策允許使用者或群組對指定的串流使用任何 Kinesis Data Streams 操作。此政策可套用到應該對特定串流具備管理控制權的使用者。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": [
            "arn:aws:kinesis:{{us-east-1}}:{{111122223333}}:stream/{{stream1}}"
            ]
        }
    ]
}
```

------
#### [ Example 4: Allow any Kinesis Data Streams action on any stream ]

**Example**  
此政策允許使用者或群組對帳戶中的任何串流使用任何 Kinesis Data Streams 操作。由於此政策會授予對您所有串流的完整存取權，您應限定僅供管理員使用。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": [
                "arn:aws:kinesis:*:{{111122223333}}:stream/*"
            ]
        }
    ]
}
```

------

## 與其他 帳戶共用您的資料串流
<a name="sharing-data-streams"></a>

**注意**  
 Kinesis Producer Library 目前不支援在寫入資料串流時指定串流 ARN。如果您想要寫入跨帳戶資料串流，請使用 AWS SDK。

將[資源型政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)附加到您的資料串流以授予對其他帳戶、IAM 使用者或 IAM 角色的存取權。資源型政策是附加到資源 (如資料串流) 的 JSON 政策文件。這些政策會授予[指定的主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)許可，允許在該資源上執行特定的動作，並且定義資源所適用的條件。一個政策可以有多個陳述式。您必須在資源型政策中指定主體。委託人可以包括帳戶、使用者、角色、聯合身分使用者 AWS 或服務。您可以在 Kinesis Data Streams 主控台、API 或 SDK 中設定政策。

請注意，共用存取權給已註冊的取用者 (例如[增強型散發](https://docs.aws.amazon.com/streams/latest/dev/enhanced-consumers.html)) 需要資料串流 ARN 和取用者 ARN 這兩者的政策。

### 啟用跨帳戶存取
<a name="sharing-data-streams-enabling"></a>

如需啟用跨帳戶存取權，您可以指定在其他帳戶內的所有帳戶或 IAM 實體，做為資源型政策的主體。新增跨帳戶主體至資源型政策，只是建立信任關係的一半。當委託人和資源位於不同的 AWS 帳戶中時，您還必須使用以身分為基礎的政策來授予委託人對資源的存取權。不過，如果資源型政策會為相同帳戶中的主體授予存取，這時就不需要額外的身分型政策。

如需有關使用跨帳戶存取之以資源為基礎的政策詳細資訊，請參閱 [IAM 中的跨帳戶資源存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

資料串流管理員可以使用 AWS Identity and Access Management 政策來指定可存取內容的人員。也就是說，哪個*主體*在什麼*條件*下可以對什麼*資源*執行哪些*動作*。JSON 政策的 `Action` 元素描述您可以用來允許或拒絕政策中存取的動作。政策動作通常具有與相關聯 AWS API 操作相同的名稱。

可以共用的 Kinesis Data Streams 動作：


| Action | 存取層級 | 
| --- | --- | 
| [DescribeStreamConsumer](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamConsumer.html) | 消費者 | 
| [DescribeStreamSummary](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamSummary.html) | 資料串流 | 
| [GetRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html) | 資料串流 | 
| [GetShardIterator](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html) | 資料串流 | 
| [ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html) | 資料串流 | 
| [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html) | 資料串流 | 
| [PutRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html) | 資料串流 | 
| [SubscribeToShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_SubscribeToShard.html) | 消費者 | 

以下是使用資源型政策將跨帳戶存取權授予您的資料串流或以註冊取用者的範例。

若要執行跨帳戶動作，您必須指定資料串流存取權的串流 ARN，並指定已註冊取用者存取權的取用者 ARN。

### Kinesis 資料串流的資源型政策範例
<a name="kinesis-stream-sharing-iam-examples"></a>

由於需要採取行動，共用已註冊取用者涉及資料串流政策和取用者政策。

**注意**  
以下為 `Principal` 的有效值範例：  
`{"AWS": "123456789012"}`
IAM 使用者 – `{"AWS": "arn:aws:iam::123456789012:user/user-name"}`
IAM 角色 – `{"AWS":["arn:aws:iam::123456789012:role/role-name"]}`
多個主體 (可以是帳戶、使用者、角色的組合) – `{"AWS":["123456789012", "123456789013", "arn:aws:iam::123456789012:user/user-name"]}`

------
#### [ Example 1: Write access to the data stream ]

**Example**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_write_policy_ID",
    "Statement": [
        {
            "Sid": "writestatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Account12345"
            },
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```

------
#### [ Example 2: Read access to the data stream ]

**Example**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_sharedthroughput_read_policy_ID",
    "Statement": [
        {
            "Sid": "sharedthroughputreadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Account12345"
            },
            "Action": [                
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards",
                "kinesis:GetRecords",
                "kinesis:GetShardIterator"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```

------
#### [ Example 3: Share enhanced fan-out read access to a registered consumer ]

**Example**  
資料串流政策聲明：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_sharedthroughput_read_policy_ID",
    "Statement": [
        {
            "Sid": "consumerreadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/role-name"
            },
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```
取用者政策聲明：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_efo_read_policy_ID",
    "Statement": [
        {
            "Sid": "eforeadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:role/role-name"
            },
            "Action": [
                "kinesis:DescribeStreamConsumer",
                "kinesis:SubscribeToShard"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC/consumer/consumerDEF:1674696300"
        }
    ]
}
```
為了維持最低權限的政策，動作或主體欄位不支援萬用字元 (\*)。

------

### 以程式設計方式管理資料串流的政策
<a name="sharing-data-streams-managing-policy"></a>

在 之外 AWS 管理主控台，Kinesis Data Streams 有三個 API，用於管理您的資料串流政策：
+ [PutResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutResourcePolicy.html)
+ [GetResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetResourcePolicy.html)
+ [DeleteResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteResourcePolicy.html)

使用 `PutResourePolicy` 來附加或覆寫資料串流或取用者的政策。使用 `GetResourcePolicy` 來檢查和檢視指定資料串流或取用者的政策。使用 `DeleteResourcePolicy` 來刪除指定資料串流或取用者的政策。

### 政策限制
<a name="sharing-data-streams-validating"></a>

Kinesis Data Streams 資源政策有下列限制：
+ 萬用字元 (\*) 不支援協助防止透過直接連接到資料串流或已註冊消費者的資源政策授予廣泛的存取。此外，請仔細檢查下列政策，以確認它們未授予廣泛存取權：
  + 連接到相關聯 AWS 主體的身分型政策 （例如 IAM 角色）
  + 連接至相關聯 AWS 資源的資源型政策 （例如， AWS Key Management Service KMS 金鑰）
+ AWS 委託人不支援 服務委託人，以防止潛在的[混淆代理人](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。
+ 不支援聯合主體。
+ 不支援正式使用者 ID。
+ 政策大小不得超過 20KB。

### 共用對加密資料的存取權
<a name="sharing-access-to-encrypted-data-1"></a>

如果您已為具有 AWS 受管 KMS 金鑰的資料串流啟用伺服器端加密，並想要透過資源政策共用存取權，則必須切換到使用客戶受管金鑰 (CMK)。如需詳細資訊，請參閱[什麼是 Kinesis Data Streams 的伺服器端加密？](what-is-sse.md)。此外，您必須允許共用主體實體以使用 KMS 跨帳戶共用功能來存取您的 CMK。請務必同時在共用主體實體的 IAM 政策中進行變更。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

## 將 AWS Lambda 函數設定為從另一個帳戶中的 Kinesis Data Streams 讀取
<a name="sharing-data-streams-example"></a>

有關如何設定 Lambda 函數來讀取其他帳戶的 Kinesis Data Streams 之範例，請參閱 [與跨帳戶 AWS Lambda 函數共用存取權](resource-based-policy-examples.md#Resource-based-policy-examples-lambda)。