

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

# 建立 IAM 角色的授權政策
<a name="create-iam-access-control-policies"></a>

將授權政策連接至對應用戶端的 IAM 角色。在授權政策中，您可以指定角色要允許或拒絕的動作。如果您的用戶端位於 Amazon EC2 執行個體上，請將授權政策與該 Amazon EC2 執行個體的 IAM 角色建立關聯。或者，您可以將用戶端設定為使用命名設定檔，然後將授權政策與該命名設定檔的角色建立關聯。[設定 IAM 存取控制的用戶端](configure-clients-for-iam-access-control.md) 說明如何設定用戶端以使用命名設定檔。

如需有關建立 IAM 政策的詳細資訊，請參閱[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

以下是名為 MyTestCluster 之叢集的授權政策範例。若要了解 `Action` 和 `Resource` 元素的語意，請參閱[IAM 授權政策動作和資源的語意](kafka-actions.md)。

**重要**  
您對 IAM 政策所做的變更會立即反映在 IAM API 與 AWS CLI 中。不過，政策變更可能需要一點時間才會生效。在大多數情況下，政策變更會在一分鐘內生效。有時網路狀況可能會增加延遲。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect",
                "kafka-cluster:AlterCluster",
                "kafka-cluster:DescribeCluster"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:111122223333:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:*Topic*",
                "kafka-cluster:WriteData",
                "kafka-cluster:ReadData"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:topic/MyTestCluster/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:AlterGroup",
                "kafka-cluster:DescribeGroup"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:group/MyTestCluster/*"
            ]
        }
    ]
}
```

------

若要了解如何使用對應常見 Apache Kafka 使用案例的動作元素 (例如產生和使用資料) 建立政策，請參閱[用戶端授權政策的常見使用案例](iam-access-control-use-cases.md)。

對於 Kafka 2.8.0 及以上版本，**WriteDataIdempotently** 許可已棄用 ([KIP-679](https://cwiki.apache.org/confluence/display/KAFKA/KIP-679%3A+Producer+will+enable+the+strongest+delivery+guarantee+by+default))。預設為 `enable.idempotence = true`。因此，對於 Kafka 2.8.0 版和更新版本，IAM 不提供與 Kafka ACLs相同的功能。僅提供該主題的`WriteData`存取權，就無法`WriteDataIdempotently`存取該主題。當 `WriteData` 提供給 **ALL** 主題時，這不會影響案例。在這種情況下，`WriteDataIdempotently` 是允許的。這是因為 IAM 邏輯實作的差異，以及 Kafka ACLs的實作方式。此外，以冪等方式寫入主題也需要存取 `transactional-ids`。

若要解決此問題，建議您使用類似下列政策的政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect",
                "kafka-cluster:AlterCluster",
                "kafka-cluster:DescribeCluster",
                "kafka-cluster:WriteDataIdempotently"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:*Topic*",
                "kafka-cluster:WriteData",
                "kafka-cluster:ReadData"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/TestTopic",
                "arn:aws:kafka:us-east-1:123456789012:transactional-id/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*"
            ]
        }
    ]
}
```

------

在這種情況下，`WriteData` 允許寫入 `TestTopic`，同時 `WriteDataIdempotently` 允許等冪寫入叢集。此政策也會新增對所需`transactional-id`資源的存取權。

由於 `WriteDataIdempotently` 是叢集層級許可，您無法在主題層級使用它。如果 `WriteDataIdempotently` 受限於主題層級，則此政策將無法運作。