Amazon cloudformation 如何使用CDK修改EKS的默认容量实例角色?

Amazon cloudformation 如何使用CDK修改EKS的默认容量实例角色?,amazon-cloudformation,aws-cdk,amazon-eks,Amazon Cloudformation,Aws Cdk,Amazon Eks,我们正在尝试使用EKS群集设置日志记录。我们当前运行的集群只有一个EC2实例。AWS提供了创建必要的kubernetes配置的工具 将此应用于现有EKS设置时,我们无法正确定义具有写入CloudWatch权限的实例角色 cloudwatch代理在其pod日志中显示以下错误: 2020-01-07T10:20:14Z E! CreateLogStream / CreateLogGroup with log group name /aws/containerinsights/eks-test-EKS

我们正在尝试使用EKS群集设置日志记录。我们当前运行的集群只有一个EC2实例。AWS提供了创建必要的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也提到应该这样做,但问题是我不知道如何修改它

在EKS集群构造中,我可以设置集群角色,但这不相同,创建实例角色时仍然缺少权限

是否有其他CDK方法可以修改实例角色或解决方案(如果没有)

更新: 我已从链接回这个问题。有人提到即将推出的IAM服务帐户角色功能,但我想知道“常规”IAM角色映射到kubernetes角色是否是一种方法

更新:
该角色似乎是根据自动缩放组创建的。我假设这可以被覆盖以添加不同的角色…

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

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

尝试添加
.addToRolePolicy(新的PolicyStatement({effect:effect.ALLOW,resources:['*'],actions:['*']}))
仅用于测试:这将添加EKS的管理员权限,@AmitBaranes这似乎是lambdas的一个函数,但我正在尝试更改/创建EKS集群下的EC2实例的角色。