List a ROSA cluster in the EKS interface using the EKS connector

AWS EKS Kubernetes ROSA OpenShift

3 min read | by Jordi Prats

With the EKS connector you are going to be able to connect any Kubernetes cluster to the AWS EKS console to visualize it's status, configuration, nodes and workloads but not much else. Let's take a look what's needed:

First you'll have to make sure you have the AWSServiceRoleForAmazonEKSConnector role on your account, for this you can use awstools:

$ awstools iam role AWSServiceRoleForAmazonEKSConnector
/aws-service-role/eks-connector.amazonaws.com/AWSServiceRoleForAmazonEKSConnector A6YZRRTY42KEXYJJPOA5Q     arn:aws:iam::567894321463:role/aws-service-role/eks-connector.amazonaws.com/AWSServiceRoleForAmazonEKSConnector

If you don't have it, you can request it's creation using AWS cli as follows:

$ aws iam create-service-linked-role --aws-service-name eks-connector.amazonaws.com

The next thing you'll need is an IAM role that is able to talk to the SSM with the following trust policy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SSMAccess",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ssm.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

And with the following permission policy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SsmControlChannel",
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel"
            ],
            "Resource": "arn:aws:eks:*:*:cluster/*"
        },
        {
            "Sid": "ssmDataplaneOperations",
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenDataChannel",
                "ssmmessages:OpenControlChannel"
            ],
            "Resource": "*"
        }
    ]
}

Let's assume the role have the following ARN: arn:aws:iam::567894321463:role/eks-connector-role

We can use awstools eks register setting the role with the --role option. For this example we are going to register it as an OpenShift cluster:

$ awstools eks register test --role arn:aws:iam::567894321463:role/eks-connector-role --provider OPENSHIFT
activationId                                                 activationCode
f722f2ca-5ec3-4659-88ac-ba9384557c64                         oAAEcYTTbTeHdtnyOmRo

We'll need the activationId and the activationCode to configure the eks-connector StatefulSet. To generate the manifest we need to push to the Kubernetes cluster we can use the awstools eks get-connector-manifest. To be able to see it on the AWS console we'll need to configure the role we are using. If we are unsure we can just skip the --role option, once the service is running on the cluster on the console it is going to complain about the role that it is unauthorized. Once we have it we can reapply the manifest with the role option.

$ awstools eks get-connector-manifest f722f2ca-5ec3-4659-88ac-ba9384557c64 oAAEcYTTbTeHdtnyOmRo --role "arn:aws:iam::567894321463:role/UserSSOMapping"| kubectl apply -f -
namespace/eks-connector created
secret/eks-connector-activation-config created
role.rbac.authorization.k8s.io/eks-connector-secret-access created
serviceaccount/eks-connector created
secret/eks-connector-token created
rolebinding.rbac.authorization.k8s.io/eks-connector-secret-access created
configmap/eks-connector-agent created
statefulset.apps/eks-connector created
clusterrolebinding.rbac.authorization.k8s.io/eks-connector-service created
clusterrole.rbac.authorization.k8s.io/eks-connector-service created
clusterrole.rbac.authorization.k8s.io/eks-connector-console-dashboard-full-access-clusterrole created
clusterrolebinding.rbac.authorization.k8s.io/eks-connector-console-dashboard-full-access-clusterrole-binding created

On an OpenShift cluster we'll have to grant privileges to the eks-connector ServiceAccount:

$ oc adm policy add-scc-to-user privileged system:serviceaccount:eks-connector:eks-connector
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "eks-connector"

With all this configured we'll be able to see the cluster listed as any other EKS cluster but we won't be able to manage it or perform any action. For this example we are using a ROSA cluster that has an OIDC but it's not available using the EKS API:

$ awstools eks describe test
{
  "arn": "arn:aws:eks:eu-central-1:567894321463:cluster/test",
  "connectorConfig": {
    "activationExpiry": "2022-09-09 22:35:20.810000+02:00",
    "activationId": "f722f2ca-5ec3-4659-88ac-ba9384557c64",
    "provider": "OPENSHIFT",
    "roleArn": "arn:aws:iam::567894321463:role/eks-connector-role"
  },
  "createdAt": "2022-09-06 22:35:21.336000+02:00",
  "name": "test",
  "status": "ACTIVE",
  "tags": {}
}

Nevertheless, although we'll be able to see the cluster listed we won't be able to do much with it: Basically you'll be able to see nodes and workloads (Kubernetes objects).


Posted on 12/09/2022