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

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

IAM 访问控制

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

Amazon 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 Kafka ACL 存储在 Apache 中 ZooKeeper 对 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 或创建集群CLI 命令,并将以下 JSON 传递给ClientAuthentication参数:"ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }.

将客户端配置为 IAM 访问控制

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

  1. 将以下命令添加到client.propertiesfile。Replace(替换)<PATH_TO_TRUST_STORE_FILE>使用客户端上信任存储库文件的完全限定路径。

    注意

    如果您不想使用特定证书,则可以删除ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE>来自你的client.propertiesfile。当您不指定的值时ssl.truststore.location,Java 进程使用默认证书。

    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 policy.

以下是示例集群 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 访问控制的引导代理

请参阅 获取 Amazon MSK 集群的引导代理

动作和资源的语义

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

操作

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

操作 描述 所需的操作 所需的 资源 适用于无服务器集群
kafka-cluster:Connect 授予连接和验证集群的权限。 None(无) 集群
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

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

kafka-cluster:Connect

kafka-cluster:DescribeTransactionalId

kafka-cluster:WriteData

交易编号

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

  • kafka-cluster:*Topic代表kafka-cluster:CreateTopic,kafka-cluster:DescribeTopic,kafka-cluster:AlterTopic,以及kafka-cluster:DeleteTopic. 它不包括kafka-cluster:DescribeTopicDynamicConfiguration要么kafka-cluster:AlterTopicDynamicConfiguration.

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

资源

下表显示了您在使用 Amazon MSK 的 IAM 访问控制时可以在授权策略中使用的四种类型的资源。您可以从中获取集群的 Amazon Resource (ARN)Amazon Web Services Management Console或者使用DescribeClusterAPI 或描述集群 Amazon CLI命令。然后,您可以使用集群 ARN 来构造主题、群组和事务 ID ARN。要在授权策略中指定资源,请使用该资源的 ARN。

资源 ARN 格式
Cluster arn: aws: kafka:领域账户 id:cluster/集群名称/集群 uid
主题 arn: aws: kafka:领域账户 id:topic/集群名称/集群 uid/主题名称
arn: aws: kafka:领域账户 id:group/集群名称/集群 uid/组名称
事务 ID arn: aws: kafka:领域账户 id:transactional-id/集群名称/集群 uid/交易编号

您可以在 ARN 之后的 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: 名称为 “_test” 的集群中名称以 “_test” 结尾的所有主题 MyTestCluster 而且谁的 UUID 是 abcd1234-0123-abcd-5678-1234abcd-1。

  • arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1: 交易 ID 为 5555abcd-1111-abcd-1234-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