kubernetes - K8S 上的扫雪机收集器不使用服务帐户
问题描述
似乎我们无法让 Snowplow 容器(snowplow/scala-stream-collector-kinesis)使用我们提供的服务帐户。它始终使用shared-eks-node-role
但不使用提供的服务帐户。配置都设置default
为.accessKey
secretKey
这是我们使用的服务帐户部分:
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)
解决方案
收集器本身不进行任何角色交换。它只关心通过以下三种方法之一接收凭据:
- 默认的信用提供者链
- 特定的 IAM 角色
- 环境变量。
最流行的部署是在 EC2 实例上,在这种情况下,默认 EC2 角色可用于访问账户中的其他资源。
看起来当您在 EKS 上部署它时,事情并不那么简单。收集器似乎使用这个假定的角色:arn:aws:sts::123:assumed-role/shared-eks-node-role/i-123
但它没有获得 Kinesis 权限。你知道是什么过程创造了这个角色吗?也许您可以在那里添加缺少的 Kinesis 策略?
推荐阅读
- python - 编写一个程序,每隔一个写入前 100 个斐波那契数。(Python)
- kubernetes - Ingress 资源部署
- javascript - dispatchEvent如何同步执行addEventListener的handler?
- c - Windows 服务无法访问 UNC 路径上的文件 (redux)
- powershell - 使用 Powershell 的 Sharepoint 签入文档
- c# - Tilemaps.SetTile 方法仅在 Update() 方法中部分工作
- python - 可以在使用点而不是文件顶部导入依赖项吗?
- css - CSS Calc 根据当前 z-index 值设置新的 z-index 值
- node.js - MongoDB 重新计算计算数据的最佳实践
- javascript - Tone JS - Transport.stop(); 不适用于预定事件