【问题标题】:How to modify the default capacity instance role for EKS using CDK?如何使用 CDK 修改 EKS 的默认容量实例角色?
【发布时间】: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


【解决方案1】:

在DefaultCapacity上创建集群后可以设置策略

const cluster = new Cluster(this, name, clusterProps);
cluster.defaultCapacity?.role.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('CloudWatchFullAccess'));

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 2022-06-10
    • 2020-05-03
    • 2016-02-01
    • 2016-08-26
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多