首页 > 解决方案 > K8S 上的扫雪机收集器不使用服务帐户

问题描述

似乎我们无法让 Snowplow 容器(snowplow/scala-stream-collector-kinesis)使用我们提供的服务帐户。它始终使用shared-eks-node-role但不使用提供的服务帐户。配置都设置default为.accessKeysecretKey

这是我们使用的服务帐户部分:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: thijs-service-account
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123:role/thijs-eks-service-account-role-snowplow

当我检查 pod 时,我可以看到该帐户:

AWS_ROLE_ARN:                 arn:aws:iam::123:role/thijs-eks-service-account-role-snowplow

然后错误显示不正确的帐户。

Exception in thread "main" com.amazonaws.services.kinesis.model.AmazonKinesisException: User: arn:aws:sts::123:assumed-role/shared-eks-node-role/i-123 is not authorized to perform: kinesis:DescribeStream on resource: arn:aws:kinesis:eu-west-1:123:stream/snowplow-good (Service: AmazonKinesis; Status Code: 400; Error Code: AccessDeniedException; Request ID: 123-123-123; Proxy: null)

标签: kubernetessnowplow

解决方案


收集器本身不进行任何角色交换。它只关心通过以下三种方法之一接收凭据:

  • 默认的信用提供者链
  • 特定的 IAM 角色
  • 环境变量。

最流行的部署是在 EC2 实例上,在这种情况下,默认 EC2 角色可用于访问账户中的其他资源。

看起来当您在 EKS 上部署它时,事情并不那么简单。收集器似乎使用这个假定的角色:arn:aws:sts::123:assumed-role/shared-eks-node-role/i-123但它没有获得 Kinesis 权限。你知道是什么过程创造了这个角色吗?也许您可以在那里添加缺少的 Kinesis 策略?


推荐阅读