首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS MSK IAM -认证失败访问拒绝Spring

AWS MSK IAM -认证失败访问拒绝Spring
EN

Stack Overflow用户
提问于 2022-11-11 19:08:34
回答 1查看 158关注 0票数 0

我在AWS EKS POD上部署了一个spring引导应用程序,并提供了带有IAM身份验证的AWS MSK,它们都在相同的VPC下,角色已经配置,在MSK入站规则中,端口9098也被添加了。

为了测试EKS和MSK之间的连接性,我确实使用了代理名称和端口9098来测试telnet,它也成功地连接到了在ek pod中运行的spring引导应用程序,它给出了以下错误:

代码语言:javascript
复制
org.springframework.kafka.KafkaException: Send failed;nested exception in org.apache.kafka.common.errors. SaslAuthenticationException: [63a192cc-599-43e-bfe8-bc880e50c2e1]: Access Denied


org.apache. kafka.clients.Networkclient: [Producer clientId=producer-1] Connection to node -3 b-3.xxxx.xxxx.amazonaws.com/10.7.2.1:9098) failed authentication due to: [63a192cc-599-43e-bfe8-bc880e50

在IAM中创建了一个角色,将其附加到EKS吊舱,并分配了以下政策:

代码语言:javascript
复制
{
    "version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowMskAccessCluster",
            "Effect": "Allow",
            "Action": [
                "kafka:ListScramSecrets",
                "kafka:GetBootstrapBrokers",
                "kafka:DescribeCluster",
                "kafka-cluster:DescribeCluster",
                "kafka-cluster:Connect",
                "kafka-cluster:AlterCluster",
            ],
            "Resource": "AWS_EKS_CLUSTER_ARN"
        },
        {
            "Sid": "AllowMskAccessTopic",
            "Effect": "Allow",
            "Action": [
                "kakfa-cluster:DescribeTopicDynamicConfiguration",
                "kakfa-cluster:DescribeTopic",
                "kakfa-cluster:DeleteTopic",
                "kakfa-cluster:CreateTopic",
                "kakfa-cluster:AlterTopicDynamicConfiguration",
                "kakfa-cluster:AlterTopic",
            ],
            "Resource": [
                "arn:AWS_EKS_CLUSTER_ARN/*",
                "*"
            ]
        },
        {
            "Sid": "AllowMskAccessGroup",
            "Effect": "Allow",
            "Action": [
                    "kafka-cluster:DescribeCluster",
                    "kafka-cluster:DeleteGroup",
                    "kafka-cluster:AlterGroup",
            ],
            "Resource": "AWS_EKS_CLUSTER_ARN/*"
        }
    ]
}
{
    "version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowMskAccessCluster",
            "Effect": "Allow",
            "Action": [
                "kafka:ListScramSecrets",
                "kafka:GetBootstrapBrokers",
                "kafka:DescribeCluster",
                "kafka-cluster:WriteDataIdempotently",
                "kafka-cluster:Connect",
            ],
            "Resource": "AWS_EKS_CLUSTER_ARN"
        },
        {
            "Sid": "AllowMskAccessTopic",
            "Effect": "Allow",
            "Action": [
                "kakfa-cluster:WriteData",
                "kakfa-cluster:DescribeTransactionalId",
                "kakfa-cluster:DescribeTopic",
                "kakfa-cluster:AlterTransactionalId",
            ],
            "Resource":"*"
        },
        {
            "Sid": "AllowMskAccessGroup",
            "Effect": "Allow",
            "Action": "kakfa-cluster":DescribeGroup,
            "Resource": "AWS_EKS_CLUSTER_ARN/*"
        }
    ]
}
{
    "version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowMskAccessCluster",
            "Effect": "Allow",
            "Action": [
                "kafka:ListScramSecrets",
                "kafka:GetBootstrapBrokers",
                "kafka:DescribeCluster",
                "kafka-cluster:Connect",
            ],
            "Resource": "AWS_EKS_CLUSTER_ARN"
        },
        {
            "Sid": "AllowMskAccessTopic",
            "Effect": "Allow",
            "Action": [
                "kakfa-cluster:ReadData",
                "kakfa-cluster:DescribeTopic",
            ],
            "Resource": "*"
            
        },
        {
            "Sid": "AllowMskAccessGroup",
            "Effect": "Allow",
            "Action": [
                    "kafka-cluster:DescribeGroup",
                    "kafka-cluster:AlterGroup",
            ],
            "Resource": "AWS_EKS_CLUSTER_ARN/*"
        }
    ]
}

我的春季启动卡夫卡配置:

代码语言:javascript
复制
ssl.truststore.location=path to trust 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

我在我的spring应用程序中使用这个依赖项:

代码语言:javascript
复制
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>sts</artifactId>
    <version>2.16.13</version>
</dependency>
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>apache-client</artifactId>
    <version>2.16.13</version>
</dependency>
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.13</artifactId>
    <version>3.0.1</version>
</dependency>

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
    <groupId>software.amazon.msk</groupId>
    <artifactId>aws-msk-iam-auth</artifactId>
    <version>1.0.0</version>
</dependency>
EN

回答 1

Stack Overflow用户

发布于 2022-11-16 03:06:18

我很乐意提供更多的帮助,但这个政策有点难以验证。

有些操作没有正确的资源,您列出了许多应该使用MSK的kafka:*kafka-cluster:*的EKS,等等。

有一些语法问题,如

"Action": "kakfa-cluster":DescribeGroup,

如果这些只是打字,它应该足够编辑您的帐户号码在政策,但其余的可以代替你,这样我们就可以看到尽可能多的真正的政策。它只是不像现在这样有用的r3al。

  1. 是否尝试过在此策略上运行IAM策略模拟器,并使用它来模拟集群的ARN上的kafka-cluster:Connect操作?它应该告诉您您的策略是否允许您访问。

  1. ,你是否尝试过从一项允许全面访问的政策开始?如果你可以通过一个非常宽松的政策,收紧它,直到它再次打破,以确定问题。例如,一个具有单一语句的策略,它为您提供对任何资源的MSK的所有权限。我将再次用策略模拟器测试这是否存在任何验证问题,并且它确实为您提供了访问权限。如果它在那里工作,但没有EKS,那么您可能不会使用您认为可以访问此策略的角色。

代码语言:javascript
复制
        {
            "Sid": "MSKAllowAllNotProductionReady",
            "Effect": "Allow",
            "Action": [
                    "kafka:*",
                    "kafka-cluster:*",
            ],
            "Resource": "*"
        }

希望这能有所帮助。如果没有,你可以提供一个清理版本的策略,屏幕截图的策略模拟器显示它可以访问,或其他信息,我可以再看看。你能行的!

编辑:

我注意到您正在使用库的1.0.0。在早期版本中存在一个问题,库缺少依赖项。这一点在1.1.0中得到了修正。在最新版本中还有许多其他性能、错误和安全修复。我建议你最近再试一次。我上面的评论仍然适用,也会导致类似的错误。你所分享的政策在我看来是置之不理的。

请参阅https://github.com/aws/aws-msk-iam-auth/pull/18/fileshttps://github.com/aws/aws-msk-iam-auth/compare/1.0.0...1.1.0查找提交消息“将sts模块添加到实现依赖项”。在这里您可以看到com.amazonaws:作为对Graddle包的依赖添加。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74407121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档