Могут ли сотрудники EKS взять на себя существующую роль IAM? - PullRequest
0 голосов
/ 02 апреля 2019

Мы запускаем кластер EKS, который построен на основе программного шаблона Cloudformation. В настоящее время рабочий шаблон близок к https://github.com/awslabs/amazon-eks-ami/blob/master/amazon-eks-nodegroup.yaml,, но у нашего Resources.NodeInstanceRole.ManagedPolicyArns есть некоторые дополнительные пользовательские политики.

Вместо того, чтобы добавлять управляемые политики в этот список, мы хотели бы создать роль IAM с любыми прикрепленными политиками, а затем позволить работникам EKS взять на себя эту роль. Проблема в том, что мы не можем найти способ сделать это в шаблоне Cloudformation.

Ниже следует то, что я считаю соответствующей частью шаблона:

  NodeInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Path: "/"
      Roles:
        - !Ref NodeInstanceRole

  NodeInstanceRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      Path: "/"
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly

Вместо создания нового IAM :: Role (NodeInstanceRole), я думаю, должен быть способ ссылки на ARN существующей роли в NodeInstanceProfile. Попытка изменить NodeInstanceProfile следующим образом приводит к следующей ошибке:

  NodeInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Path: "/"
      Roles:
        - "arn:aws:iam::xxx:role/yyy"
The specified value for roleName is invalid. It must contain only alphanumeric characters and/or the following: +=,.@_- (Service: AmazonIdentityManagement; Status Code: 400; Error Code: ValidationError; Request ID: xxx)

1 Ответ

1 голос
/ 04 апреля 2019

Как оказалось, решение было очень простым: NodeInstanceProfile ожидает имена ролей, а не ARN. Таким образом, в окончательной версии шаблона Cloudformation кусок кода, на который я ссылался, был сокращен до:

NodeInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Path: "/"
      Roles:
        - yyy
...