Kafka 配额是多租户 Kafka 集群不可或缺的一部分。 它们可以防止 Kafka 集群性能因行为不当的应用程序过度消耗集群资源而受到负面影响。 此外,它们使中央流数据平台能够作为多租户平台运行,并由跨多个业务线的下游和上游应用程序使用。 Kafka 支持两种类型的配额: 网络带宽配额 和 请求率配额。 网络带宽配额定义字节率阈值,例如客户端应用程序可以向 Kafka 集群中的每个单独代理生成和消耗多少数据(以每秒字节数为单位)。 请求率配额限制每个代理处理客户端应用程序请求所花费的时间百分比。 根据您的配置,可以为特定用户、特定客户端 ID 或两者设置 Kafka 配额。
In 部分1 在这个由两部分组成的系列中,我们讨论了如何在 适用于Apache Kafka的Amazon托管流 (Amazon MSK) 使用时集群 AWS身份和访问管理 (IAM) 访问控制。
在这篇文章中,我们将引导您逐步实施在 MSK 集群中设置 Kafka 配额,同时使用 IAM 访问控制并通过示例客户端应用程序对其进行测试。
解决方案概述
下图,我们首先介绍的 部分1,说明了 Kafka 客户端应用程序如何(ProducerApp-1
, ConsumerApp-1
及 ConsumerApp-2
) 使用权 Topic-B
通过承担写入和读取 IAM 角色在 MSK 集群中。 每个生产者和消费者客户端应用程序都有一个配额,用于确定它们每秒可以生成或消耗多少数据(以字节/秒为单位)。 这 ProducerApp-1
配额允许每个代理每秒生成高达 1024 字节的数据。 同样, ConsumerApp-1
和 ConsumerApp-2
配额允许每个代理分别每秒消耗 5120 和 1024 字节。 下面对架构图中所示的流程进行简单说明:
- P1 –
ProducerApp-1
(通过其ProducerApp-1-Role
IAM 角色)承担Topic-B-Write-Role
向其发送消息的 IAM 角色Topic-B
- P2 - 随着
Topic-B-Write-Role
IAM角色承担,ProducerApp-1
开始向Topic-B
- C1 –
ConsumerApp-1
(通过其ConsumerApp-1-Role
IAM 角色)和ConsumerApp-2
(通过其ConsumerApp-2-Role
IAM 角色)承担Topic-B-Read-Role
从中读取消息的 IAM 角色Topic-B
- C2 - 随着
Topic-B-Read-Role
IAM角色承担,ConsumerApp-1
和ConsumerApp-2
开始消费消息Topic-B
请注意,这篇文章使用 AWS命令行界面 (AWS CLI), AWS CloudFormation 模板,以及 AWS管理控制台 用于配置和修改 AWS 资源,配置的资源将记入您的 AWS 账户。
高级步骤如下:
- 为 MSK 集群配置 IAM 访问控制和 亚马逊弹性计算云 用于客户端应用程序的 (Amazon EC2) 实例。
- 创建
Topic-B
在 MSK 集群上。 - 创建 IAM 角色以供客户端应用程序访问
Topic-B
. - 运行生产者和消费者应用程序而不设置配额。
- 配置客户端应用程序的生产和消耗配额。
- 设置配额后重新运行应用程序。
先决条件
建议您阅读 部分1 在继续本系列之前。 为了开始使用,您需要具备以下条件:
- 在本文中将称为演示账户的 AWS 账户,假设其账户 ID 为
1111 1111 1111
- 在演示账户中创建、删除和修改 AWS 资源的权限
使用 IAM 访问控制和 EC2 实例配置 MSK 集群
此步骤涉及在演示账户的 VPC 中配置具有 IAM 访问控制的 MSK 集群。 此外,我们创建了四个 EC2 实例来对 MSK 集群以及主机生产者和消费者客户端应用程序进行配置更改。
部署 CloudFormation 堆栈
- 克隆 GitHub存储库 下载 CloudFormation 模板文件和示例客户端应用程序:
- 在AWS CloudFormation控制台上,选择 堆栈 在导航窗格中。
- 创建堆栈.
- 针对 准备模板, 选择 模板已准备就绪.
- 针对 模板来源, 选择 上载模板文件.
- 上载
cfn-msk-stack-1.yaml
来自的文件amazon-msk-kafka-quotas/cfn-templates
目录,然后选择 下一页. - 针对 堆栈名称,输入
MSKStack
. - 将参数保留为默认值并选择 下一页.
- 滚动到底部 配置堆栈选项 页面并选择 下一页 继续。
- 滚动到底部 评论 页面,选中复选框 我承认 CloudFormation 可能会创建 IAM 资源,并选择 提交.
堆栈完成大约需要 30 分钟。 堆栈创建成功后,将创建以下资源:
- 具有 XNUMX 个私有子网和 XNUMX 个公有子网的 VPC
- 具有三个启用了 IAM 访问控制的代理的 MSK 集群
- 一个名为的 EC2 实例
MSKAdminInstance
用于修改 MSK 集群设置以及创建和修改 AWS 资源 - EC2 实例
ProducerApp-1
,ConsumerApp-1
及ConsumerApp-2
, 每个客户端应用程序一个 - 托管客户端应用程序的每个 EC2 实例都有一个单独的 IAM 角色,如架构图所示
- 从堆栈的 输出 选项卡,注意
MSKClusterArn
计算值。
在 MSK 集群上创建主题
创造 Topic-B
在 MSK 集群上,完成以下步骤:
- 在 Amazon EC2 控制台上,导航到正在运行的 EC2 实例的列表。
- 点击
MSKAdminInstance
EC2实例并选择 分享链接. - 点击 会话管理器 标签,选择 分享链接.
- 在浏览器中打开的新选项卡上运行以下命令:
- 将环境变量设置为指向 MSK 集群代理 IAM 端点:
- 记下 的值
BOOTSTRAP_BROKERS_IAM
. - 运行以下 Kafka CLI 命令来创建
Topic-B
在 MSK 集群上:
由于 MSK 集群配置了 IAM 访问控制,因此该选项 --command-config
点 config_iam.properties
,其中包含 IAM 访问控制所需的属性,由 MSKStack
CloudFormation 堆栈。
运行Kafka CLI命令时可能会出现以下警告,但您可以忽略它们:
- 为了验证
Topic-B
已创建,列出所有主题:
为客户端应用程序创建 IAM 角色以访问主题 B
此步骤涉及创建 Topic-B-Write-Role
和 Topic-B-Read-Role
如架构图所示。 Topic-B-Write-Role
启用写操作 Topic-B
,并且可以假设为 ProducerApp-1
。 以类似的方式, ConsumerApp-1
和 ConsumerApp-2
可以假设 Topic-B-Read-Role
执行读操作 Topic-B
。 执行读操作 Topic-B
, ConsumerApp-1
和 ConsumerApp-2
还必须属于期间指定的消费者群体 MSKStack
后续步骤中的堆栈更新。
通过以下步骤创建角色:
- 在AWS CloudFormation控制台上,选择 堆栈 在导航窗格中。
- 选择
MSKStack
并选择 更新. - 针对 准备模板,选择替换当前模板。
- 针对 模板来源, 选择 上载模板文件.
- 上载
cfn-msk-stack-2.yaml
来自的文件amazon-msk-kafka-quotas/cfn-templates
目录,然后选择 下一页. - 提供以下附加堆栈参数:
-
- 针对 主题 B ARN, 输入
Topic-B
核糖核酸。
- 针对 主题 B ARN, 输入
ARN 的格式必须为 arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
。 使用您之前记下的 MSK 集群 ARN 中的集群名称和集群 UUID,并提供您的 AWS 区域。 欲了解更多信息,请参阅 Amazon MSK 的 IAM 访问控制.
-
- 针对 ConsumerApp-1 消费者组名称,输入
ConsumerApp-1
消费者组 ARN。
- 针对 ConsumerApp-1 消费者组名称,输入
它的格式必须为 arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- 针对 ConsumerApp-2 消费者组名称,输入
ConsumerApp-2
消费者组 ARN。
- 针对 ConsumerApp-2 消费者组名称,输入
使用与之前的 ARN 类似的格式。
- 下一页 继续。
- 滚动到底部 配置堆栈 选项页面并选择 下一页 继续。
- 滚动到底部 评论 页面,选中复选框 我承认 CloudFormation 可能会创建 IAM 资源,并选择 更新堆栈.
堆栈更新大约需要 3 分钟。 堆栈成功更新后,将创建以下资源:
- 主题 B 写入角色 – 有权执行写入操作的 IAM 角色
Topic-B
。 其信托政策允许ProducerApp-1-Role
承担它的 IAM 角色。 - 主题 B 读取角色 – 有权执行读取操作的 IAM 角色
Topic-B
。 其信托政策允许ConsumerApp-1-Role
和ConsumerApp-2-Role
承担它的 IAM 角色。 此外,ConsumerApp-1
和ConsumerApp-2
还必须属于您在更新堆栈以执行读取操作时指定的消费者组Topic-B
.
- 从堆栈的 输出 选项卡,注意
TopicBReadRoleARN
和TopicBWriteRoleARN
值。
在不设置配额的情况下运行生产者和消费者应用程序
在这里,我们运行 ProducerApp-1
, ConsumerApp-1
及 ConsumerApp-2
而不设定配额。 从前面的步骤中,您将需要 BOOTSTRAP_BROKERS_IAM
值, Topic-B-Write-Role
ARN,和 Topic-B-Read-Role
ARN。 客户端应用程序的源代码及其打包版本可在 GitHub存储库.
运行 ConsumerApp-1 应用程序
运行 ConsumerApp-1
申请,完成以下步骤:
- 在 Amazon EC2 控制台上,选择
ConsumerApp-1
EC2实例并选择 分享链接. - 点击 会话管理器 标签,选择 分享链接.
- 在浏览器中打开的新选项卡上运行以下命令:
- 运行
ConsumerApp-1
应用程序开始消费消息Topic-B
:
你可以找到 源代码 GitHub 上供您参考。 命令行参数详细信息如下:
- –引导服务器 – MSK 集群引导代理 IAM 端点。
- –承担角色-arn –
Topic-B-Read-Role
IAM 角色 ARN。 承担起这个角色,ConsumerApp-1
将读取该主题的消息。 - -地区 – 您正在使用的区域。
- –主题名称 – 主题名称来自
ConsumerApp-1
会读取消息。 默认为Topic-B
. - –消费者组 – 消费者组名称
ConsumerApp-1
,如堆栈更新期间指定的那样。 - –角色会话名称 –
ConsumerApp-1
假设Topic-B-Read-Role
使用 AWS安全令牌服务 (AWS STS) 软件开发工具包。ConsumerApp-1
调用时将使用此角色会话名称assumeRole
功能。 - – 客户端 ID – 客户端 ID
ConsumerApp-1
. - –打印消费者配额指标 – 指示是否应在终端上打印客户端指标的标志
ConsumerApp-1
. - –cw-维度名称 – 亚马逊CloudWatch 将用于发布客户端限制指标的维度名称
ConsumerApp-1
. - –cw-维度值 – CloudWatch 维度值,将用于发布客户端限制指标
ConsumerApp-1
. - –cw-命名空间 – 命名空间在哪里
ConsumerApp-1
将发布 CloudWatch 指标以监控限制。
- 如果您对其余参数感到满意,请使用以下命令并更改
--assume-role-arn
和--region
根据您的环境:
fetch-throttle-time-avg
和 fetch-throttle-time-max
客户端指标应显示 0.0,表示没有发生限制 ConsumerApp-1
。 请记住,我们还没有设置消耗配额 ConsumerApp-1
然而。 让它运行一段时间。
运行 ConsumerApp-2 应用程序
运行 ConsumerApp-2
申请,完成以下步骤:
- 在 Amazon EC2 控制台上,选择
ConsumerApp-2
EC2实例并选择 分享链接. - 点击 会话管理器 标签,选择 分享链接.
- 在浏览器中打开的新选项卡上运行以下命令:
- 运行
ConsumerApp-2
应用程序开始消费消息Topic-B
:
该代码具有类似的命令行参数详细信息 ConsumerApp-1
前面已讨论过,但以下内容除外:
- –消费者组 – 消费者组名称
ConsumerApp-2
,如堆栈更新期间指定的那样。 - –角色会话名称 –
ConsumerApp-2
假设Topic-B-Read-Role
使用 AWS STS 开发工具包。ConsumerApp-2
调用时将使用此角色会话名称assumeRole
功能。 - – 客户端 ID – 客户端 ID
ConsumerApp-2
.
- 如果您对其余参数感到满意,请使用以下命令并更改
--assume-role-arn
和--region
根据您的环境:
fetch-throttle-time-avg
和 fetch-throttle-time-max
客户端指标应显示 0.0,表示没有发生限制 ConsumerApp-2
。 请记住,我们还没有设置消耗配额 ConsumerApp-2
然而。 让它运行一段时间。
运行 ProducerApp-1 应用程序
运行 ProducerApp-1
申请,完成以下步骤:
- 在 Amazon EC2 控制台上,选择
ProducerApp-1
EC2实例并选择 分享链接. - 点击 会话管理器 标签,选择 分享链接.
- 在浏览器中打开的新选项卡上运行以下命令:
- 运行
ProducerApp-1
应用程序开始发送消息到Topic-B
:
你可以找到 源代码 GitHub 上供您参考。 命令行参数详细信息如下:
- –引导服务器 – MSK 集群引导代理 IAM 端点。
- –承担角色-arn –
Topic-B-Write-Role
IAM 角色 ARN。 承担起这个角色,ProducerApp-1
将向该主题写入消息。 - –主题名称 –
ProducerApp-1
将向该主题发送消息。 默认为Topic-B
. - -地区 – 您正在使用的 AWS 区域。
- –消息数 – 消息数量
ProducerApp-1
应用程序将发送到该主题。 - –角色会话名称 –
ProducerApp-1
假设Topic-B-Write-Role
使用 AWS STS 开发工具包。ProducerApp-1
调用时将使用此角色会话名称assumeRole
功能。 - – 客户端 ID – 客户 ID
ProducerApp-1
. - –生产者类型 –
ProducerApp-1
可以运行 同步地 or 异步. 选项是 同步 or 异步. - –印刷生产商配额指标 – 指示是否应在终端上打印客户端指标的标志 ProducerApp-1.
- –cw-维度名称 – 将用于发布客户端限制指标的 CloudWatch 维度名称 ProducerApp-1.
- –cw-维度值 – CloudWatch 维度值,将用于发布客户端限制指标 ProducerApp-1.
- –cw-命名空间 – 命名空间所在 ProducerApp-1 将发布 CloudWatch 指标以监控限制。
- 如果您对其余参数感到满意,请使用以下命令并更改
--assume-role-arn
和--region
根据您的环境。 要运行同步 Kafka 生产者,它使用以下选项--producer-type sync
:
或者,使用 --producer-type async
运行异步生产者。 欲了解更多详情,请参阅 异步发送.
produce-throttle-time-avg
和 produce-throttle-time-max
客户端指标应显示 0.0,表示没有发生限制 ProducerApp-1
。 请记住,我们还没有设定生产配额 ProducerApp-1
然而。 检查一下 ConsumerApp-1
和 ConsumerApp-2
可以使用消息并注意它们没有受到限制。 通过按停止消费者和生产者客户端应用程序 按Ctrl + C 在各自的浏览器选项卡中。
设置客户端应用程序的生产和消耗配额
现在我们已经在没有配额的情况下运行了生产者和消费者应用程序,我们设置了它们的配额并重新运行它们。
打开 会议经理 终端为 MSKAdminInstance
如前所述的 EC2 实例,并运行以下命令来查找 MSK 集群中代理之一的默认配置。 MSK 集群使用默认的 Kafka 配额配置进行配置。
以下屏幕截图显示了 Broker-1
默认值 quota.consumer.default
和 quota.producer.default
.
ProducerApp-1配额配置
将本节中所有命令中的占位符替换为与您的帐户对应的值。
根据前面讨论的架构图,设置 ProducerApp-1
产生配额为 1024 字节/秒。 为了 <ProducerApp-1 Client Id>
和 <ProducerApp-1 Role Session>
,确保使用与运行时使用的相同的值 ProducerApp-1
早些时候(producerapp-1-client-id
和 producerapp-1-role-session
, 分别):
验证 ProducerApp-1
使用以下命令生成配额:
您可以删除 ProducerApp-1
使用以下命令生成配额,但是 不要运行命令 因为我们接下来将测试配额。
ConsumerApp-1配额配置
将本节中所有命令中的占位符替换为与您的帐户对应的值。
让我们将消耗配额设置为 5120 字节/秒 ConsumerApp-1
。 对于 <ConsumerApp-1 Client Id>
和 <ConsumerApp-1 Role Session>
,确保使用与运行时使用的相同的值 ConsumerApp-1
早些时候(consumerapp-1-client-id
和 consumerapp-1-role-session
, 分别):
kafka-configs.sh --bootstrap-server $BOOTSTRAP_BROKERS_IAM --command-config config_iam.properties --alter --add-config 'consumer_byte_rate=5120' --entity-type clients --entity-name <ConsumerApp-1 Client Id> --entity-type users --entity-name arn:aws:sts::<AWS Account Id>:assumed-role/MSKStack-TopicBReadRole-xxxxxxxxxxx/<ConsumerApp-1 Role Session>
验证 ConsumerApp-1
使用以下命令消耗配额:
您可以删除 ConsumerApp-1
使用以下命令消耗配额,但是 不要运行命令 因为我们接下来将测试配额。
ConsumerApp-2配额配置
将本节中所有命令中的占位符替换为与您的帐户对应的值。
让我们将消耗配额设置为 1024 字节/秒 ConsumerApp-2
。 对于 <ConsumerApp-2 Client Id>
和 <ConsumerApp-2 Role Session>
,确保使用与运行时使用的相同的值 ConsumerApp-2
早些时候(consumerapp-2-client-id
和 consumerapp-2-role-session
, 分别):
验证 ConsumerApp-2
使用以下命令消耗配额:
和...一样 ConsumerApp-1
,您可以删除 ConsumerApp-2
使用相同的命令消耗配额 ConsumerApp-2
客户和用户详细信息。
设置配额后重新运行生产者和消费者应用程序
让我们重新运行应用程序来验证配额的效果。
重新运行 ProducerApp-1
重新运行 ProducerApp-1
in 同步 模式,使用您之前使用的相同命令。 下面的屏幕截图说明了当 ProducerApp-1
达到任何经纪商的配额, produce-throttle-time-avg
和 produce-throttle-time-max client
指标值将高于 0.0。 高于 0.0 的值表示 ProducerApp-1
被节流。 允许 ProducerApp-1
运行几秒钟,然后使用停止它 按Ctrl + C.
您还可以通过重新运行来测试生产配额的效果 ProducerApp-1
再次进入 异步 模式 (--producer-type async
)。 与同步运行类似,下面的屏幕截图说明了当 ProducerApp-1
达到任何经纪商的配额, produce-throttle-time-avg
和 produce-throttle-time-max
客户端指标值将高于 0.0。 高于 0.0 的值表示 ProducerApp-1
被节流。 允许异步 ProducerApp-1
跑一会儿。
你最终会看到一个 TimeoutException
说明 org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
当使用 异步 由于配额的原因,生产者并以高于代理可以接受的速率发送消息,消息将首先在客户端应用程序内存中排队。 如果发送消息的速率持续超过接受消息的速率,客户端最终将耗尽缓冲区空间,从而导致下一个 Producer.send()
呼叫被阻止。 Producer.send()
最终会抛出一个 TimeoutException
如果超时延迟不足以让代理赶上生产者应用程序。 停止 ProducerApp-1
通过使用 按Ctrl + C.
重新运行 ConsumerApp-1
重新运行 ConsumerApp-1
使用您之前使用的相同命令。 下面的屏幕截图说明了当 ConsumerApp-1
达到配额后, fetch-throttle-time-avg
和 fetch-throttle-time-max client
指标值将高于 0.0。 高于 0.0 的值表示 ConsumerApp-1
被节流。
让 ConsumerApp-1
运行几秒钟,然后使用停止它 按Ctrl + C.
重新运行 ConsumerApp-2
重新运行 ConsumerApp-2
使用您之前使用的相同命令。 同样,当 ConsumerApp-2
达到配额后, fetch-throttle-time-avg
和 fetch-throttle-time-max client
指标值将高于 0.0。 上面的值 0.0 表示 ConsumerApp-2
被节流。 允许 ConsumerApp-2
运行几秒钟,然后按停止 按Ctrl + C.
Amazon CloudWatch 中的客户端配额指标
In 部分1,我们解释了客户端指标是连接到 Kafka 集群的客户端公开的指标。 让我们检查一下 CloudWatch 中的客户端指标。
- 在 CloudWatch 控制台上,选择 所有指标.
- 下 自定义命名空间,选择您在运行客户端应用程序时提供的命名空间。
- 选择维度名称并选择
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
及fetch-throttle-time-avg metrics
对于所有应用程序。
这些指标表明了节流行为 ProducerApp-1
, ConsumerApp-1
及 ConsumerApp-2
使用上一节中的配额配置测试的应用程序。 以下截图表明了节流 ProducerApp-1
, ConsumerApp-1
及 ConsumerApp-2
基于网络带宽配额。 ProducerApp-1
, ConsumerApp-1
及 ConsumerApp-2
应用程序将各自的客户端指标提供给 CloudWatch。 您可以找到 源代码 GitHub 上供您参考。
安全客户端 ID 和角色会话名称
我们讨论了如何使用应用程序的配置 Kafka 配额 客户编号 并经过身份验证 用户 主要的。 当客户端应用程序承担 IAM 角色以访问启用了 IAM 身份验证的 MSK 集群上的 Kafka 主题时,其经过身份验证 用户 主体以以下格式表示(更多信息,请参阅 IAM 标识符):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
它包含 角色会话名称 (在这种情况下, producerapp-1-role-session
) 在客户端应用程序中使用,同时通过 AWS STS 开发工具包承担 IAM 角色。 客户端应用程序 源代码 可供您参考。 这 客户编号 是逻辑名称字符串(例如, producerapp-1-client-id
)由应用程序团队在应用程序代码中配置。 因此,如果一个应用程序获得了 客户编号 和 角色会话名称 另一个应用程序的权限,以及它是否有权承担相同的 IAM 角色。
如架构图所示, ConsumerApp-1
和 ConsumerApp-2
是两个独立的客户端应用程序,具有各自的配额分配。 因为两者都有权承担相同的 IAM 角色(Topic-B-Read-Role
)在模拟账户中,他们可以消费来自 Topic-B
。 因此,MSK 集群代理根据它们的不同来区分它们 客户端 ID 和 用户 (其中包含各自的 角色会话名称 值)。 如果 ConsumerApp-2
以某种方式获得 ConsumerApp-1
角色会话名称 和 客户编号,它可以冒充 ConsumerApp-1
通过指定 ConsumerApp-1
角色会话名称 和 客户编号 在应用程序代码中。
假设 ConsumerApp-1
使用 consumerapp-1-client-id
和 consumerapp-1-role-session
其 客户编号 和 角色会话名称, 分别。 所以, ConsumerApp-1's
认证 用户 当它假设 Topic-B-Read-Role
IAM 角色:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
同样, ConsumerApp-2
使用 consumerapp-2-client-id
和 consumerapp-2-role-session
其 客户编号 和 角色会话名称, 分别。 所以, ConsumerApp-2's
认证 用户 当它假设 Topic-B-Read-Role
IAM 角色:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
获得 ConsumerApp-1's
客户编号 和 角色会话名称 并在其应用程序代码中指定它们,MSK 集群代理会将其视为 ConsumerApp-1
并查看其 客户编号 as consumerapp-1-client-id
,以及经过验证的 用户 主要如下:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
这允许 ConsumerApp-2
以每秒 5120 字节的最大速率消耗来自 MSK 集群的数据,而不是按照其原始配额分配每秒 1024 字节。 最后, ConsumerApp-1's
吞吐量将受到负面影响,如果 ConsumerApp-2
同时运行。
增强架构
你可以介绍 AWS机密管理器 和 AWS密钥管理服务 (AWS KMS)在架构中以保护应用程序的安全 客户端 ID 和 角色会话名称。 为了提供更强的治理,应用程序的客户端 ID 和角色会话名称必须作为加密机密存储在 Secrets Manager 中。 与加密密钥和 KMS 客户管理密钥 (CMK) 关联的 IAM 资源策略将允许应用程序仅访问和解密其各自的客户端 ID 和角色会话名称。 这样,应用程序将无法访问彼此的客户端 ID 和角色会话名称并互相模仿。 下图显示了增强的架构。
更新后的流程分为以下几个阶段:
- P1 –
ProducerApp-1
检索其client-id
和role-session-name
来自 Secrets Manager 的秘密 - P2 –
ProducerApp-1
配置秘密client-id
asCLIENT_ID_CONFIG
在应用程序代码中,并假设Topic-B-Write-Role
(通过其ProducerApp-1-Role
IAM角色)通过传递秘密role-session-name
到 AWS STS 开发工具包assumeRole
函数调用 - P3 - 随着
Topic-B-Write-Role
IAM角色承担,ProducerApp-1
开始向Topic-B
- C1 –
ConsumerApp-1
和ConsumerApp-2
检索各自的client-id
和role-session-name
来自 Secrets Manager 的秘密 - C2 –
ConsumerApp-1
和ConsumerApp-2
配置各自的秘密client-id
asCLIENT_ID_CONFIG
在他们的应用程序代码中,并假设Topic-B-Write-Role
(通过ConsumerApp-1-Role
和ConsumerApp-2-Role
分别是 IAM 角色)通过传递其秘密role-session-name
在 AWS STS 开发工具包中assumeRole
函数调用 - C3 - 随着
Topic-B-Read-Role
IAM角色承担,ConsumerApp-1
和ConsumerApp-2
开始消费消息Topic-B
参考文档 AWS机密管理器 和 AWS 知识管理系统 更好地了解它们如何融入架构。
清理资源
导航到 CloudFormation 控制台并删除 MSKStack
堆。 在此帖子期间创建的所有资源都将被删除。
结论
在这篇文章中,我们介绍了配置 Amazon MSK 配额的详细步骤,并通过示例客户端应用程序演示了其效果。 此外,我们还讨论了如何使用客户端指标来确定客户端应用程序是否受到限制。 我们还强调了纯文本客户端 ID 和角色会话名称的潜在问题。 我们建议根据修订后的架构图,使用 Secrets Manager 和 AWS KMS 通过 Amazon MSK 实施 Kafka 配额,以确保零信任架构。
如果您对本文(包括修订后的架构)有反馈或疑问,我们很高兴收到您的来信。 我们希望您喜欢阅读这篇文章。
关于作者
维卡斯·巴杰 是 Amazon Web Services 金融服务解决方案架构师高级经理。 他在金融服务和与数字原生企业合作方面拥有二十多年的经验,为客户提供产品设计、技术路线图和应用程序架构方面的建议。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- EVM财务。 去中心化金融的统一接口。 访问这里。
- 量子传媒集团。 IR/PR 放大。 访问这里。
- 柏拉图爱流。 Web3 数据智能。 知识放大。 访问这里。
- Sumber: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :具有
- :是
- :不是
- :在哪里
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- Able
- 关于
- 以上
- 接受
- 接受
- ACCESS
- 账号管理
- 承认
- 横过
- 加
- 增加
- 额外
- 另外
- 后
- 再次
- 所有类型
- 分配
- 分配
- 让
- 允许
- 还
- Amazon
- Amazon EC2
- 亚马逊网络服务
- an
- 和
- 另一个
- 任何
- 阿帕奇
- 阿帕奇卡夫卡
- 出现
- 应用领域
- 应用领域
- 约
- 架构
- 保健
- AS
- 相关
- 假定
- At
- 认证
- 认证
- 可使用
- AWS
- AWS CloudFormation
- 带宽
- 基于
- BE
- 因为
- 很
- before
- 作为
- 更好
- 封锁
- 引导
- 都
- 半身裙/裤
- 盒子
- 经纪人
- 经纪人
- 浏览器
- 缓冲
- 商业
- 企业
- 但是
- by
- 呼叫
- 被称为
- 调用
- CAN
- 案件
- 喵星人
- 摔角
- 造成
- CD
- 中央
- 更改
- 更改
- 查
- 程
- 客户
- 客户
- 簇
- 码
- 相当常见
- 完成
- 计算
- 概念
- 配置
- 配置
- 连接
- 所以
- 安慰
- 消耗
- 消费者
- 包含
- 继续
- 继续
- 继续
- 控制
- 覆盖
- 创建信息图
- 创建
- 创造
- 电流
- 顾客
- 合作伙伴
- data
- 数据平台
- 几十年
- 解码
- 默认
- 延迟
- 演示
- 证明
- 根据
- 描述
- 描述
- 设计
- 详细
- 详情
- 确定
- 确定
- 尺寸
- 讨论
- 屏 显:
- 区分
- 文件
- 下载
- 两
- ,我们将参加
- 每
- 此前
- 回音
- 效果
- 或
- enable
- 启用
- 使
- 加密
- 端点
- 执行
- 增强
- 确保
- 输入
- 环境
- 故障
- 醚(ETH)
- 终于
- 检查
- 例子
- 超过
- 除
- 体验
- 解释
- 解释
- 出口
- 裸露
- 反馈
- 少数
- 数字
- 文件
- 档
- 金融
- 金融服务
- 找到最适合您的地方
- (名字)
- 适合
- 流
- 以下
- 如下
- 针对
- 格式
- 四
- 止
- 功能
- 此外
- 得到
- 混帐
- GitHub上
- 治理
- 更大的
- 团队
- 组的
- 快乐
- 有
- he
- 听
- 高水平
- 突出
- 抱有希望
- 主持人
- 为了
- 创新中心
- How To
- HTML
- HTTP
- HTTPS
- IAM
- ID
- 身分
- IDS
- if
- 说明
- 图片
- 影响
- 履行
- 实施
- in
- 包含
- 表明
- 表示
- 说明
- 个人
- 信息
- 例
- 积分
- 成
- 介绍
- 介绍
- ISN
- 问题
- IT
- 它的
- 爪哇岛
- JPG
- 卡夫卡
- 键
- 已知
- 极限
- Line
- 线
- 清单
- 合乎逻辑的
- 使
- 管理
- 颠覆性技术
- 经理
- 最多
- 可能..
- 测量
- 内存
- 条未读消息
- 指标
- 分钟
- 时尚
- 修改
- 显示器
- 更多
- MS
- 许多
- 多
- 必须
- 姓名
- 名称
- 导航
- 旅游导航
- 需求
- 负
- 网络
- 全新
- 下页
- 没有
- 注意到
- 注意..
- 数
- 获得
- 发生
- of
- on
- 一
- 仅由
- 打开
- 操作
- 运营
- 附加选项
- 附加选项
- or
- 秩序
- 原版的
- 其他名称
- 输出
- 超过
- συσκευάζονται
- 页
- 面包
- 参数
- 参数
- 部分
- 通过
- 通过
- 径
- 百分比
- 演出
- 性能
- 允许
- 纯文本
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 点
- 点
- 政策
- 政策
- 帖子
- 潜力
- 紧迫
- 防止
- 以前
- 先前
- 校长
- 私立
- 处理
- 生产
- 制片人
- 产品
- 产品设计
- 提供
- 提供
- 国家
- 发布
- 有疑问吗?
- 率
- 宁
- 上游
- 阅读
- 阅读
- 建议
- 建议
- 简称
- 地区
- 纪念
- 去掉
- 更换
- 知识库
- 代表
- 请求
- 要求
- 必须
- 资源
- 资源
- 那些
- 分别
- REST的
- 路线图
- 角色
- 角色
- 运行
- 运行
- s
- 同
- 满意
- 对满意
- 截图
- SDK
- 其次
- 秒
- 秘密
- 部分
- 安全
- 保安
- 安全令牌
- 看到
- 提交
- 发送
- 前辈
- 分开
- 系列
- 特色服务
- 会议
- 集
- 设置
- 设置
- 应该
- 如图
- 作品
- 类似
- 同样
- 自
- 解决方案
- 来源
- 源代码
- 太空
- 具体的
- 指定
- 堆
- 实习
- 开始
- 开始
- 步
- 步骤
- Stop 停止
- 存储
- 流
- 串
- 强
- 子网
- 随后
- 顺利
- 这样
- 足够
- 提供
- 支持
- 采取
- 团队
- 专业技术
- 模板
- 模板
- 终端
- test
- 测试
- 测试
- 比
- 这
- 其
- 他们
- 然后
- 因此
- 他们
- Free Introduction
- 三
- 通过
- 吞吐量
- 次
- 至
- 象征
- 主题
- Topics
- 治疗
- 信任
- 二
- 类型
- 类型
- 理解
- 更新
- 更新
- 更新
- 使用
- 用过的
- 用户
- 用户
- 使用
- 运用
- 折扣值
- 价值观
- 确认
- 通过
- 查看
- 是
- 方法..
- we
- 卷筒纸
- Web服务
- 井
- ,尤其是
- 是否
- 这
- 而
- 将
- 也完全不需要
- 加工
- 写
- 但
- 您
- 您一站式解决方案
- 和风网