IAM 访问控制 - Amazon Managed Streaming for Apache Kafka
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

IAM 访问控制

Amazon MSK 的 IAM 访问控制可让您同时处理 MSK 集群的身份验证和授权。这样就不需要使用一种身份验证机制和另一种授权机制。例如,当客户端尝试写入您的集群时,Amazon MSK 使用 IAM 来检查该客户端是否是经过身份验证的身份,以及是否有权向您的集群生成数据。

亚马逊 MSK 记录访问事件,以便您可以对其进行审核。有关更多信息,请参阅 使用 Amazon CloudTrail 记录 API 调用

为了使 IAM 访问控制成为可能,亚马逊 MSK 对 Apache Kafka 源代码进行了小修改。这些修改不会对你的 Apache Kafka 体验造成明显的差异。

重要

IAM 访问控制不适用于 Apache ZooKeeper 节点。有关如何控制对这些节点的访问的信息,请参阅。控制对 Apache ZooKeeper 的访问.

重要

这些区域有:allow.everyone.if.no.acl.found如果您的集群使用 IAM 访问控制,Apache Kafka 设置将不起作用。

重要

您可以为使用 IAM 访问控制的 MSK 集群调用 Apache Kafka ACL API。但是,存储在 Apache ZooKeeper 中的 Apache Kafka ACL 对 IAM 角色的授权没有影响。您必须使用 IAM 策略控制 IAM 角色的访问权限。

亚马逊 MSK 的 IAM 访问控制如何工作

要对 Amazon MSK 使用 IAM 访问控制,请执行以下步骤,本节其余部分将详细介绍这些步骤。

创建使用 IAM 访问控制的集群

本节向您介绍如何使用Amazon Web Services Management Console、API 或Amazon CLI以创建使用 IAM 访问控制的集群。有关如何为现有集群启用 IAM 访问控制的信息,请参阅。更新集群的安全设置.

使用Amazon Web Services Management Console创建使用 IAM 访问控制的集群

  1. 从打开 Amazon MSK 控制台https://console.amazonaws.cn/msk/.

  2. 选择创建集群

  3. 选择使用自定义设置创建集群.

  4. 身份验证部分,选择IAM 访问控制.

  5. 完成创建集群的工作流程的剩余部分。

使用 API 或Amazon CLI创建使用 IAM 访问控制的集群

  • 要创建启用 IAM 访问控制的集群,请使用CreateClusterAPI 或create-clusterCLI 命令,然后将以下 JSON 传递给ClientAuthentication参数:"ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }.

为 IAM 访问控制配置客户端

要使客户端能够与使用 IAM 访问控制的 MSK 集群进行通信,请按照以下步骤中的说明对其进行配置。

  1. 将以下内容添加到client.properties文件。Replace<PATH_TO_TRUST_STORE_FILE>具有指向客户端上信任存储文件的完全限定路径。

    ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> security.protocol=SASL_SSL sasl.mechanism=AWS_MSK_IAM sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required; sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

    使用您为其创建的命名配置文件Amazon凭据,包括awsProfileName=“your profile name”;在您的客户端配置文件中。有关指定配置文件的信息,请参命名配置文件中的Amazon CLI文档中)。

  2. 下载最新的稳定aws-msk-iam-authJAR 文件,然后将其放在班级路径中。如果您使用 Maven,则添加以下依赖项,并根据需要调整版本号:

    <dependency> <groupId>software.amazon.msk</groupId> <artifactId>aws-msk-iam-auth</artifactId> <version>1.0.0</version> </dependency>

Amazon MSK 客户端插件是根据 Apache 2.0 许可证开源的。

创建授权策略

将授权策略附加到与客户端对应的 IAM 角色。在授权策略中,您可以指定允许或拒绝角色的操作。如果您的客户端位于 Amazon EC2 实例上,请将授权策略与该 Amazon EC2 实例的 IAM 角色相关联。或者,您可以将客户端配置为使用命名配置文件,然后将授权策略与该指定配置文件的角色关联起来。为 IAM 访问控制配置客户端介绍如何将客户端配置为使用命名配置文件。

有关如何创建 IAM 策略的信息,请参阅创建 IAM 策略.

以下是名为 MyTestCluster 的集群的授权策略示例。了解的语义ActionResource元素,请参阅行动和资源的语义.

重要

您对 IAM 策略所做的更改反映在 IAM API 和Amazon CLI立即。但是,政策变更生效可能需要明显的时间。在大多数情况下,政策更改会在不到一分钟内生效。网络状况有时可能会增加延迟。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:AlterCluster", "kafka-cluster:DescribeCluster" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012: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:0123456789012:topic/MyTestCluster/*" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:AlterGroup", "kafka-cluster:DescribeGroup" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:group/MyTestCluster/*" ] } ] }

要了解如何创建具有与常见 Apache Kafka 用例(例如生成和使用数据)对应的操作元素的策略,请参阅常见用例.

获取 IAM 访问控制的引导经纪商

请参阅 为亚马逊 MSK 集群获取引导经纪商

行动和资源的语义

本节介绍可以在 IAM 授权策略中使用的操作和资源元素的语义。有关策略示例,请参阅 创建授权策略

操作

下表列出了当您对 Amazon MSK 使用 IAM 访问控制时可以包含在授权策略中的操作。当您在授权策略中包含来自操作列中,您还必须包括来自所需的操作column.

操作 描述 所需的操作 所需的 资源 适用于无服务器群集
kafka-cluster:Connect 授予连接和验证集群的权限。 集群
kafka-cluster:DescribeCluster 授予描述集群各个方面的权限,相当于 Apache Kafka 的 DESCRIBE CLUSTER ACL。

kafka-cluster:Connect

集群
kafka-cluster:AlterCluster 授予更改集群各个方面的权限,相当于 Apache Kafka 的 ALTER CLUSTER ACL。

kafka-cluster:Connect

kafka-cluster:DescribeCluster

集群
kafka-cluster:DescribeClusterDynamicConfiguration 授予描述集群动态配置的权限,相当于 Apache Kafka 的 DESCRIBE_CONFIGS CLUSTER ACL。

kafka-cluster:Connect

集群
kafka-cluster:AlterClusterDynamicConfiguration 授予更改集群动态配置的权限,相当于 Apache Kafka 的 ALTER_CONFIGS CLUSTER ACL。

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

集群
kafka-cluster:WriteDataIdempotently 授予在集群上以幂等方式写入数据的权限,相当于 Apache Kafka 的 IDEMPOTENT_WRITE CLUSTER ACL。

kafka-cluster:Connect

kafka-cluster:WriteData

集群
kafka-cluster:CreateTopic 授予在集群上创建主题的权限,相当于 Apache Kafka 的 CREATE CLUSTER/TOPIC ACL。

kafka-cluster:Connect

topic
kafka-cluster:DescribeTopic 授予描述集群上主题的权限,相当于 Apache Kafka 的 DESCRIBE TOPIC ACL。

kafka-cluster:Connect

topic
kafka-cluster:AlterTopic 授予更改集群上主题的权限,相当于 Apache Kafka 的 ALTER TOPIC ACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topic
kafka-cluster:DeleteTopic 授予删除集群上主题的权限,相当于 Apache Kafka 的 DELETE TOPIC ACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topic
kafka-cluster:DescribeTopicDynamicConfiguration 授予描述集群上主题的动态配置的权限,相当于 Apache Kafka 的 DESCRIBE_CONFIGS TOPIC ACL。

kafka-cluster:Connect

topic
kafka-cluster:AlterTopicDynamicConfiguration 授予更改集群上主题动态配置的权限,相当于 Apache Kafka 的 ALTER_CONFIGS TOPIC ACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

topic
kafka-cluster:ReadData 授予从集群上的主题中读取数据的权限,相当于 Apache Kafka 的 READ TOPIC ACL。

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterGroup

topic
kafka-cluster:WriteData 授予向集群上的主题写入数据的权限,相当于 Apache Kafka 的 WRITE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topic
kafka-cluster:DescribeGroup 授予描述集群上的群组的权限,相当于 Apache Kafka 的 DESCRIBE GROUP ACL。

kafka-cluster:Connect

group
kafka-cluster:AlterGroup 授予加入集群上群组的权限,相当于 Apache Kafka 的 READ GROUP ACL。

kafka-cluster:Connect

kafka-cluster:DescribeGroup

group
kafka-cluster:DeleteGroup 授予删除集群上的群组的权限,相当于 Apache Kafka 的 DELETE GROUP ACL。

kafka-cluster:Connect

kafka-cluster:DescribeGroup

group
kafka-cluster:DescribeTransactionalId 授予描述集群上事务 ID 的权限,相当于 Apache Kafka 的 DESCRIBE TRANSACTIONAL_ID ACL。

kafka-cluster:Connect

交易 ID
kafka-cluster:AlterTransactionalId 授予更改集群上事务 ID 的权限,相当于 Apache Kafka 的 WRITE TRANSACTIONAL_ID ACL。

kafka-cluster:Connect

kafka-cluster:DescribeTransactionalId

kafka-cluster:WriteData

交易 ID

您可以在冒号后面的操作中任意次使用星号 (*) 通配符。示例如下。

  • kafka-cluster:*Topic代表kafka-cluster:CreateTopickafka-cluster:DescribeTopickafka-cluster:AlterTopic, 和kafka-cluster:DeleteTopic. 它不包括kafka-cluster:DescribeTopicDynamicConfiguration要么kafka-cluster:AlterTopicDynamicConfiguration.

  • kafka-cluster:*代表所有权限。

Resources(资源)

下表显示了当您对 Amazon MSK 使用 IAM 访问控制时,您可以在授权策略中使用的四种类型的资源。您可以从Amazon Web Services Management Console或者通过使用DescribeClusterAPI 或描述集群 Amazon CLI命令。然后,您可以使用集群 ARN 构建主题、组和交易 ID ARN。要在授权策略中指定资源,请使用该资源的 ARN。

资源 ARN 格式
Cluster arn: aw: kafka:领域account-id: cluster/cluster-name/cluster-uuid
主题 arn: aw: kafka:领域account-id: 主题/cluster-name/cluster-uuid/主题名称
arn: aw: kafka:领域account-id: 组/组/cluster-name/cluster-uuid/组名称
事务 ID arn: aw: kafka:领域account-id: 交易 ID/cluster-name/cluster-uuid/交易 ID

您可以在 ARN 的任意位置使用星号 (*) 通配符随后的任意次数。:cluster/:topic/:group/, 和:transaction-id/. 以下是说明如何使用星号 (*) 通配符引用多个资源的一些示例:

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*:名为 myTestCluster 的任何集群中的所有主题,无论集群的 UUID 如何。

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test:名称为 myTestCluster 且 UUID 为 abcd1234-0123-abd-5678-1234abd-1 的集群中名称以 “_test” 结尾的所有主题。

  • arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1:交易 ID 为 5555abd-1111-abd-1234-abcd1234-abcd1234-1 的所有交易,跨账户中名为 myTestCluster 的集群的所有化身。这意味着,如果您创建名为 myTestCluster 的集群,然后将其删除,然后以相同名称创建另一个集群,则可以使用此资源 ARN 在两个集群上表示相同的交易 ID。但是,删除的集群无法访问。

常见用例

下表中的第一列显示了一些常见的使用案例。要授权客户执行给定用例,请在客户端的授权策略中包括该用例所需的操作,然后设置EffectAllow.

有关作为 Amazon MSK IAM 访问控制一部分的所有操作的信息,请参阅行动和资源的语义.

注意

默认情况下,操作将被拒绝。您必须明确允许希望授权客户端执行的每个操作。

使用案例 所需的操作
管理员

kafka-cluster:*

创建主题

kafka-cluster:Connect

kafka-cluster:CreateTopic

创建数据

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

使用数据

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:DescribeGroup

kafka-cluster:AlterGroup

kafka-cluster:ReadData

以幂等方式生成数据

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:WriteDataIdempotently

以事务方式生成数据

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:DescribeTransactionalId

kafka-cluster:AlterTransactionalId

描述集群的配置

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

更新集群的配置

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

kafka-cluster:AlterClusterDynamicConfiguration

描述主题的配置

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

更新主题的配置

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

kafka-cluster:AlterTopicDynamicConfiguration

更改主题

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterTopic