Connecting an Amazon EKS cluster to AWS Continuum
For read-only Kubernetes inventory collection, connect your Amazon EKS cluster to
AWS Continuum. The onboarding takes about 10 minutes for each cluster. This task requires Amazon EKS administrator permissions and kubectl cluster-admin access. If you don't
have these permissions, ask your administrator to perform these steps or grant you the required
access.
This topic covers the following sections.
Understanding how AWS Continuum accesses your cluster
AWS Continuum reads your cluster's Kubernetes state through the Amazon EKS cluster communication service (CCS). There is no public endpoint, no VPC peering, and no agent to install. You control access with three elements:
-
A trust-only AWS Identity and Access Management (IAM) role that the AWS Continuum collector can assume. The role grants no AWS permissions of its own.
-
An Amazon EKS access entry that maps that role to a Kubernetes group.
-
A read-only role-based access control (RBAC) binding that lets the group read resources. The binding never grants write access and never grants access to Secrets.
You can revoke access at any time by deleting the role or the access entry.
With AWS Enhanced Zero-Click Role Creation, you create only the reader IAM role. You set up the Amazon EKS access entry and the in-cluster RBAC yourself, because those use Amazon EKS and Kubernetes APIs instead of IAM.
Gathering prerequisites
Before you begin, make sure that you have the following:
-
You have access to the AWS Continuum console Kubernetes collection, which lets you create the reader IAM role, enable the AWS collector, and turn on Kubernetes collection.
-
You have Amazon EKS administrator permissions in the account.
-
You have
kubectlcluster-admin access to the cluster, which you use to grant read-only RBAC. -
You have your cluster name and AWS Region.
-
If the cluster is private-only (no public endpoint), you have a host with a network path to the cluster endpoint from which to run
kubectl.
Creating the reader IAM role in the AWS Continuum console
Complete this procedure one time for each account to create the reader IAM role. For more information about IAM roles, see IAM roles in the IAM User Guide.
To create the reader IAM role
-
Open the AWS Continuum console at https://console.aws.amazon.com/continuum/
and sign in to the AWS account that contains the EKS cluster to collect. -
Choose Set up Kubernetes collection.
-
Turn on Kubernetes collection.
-
Choose Create default role.
-
Choose Create role, and then save. Role creation completes in a few minutes.
If role creation fails, verify that you have the IAM permissions to create roles, and then try again.
The console creates an IAM role named
ContinuumKubernetesReader-, which has no
permissions policy attached. The procedures later in this topic decide what the role can actually
read.collector-id
Enabling access entries in Amazon EKS
Complete this procedure one time for each cluster. Your cluster must use the API
or API_AND_CONFIG_MAP authentication mode, and the modern default is
API_AND_CONFIG_MAP.
The authentication mode changes in one direction only. Run the following command only when
the cluster is currently in CONFIG_MAP mode. If the cluster is already in
API or API_AND_CONFIG_MAP mode, skip this procedure. For more
information about access entries, see Manage access entries in the Amazon EKS
User Guide.
The following AWS Command Line Interface (AWS CLI) command updates the cluster
configuration. Replace region with your AWS Region and
cluster with your cluster name:
PROMPT> aws eks update-cluster-config \ --regionregion\ --namecluster\ --access-config authenticationMode=API_AND_CONFIG_MAP
If the command returns an access denied error, verify that you have Amazon EKS administrator permissions, and then try again.
Mapping the role into your cluster
Complete this procedure one time for each cluster. Before you begin, create the reader IAM
role in Creating the reader IAM role in the AWS Continuum console, and make sure that you have Amazon EKS
administrator permissions. The command maps the reader IAM role to the Kubernetes group
continuum:readers. You reference this group when you grant read-only RBAC.
Map the reader IAM role to the Kubernetes group by running the following AWS CLI command.
Replace region, cluster,
account-id, and collector-id with your
values:
PROMPT> aws eks create-access-entry \ --regionregion\ --cluster-namecluster\ --principal-arn arn:aws:iam::account-id:role/ContinuumKubernetesReader-collector-id\ --kubernetes-groups continuum:readers \ --type STANDARD
If the command fails because the role is missing or can't be assumed, see Resolving role and RBAC errors for EKS cluster onboarding.
Granting read-only RBAC
Complete this procedure one time for each cluster. This procedure requires kubectl
cluster-admin access. If you don't have cluster-admin access, ask your administrator to perform
these steps. With this manifest, you grant read-only access (get, list,
and watch) on the resources that AWS Continuum collects, while you exclude Secrets.
Apply the following Kubernetes RBAC YAML manifest with kubectl:
PROMPT> kubectl apply -f - <<'EOF' apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: continuum-reader labels: app.kubernetes.io/managed-by: continuum-k8s-collection rules: # Core API group (list-only; secrets deliberately excluded). - apiGroups: [""] resources: - pods - services - nodes - namespaces - serviceaccounts verbs: ["get", "list", "watch"] # Workloads. - apiGroups: ["apps"] resources: ["deployments", "statefulsets", "daemonsets"] verbs: ["get", "list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["get", "list", "watch"] # Core networking and policy. - apiGroups: ["networking.k8s.io"] resources: ["ingresses", "networkpolicies"] verbs: ["get", "list", "watch"] # RBAC. - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings", "clusterroles", "clusterrolebindings"] verbs: ["get", "list", "watch"] # Admission webhooks. - apiGroups: ["admissionregistration.k8s.io"] resources: ["mutatingwebhookconfigurations", "validatingwebhookconfigurations"] verbs: ["get", "list", "watch"] # Kubernetes Gateway API (CRD). - apiGroups: ["gateway.networking.k8s.io"] resources: ["*"] verbs: ["get", "list", "watch"] # CNI network policies (CRD). - apiGroups: ["cilium.io"] resources: ["*"] verbs: ["get", "list", "watch"] - apiGroups: ["crd.projectcalico.org"] resources: ["*"] verbs: ["get", "list", "watch"] # Istio service mesh (CRD). - apiGroups: ["install.istio.io", "networking.istio.io", "security.istio.io"] resources: ["*"] verbs: ["get", "list", "watch"] # Kyverno policy engine (CRD). - apiGroups: ["kyverno.io"] resources: ["*"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: continuum-reader-binding labels: app.kubernetes.io/managed-by: continuum-k8s-collection roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: continuum-reader subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: continuum:readers # MUST match the access entry group. EOF
If some resources return a forbidden error, confirm that the access entry group
and the binding both use continuum:readers.
For a private-only cluster, run kubectl from a host that has a network path to
the cluster endpoint, such as an in-VPC host.
Note
You grant read-only RBAC one time. The AWS Continuum collector never uses kubectl.
The collector reaches your cluster only over CCS for read-only collection.
Verifying access to your cluster
From a cluster-admin context, confirm that the reader group can list nodes but cannot list
Secrets. The following kubectl commands return yes for nodes and
no for Secrets:
PROMPT> kubectl auth can-i list nodes --as-group=continuum:readers --as=continuum-check yes PROMPT> kubectl auth can-i list secrets --as-group=continuum:readers --as=continuum-check no
Resolving role and RBAC errors for EKS cluster onboarding
Use the following table to resolve common issues.
| Symptom | Likely cause | Fix |
|---|---|---|
AWS Continuum can't assume the role. |
The role is missing or its trust policy changed. |
In the AWS Continuum console, repeat the procedure in Creating the reader IAM role in the AWS Continuum console to recreate the role and its trust policy correctly. |
Some resources are missing or return a |
You didn't apply the RBAC, or the group name doesn't match. |
Repeat the procedure in Granting read-only RBAC. Make sure that the access entry group
and the binding both use |
|
The cluster has a private-only endpoint. |
Run |
Understanding what AWS Continuum can and cannot see
The following list describes what the AWS Continuum collector can and cannot see:
-
The collector reads the following resources: namespaces, nodes, pods, services, workloads (deployments, daemonsets, statefulsets, and jobs), ingresses, network policies, RBAC objects, admission webhooks, and common networking and service mesh CRDs.
-
The collector does not read Secrets and performs no write operations.