【发布时间】:2020-04-25 20:03:44
【问题描述】:
我们正在尝试使用 EKS 集群设置日志记录。我们目前正在运行具有单个 EC2 实例的集群。 AWS 提供了 kubectl commands 创建必要的 kubernetes 配置。
将其应用于我们现有的 EKS 设置时,我们无法正确定义有权写入 CloudWatch 的实例角色。
cloudwatch 代理在其 pod 日志中显示这些错误:
2020-01-07T10:20:14Z E! CreateLogStream / CreateLogGroup with log group name /aws/containerinsights/eks-test-EKS/performance stream name ip-10-0-2-156.eu-central-1.compute.internal has errors. Will retry the request: AccessDeniedException: User: arn:aws:sts::662458865874:assumed-role/eks-test-ekstestEKSDefaultCapacityInstanceRole9446-7MD87BB2AA51/i-01e94e054f3c34383 is not authorized to perform: logs:CreateLogStream on resource: arn:aws:logs:eu-central-1:662458865874:log-group:/aws/containerinsights/eks-test-EKS/performance:log-stream:ip-10-0-2-156.eu-central-1.compute.internal
status code: 400, request id: 645166c7-34fb-4616-9f27-830986e27469
在我看来,CDK 在没有写入 CloudWatch 权限的情况下创建了这个 cloudformation IAM 实例角色:
ekstestEKSDefaultCapacityInstanceRole9446FBA6:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Action: sts:AssumeRole
Effect: Allow
Principal:
Service: ec2.amazonaws.com
Version: "2012-10-17"
ManagedPolicyArns:
- Fn::Join:
- ""
- - "arn:"
- Ref: AWS::Partition
- :iam::aws:policy/AmazonEKSWorkerNodePolicy
- Fn::Join:
- ""
- - "arn:"
- Ref: AWS::Partition
- :iam::aws:policy/AmazonEKS_CNI_Policy
- Fn::Join:
- ""
- - "arn:"
- Ref: AWS::Partition
- :iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
Tags:
- Key: Name
Value: eks-test/eks-test-EKS/DefaultCapacity
- Key:
Fn::Join:
- ""
- - kubernetes.io/cluster/
- Ref: ekstestEKSBA2E781A
Value: owned
Metadata:
aws:cdk:path: eks-test/eks-test-EKS/DefaultCapacity/InstanceRole/Resource
AWS 还提到应该"check the IAM role",但问题是我不知道如何修改它。
在 EKS 集群结构中,我可以设置一个集群角色,但这不一样,并且实例角色仍然是在缺少权限的情况下创建的。
是否有其他 CDK 方法我可以修改实例角色或解决方法(如果没有)?
更新: 我已经从an issue on CDK's github page 链接回这个问题。有人提到了即将推出的服务帐户功能的 IAM 角色,但我想知道“常规”IAM 角色映射到 kubernetes 角色是否是这里的方法......
更新: 该角色似乎是根据CDK code 基于 AutoScalingGroup 创建的。我认为这可以被覆盖以添加不同的角色...
【问题讨论】:
-
尝试添加
.addToRolePolicy(new PolicyStatement({ effect: Effect.ALLOW, resources: ['*'], actions: ['*'] }))仅供测试:这将为 EKS 添加管理员权限, -
@AmitBaranes 这似乎是 lambdas 的函数,但我正在尝试更改/创建 EKS 集群下的 EC2 实例的角色。
标签: amazon-cloudformation aws-cdk amazon-eks