本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 访问控制的集群
在以下位置打开 Amazon MSK 控制台https://console.amazonaws.cn/msk/
. -
选择创建集群。
-
选择使用自定义设置创建集群.
-
在里面身份验证部分,选择IAM 访问控制.
-
完成创建集群的剩余工作流程。
使用 API 或Amazon CLI创建使用 IAM 访问控制的集群
要创建启用了 IAM 访问控制的集群,请使用CreateClusterAPI 或创建集群
CLI 命令,并将以下 JSON 传递给 ClientAuthentication参数:"ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }.
将客户端配置为 IAM 访问控制
要使客户端能够与使用 IAM 访问控制的 MSK 集群通信,请按照以下步骤进行配置。
将以下命令添加到
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="在客户端配置文件中,在客户端配置文件中。有关命名配置文件的信息,请参阅命名配置文件在里面Amazon CLI文档中)。your profile name";下载最新的稳定版aws-msk-iam-auth
JAR 文件,并将其放在类路径中。如果您使用 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. 要理解的语义Action和Resource元素,请参阅动作和资源的语义.
您对 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 访问控制的引导代理
动作和资源的语义
本部分说明可在 IAM 授权策略中使用的操作和资源元素的语义。有关策略示例,请参阅 创建授权策略。
操作
下表列出了您在使用 Amazon MSK 的 IAM 访问控制时可以在授权策略中包含的操作。当您在授权策略中包含来自的操作时操作表中的列,您还必须包含以下中的相应操作所需的操作列。
| 操作 | 描述 | 所需的操作 | 所需的 资源 | 适用于无服务器集群 |
|---|---|---|---|---|
kafka-cluster:Connect |
授予连接和验证集群的权限。 | None(无) | 集群 | 是 |
kafka-cluster:DescribeCluster |
授予描述集群各个方面的权限,相当于 Apache Kafka 的 DESCRIBE CLUSTER ACL |
|
集群 | 是 |
kafka-cluster:AlterCluster |
授予更改集群各个方面的权限,相当于 Apache Kafka 的 ALTER CLUSTER ACL。 |
|
集群 | 否 |
kafka-cluster:DescribeClusterDynamicConfiguration |
授予描述集群动态配置的权限,相当于 Apache Kafka 的 DESCRIBE_CONFIGS CLUSTER ACL |
|
集群 | 否 |
kafka-cluster:AlterClusterDynamicConfiguration |
授予更改集群动态配置的权限,相当于 Apache Kafka 的 ALTER_CONFIGS CLUSTER ACL |
|
集群 | 否 |
kafka-cluster:WriteDataIdempotently |
授予在集群上以幂等方式写入数据的权限,相当于 Apache Kafka 的 IDEMPOTENT_WRITE CLUSTER ACL |
|
集群 | 是 |
kafka-cluster:CreateTopic |
授予在集群上创建主题的权限,相当于 Apache Kafka 的 CREATE CLUSTER/TOPIC ACL |
|
topic | 是 |
kafka-cluster:DescribeTopic |
授予描述集群上的主题的权限,相当于 Apache Kafka 的 DESCRIBE TOPIC ACL |
|
topic | 是 |
kafka-cluster:AlterTopic |
授予更改集群上主题的权限,相当于 Apache Kafka 的 ALTER TOPIC ACL。 |
|
topic | 是 |
kafka-cluster:DeleteTopic |
授予删除集群上主题的权限,相当于 Apache Kafka 的 DELETE TOPIC ACL。 |
|
topic | 是 |
kafka-cluster:DescribeTopicDynamicConfiguration |
授予描述集群上的主题动态配置的权限,相当于 Apache Kafka 的 DESCRIBE_CONFIGS TOPIC ACL |
|
topic | 是 |
kafka-cluster:AlterTopicDynamicConfiguration |
授予更改集群上主题的动态配置的权限,相当于 Apache Kafka 的 ALTER_CONFIGS TOPIC ACL |
|
topic | 是 |
kafka-cluster:ReadData |
授予从集群上的主题中读取数据的权限,相当于 Apache Kafka 的 READ TOPIC ACL。 |
|
topic | 是 |
kafka-cluster:WriteData |
授予向集群上的主题写入数据的权限,相当于 Apache Kafka 的 WRITE TOPIC ACL |
|
topic | 是 |
kafka-cluster:DescribeGroup |
授予描述集群上的群组的权限,相当于 Apache Kafka 的 DESCRIBE GROUP ACL。 |
|
group | 是 |
kafka-cluster:AlterGroup |
授予加入集群上群组的权限,相当于 Apache Kafka 的 READ GROUP ACL。 |
|
group | 是 |
kafka-cluster:DeleteGroup |
授予删除集群上的群组的权限,相当于 Apache Kafka 的 DELETE GROUP ACL。 |
|
group | 是 |
kafka-cluster:DescribeTransactionalId |
授予描述集群上的事务 ID 的权限,相当于 Apache Kafka 的 DESCRIBE TRANSACTIONAL_ID ACL |
|
交易编号 | 是 |
kafka-cluster:AlterTransactionalId |
授予更改集群上事务 ID 的权限,相当于 Apache Kafka 的 WRITE TRANSACTIONAL_ID ACL |
|
交易编号 | 是 |
您可以在冒号后面的操作中多次使用星号 (*) 通配符。示例如下。
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 或描述集群
| 资源 | 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。但是,已删除的集群无法访问。
常见用例
下表中的第一列显示了一些常见用例。要授权客户端执行给定用例,请在客户端的授权策略中包含该用例所需的操作,然后设置Effect到Allow.
有关属于 Amazon MSK 的 IAM 访问控制的所有操作的信息,请参阅动作和资源的语义.
默认情况下,操作将被拒绝。您必须明确允许您要授权客户端执行的每项操作。
| 使用案例 | 所需的操作 |
|---|---|
| 管理员 |
|
| 创建主题 |
|
| 生成数据 |
|
| 消耗数据 |
|
| 以等效方式生成数据 |
|
| 以交易方式生成数据 |
|
| 描述集群的配置 |
|
| 更新集群的配置 |
|
| 描述主题的配置 |
|
| 更新主题的配置 |
|
| 更改主题 |
|