Skip to main content

EKS Authentication Setup

v1 archive — not applicable to v2

This page describes the v1 (EC2 instance + Steampipe) authentication procedure. v2 runs on ECS Fargate, and EKS authentication is instead handled by terraform/v2/foundation/eks.tf granting the web task role an Access Entry + AmazonEKSAdminViewPolicy. Do not apply this page's commands (SSH, AmazonEKSClusterAdminPolicy, data/config.json, etc.) to a v2 environment.

The AWSops Kubernetes dashboard (/k8s/*) queries EKS cluster data through Steampipe's kubernetes plugin. For this to work, the AWSops EC2 instance role must be authenticated to the EKS cluster.

Authentication Architecture​

EC2 Instance Role (IAM Role)
→ kubeconfig (aws eks update-kubeconfig)
→ EKS API Server
→ Access Entry or aws-auth ConfigMap validation
→ Kubernetes API access granted
→ Steampipe kubernetes plugin → Dashboard display

Prerequisites​

1. Find EC2 Instance Role ARN​

SSH into the AWSops EC2 instance and run:

# Get EC2 instance role ARN
aws sts get-caller-identity --query "Arn" --output text

# Example output: arn:aws:sts::123456789012:assumed-role/AwsopsEc2Role/i-0abc123
# → IAM Role ARN: arn:aws:iam::123456789012:role/AwsopsEc2Role
ARN Conversion

Convert sts:assumed-role format to iam:role format:

  • arn:aws:sts::ACCOUNT:assumed-role/ROLE_NAME/i-xxx
  • → arn:aws:iam::ACCOUNT:role/ROLE_NAME

2. Check EKS Cluster Authentication Mode​

aws eks describe-cluster --name CLUSTER_NAME \
--query 'cluster.accessConfig.authenticationMode' \
--output text
Auth ModeDescriptionRecommended Method
APIAccess Entry API onlyMethod 1
API_AND_CONFIG_MAPBoth Access Entry and aws-authMethod 1 (recommended)
CONFIG_MAPaws-auth ConfigMap onlyMethod 2

Method 1: Access Entry API​

Permission Requirements

The following commands require eks:CreateAccessEntry and eks:AssociateAccessPolicy permissions on the EKS cluster. Run them as the account or IAM principal that created the cluster, or one with admin access.

Step 1: Create Access Entry​

aws eks create-access-entry \
--cluster-name CLUSTER_NAME \
--principal-arn arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME \
--type STANDARD

Step 2: Associate ClusterAdmin Policy​

aws eks associate-access-policy \
--cluster-name CLUSTER_NAME \
--principal-arn arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME \
--policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
--access-scope type=cluster
Least Privilege

For read-only access, use AmazonEKSViewPolicy instead of AmazonEKSClusterAdminPolicy. Note that some Steampipe CRD table queries may be restricted.

Step 3: Generate kubeconfig​

Run on the AWSops EC2 instance:

aws eks update-kubeconfig \
--name CLUSTER_NAME \
--region ap-northeast-2

Step 4: Configure Steampipe K8s Plugin​

cat > ~/.steampipe/config/kubernetes.spc << 'EOF'
connection "kubernetes" {
plugin = "kubernetes"
custom_resource_tables = ["*"]
}
EOF

# Restart Steampipe service
sudo systemctl restart steampipe

Step 5: Test Connection​

# kubectl test
kubectl get nodes

# Steampipe test
steampipe query "SELECT name, phase FROM kubernetes_namespace LIMIT 5"

Method 2: aws-auth ConfigMap​

For clusters in CONFIG_MAP mode, you must add the IAM role directly to the aws-auth ConfigMap in the kube-system namespace.

Permission Requirements

The kubectl edit command must be run by an administrator already authenticated to the cluster — the IAM principal that created the cluster or an existing system:masters group member.

Step 1: Edit aws-auth ConfigMap​

kubectl edit configmap aws-auth -n kube-system

Step 2: Add EC2 Role to mapRoles​

apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
# Keep existing roles
- rolearn: arn:aws:iam::ACCOUNT_ID:role/EXISTING_ROLE
username: existing-user
groups:
- system:masters
# Add AWSops EC2 role
- rolearn: arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
username: awsops-ec2
groups:
- system:masters
Editing aws-auth

Incorrectly modifying the aws-auth ConfigMap can lock you out of the cluster. Always back up before editing:

kubectl get configmap aws-auth -n kube-system -o yaml > aws-auth-backup.yaml

Step 3: kubeconfig + Steampipe Setup​

Same as Method 1, Steps 3–5.

Multi-Cluster Setup​

To monitor multiple EKS clusters, repeat the authentication setup for each:

# Add kubeconfig for each cluster
aws eks update-kubeconfig --name cluster-1 --region ap-northeast-2
aws eks update-kubeconfig --name cluster-2 --region ap-northeast-2

# Multiple contexts registered
kubectl config get-contexts

Steampipe queries the current-context cluster. To switch:

kubectl config use-context arn:aws:eks:ap-northeast-2:ACCOUNT:cluster/CLUSTER_NAME
sudo systemctl restart steampipe

Cross-Account EKS Access​

To access EKS clusters in other AWS accounts:

  1. Create an Access Entry in the target account for the AWSops EC2 role (see Method 1)
  2. You may need AssumeRole setup for the target account's IAM role
  3. Add --role-arn to kubeconfig:
aws eks update-kubeconfig \
--name CLUSTER_NAME \
--region ap-northeast-2 \
--role-arn arn:aws:iam::TARGET_ACCOUNT:role/EKSAccessRole

Automated Setup Script​

AWSops includes a script that automates the above process:

bash scripts/04-setup-eks-access.sh

This script automatically:

  1. Installs kubectl
  2. Discovers EKS clusters (current region + 6 additional regions)
  3. Generates kubeconfig
  4. Detects auth mode and creates Access Entry or provides aws-auth instructions
  5. Configures Steampipe kubernetes plugin
  6. Tests connectivity

Troubleshooting​

"error: You must be logged in to the server"​

kubeconfig is missing or expired:

aws eks update-kubeconfig --name CLUSTER_NAME --region REGION

"AccessDeniedException: User is not authorized"​

The EC2 role lacks EKS API permissions. Add this to the IAM policy:

{
"Effect": "Allow",
"Action": [
"eks:DescribeCluster",
"eks:ListClusters"
],
"Resource": "*"
}

"error: exec plugin: invalid apiVersion"​

You may be using AWS CLI v1. Upgrade to v2:

aws --version  # Verify aws-cli/2.x

Steampipe K8s Tables Not Visible​

Check Steampipe K8s plugin configuration:

cat ~/.steampipe/config/kubernetes.spc
# Verify plugin = "kubernetes"
sudo systemctl restart steampipe