EKS 認証設定
このページは v1(EC2 インスタンス + Steampipe)アーキテクチャの認証手順を説明しています。v2 は ECS Fargate ベースで、EKS 認証は terraform/v2/foundation/eks.tf が web タスクロールに Access Entry + AmazonEKSAdminViewPolicy を付与する方式に置き換えられています。このページのコマンド(SSH、AmazonEKSClusterAdminPolicy、data/config.json など)を v2 環境に適用しないでください。
AWSops の Kubernetes ダッシュボード(/k8s/*)は、Steampipe の kubernetes プラグインを通じて EKS クラスターのデータを照会します。そのためには、AWSops EC2 インスタンスロールが EKS クラスターに認証されている必要があります。
認証の構造
EC2 インスタンスロール (IAM Role)
→ kubeconfig (aws eks update-kubeconfig)
→ EKS API Server
→ Access Entry または aws-auth ConfigMap で検証
→ Kubernetes API アクセスを許可
→ Steampipe kubernetes プラグイン → ダッシュボード表示
事前確認
1. EC2 インスタンスロール ARN の確認
AWSops EC2 に SSH 接続後、実行します:
# EC2 インスタンスロール ARN の確認
aws sts get-caller-identity --query "Arn" --output text
# 出力例: arn:aws:sts::123456789012:assumed-role/AwsopsEc2Role/i-0abc123
# → IAM Role ARN: arn:aws:iam::123456789012:role/AwsopsEc2Role
sts:assumed-role 形式を iam:role 形式に変換する必要があります:
arn:aws:sts::ACCOUNT:assumed-role/ROLE_NAME/i-xxx- →
arn:aws:iam::ACCOUNT:role/ROLE_NAME
2. EKS クラスター認証モードの確認
aws eks describe-cluster --name CLUSTER_NAME \
--query 'cluster.accessConfig.authenticationMode' \
--output text
| 認証モード | 説明 | 推奨方法 |
|---|---|---|
API | Access Entry API のみ使用 | 方法 1 |
API_AND_CONFIG_MAP | Access Entry + aws-auth の両方を使用 | 方法 1(推奨) |
CONFIG_MAP | aws-auth ConfigMap のみ使用 | 方法 2 |
方法 1: Access Entry API
以下のコマンドは、EKS クラスターに対する eks:CreateAccessEntry および eks:AssociateAccessPolicy 権限が必要です。クラスターを作成したアカウント、または管理者権限を持つ IAM プリンシパルで実行してください。
Step 1: 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: ClusterAdmin ポリシーの関連付け
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
読み取り専用アクセスのみが必要な場合は、AmazonEKSClusterAdminPolicy の代わりに AmazonEKSViewPolicy を使用できます。ただし、Steampipe の一部の CRD テーブル照会が制限される場合があります。
Step 3: kubeconfig の作成
AWSops EC2 で実行します:
aws eks update-kubeconfig \
--name CLUSTER_NAME \
--region ap-northeast-2
Step 4: Steampipe K8s プラグインの設定
cat > ~/.steampipe/config/kubernetes.spc << 'EOF'
connection "kubernetes" {
plugin = "kubernetes"
custom_resource_tables = ["*"]
}
EOF
# Steampipe サービスの再起動
sudo systemctl restart steampipe
Step 5: 接続テスト
# kubectl テスト
kubectl get nodes
# Steampipe テスト
steampipe query "SELECT name, phase FROM kubernetes_namespace LIMIT 5"
方法 2: aws-auth ConfigMap
CONFIG_MAP モードのクラスターでは、kube-system ネームスペースの aws-auth ConfigMap に IAM ロールを直接追加する必要があります。
kubectl edit コマンドは、すでにクラスターに認証済みの管理者が実行する必要があります。クラスターを作成した IAM プリンシパル、または既存の system:masters グループのメンバーで実行してください。
Step 1: aws-auth ConfigMap の編集
kubectl edit configmap aws-auth -n kube-system
Step 2: mapRoles に EC2 ロールを追加
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
# 既存のロールを維持
- rolearn: arn:aws:iam::ACCOUNT_ID:role/EXISTING_ROLE
username: existing-user
groups:
- system:masters
# AWSops EC2 ロールを追加
- rolearn: arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
username: awsops-ec2
groups:
- system:masters
aws-auth ConfigMap を誤って変更すると、クラスターへのアクセスが遮断される可能性があります。編集前に必ずバックアップしてください:
kubectl get configmap aws-auth -n kube-system -o yaml > aws-auth-backup.yaml
Step 3: kubeconfig + Steampipe の設定
方法 1 の Step 3〜5 と同じです。
マルチクラスター設定
複数の EKS クラスターをモニタリングするには、各クラスターに対して認証設定を繰り返します:
# 各クラスターの kubeconfig を追加
aws eks update-kubeconfig --name cluster-1 --region ap-northeast-2
aws eks update-kubeconfig --name cluster-2 --region ap-northeast-2
# kubeconfig に複数のコンテキストが登録される
kubectl config get-contexts
Steampipe は current-context のクラスターを照会します。デフォルトのコンテキストを変更するには:
kubectl config use-context arn:aws:eks:ap-northeast-2:ACCOUNT:cluster/CLUSTER_NAME
sudo systemctl restart steampipe
クロスアカウント EKS アクセス
別の AWS アカウントの EKS クラスターにアクセスするには:
- 対象アカウントで AWSops EC2 ロールに対する Access Entry を作成(上記の方法 1 参照)
- 対象アカウントの IAM ロールを通じた
AssumeRoleの設定が必要になる場合があります - kubeconfig に
--role-arnオプションを追加:
aws eks update-kubeconfig \
--name CLUSTER_NAME \
--region ap-northeast-2 \
--role-arn arn:aws:iam::TARGET_ACCOUNT:role/EKSAccessRole
自動設定スクリプト
AWSops には、上記の手順を自動化するスクリプトが含まれています:
bash scripts/04-setup-eks-access.sh
このスクリプトは以下を自動的に実行します:
- kubectl のインストール
- EKS クラスターの探索(現在のリージョン + 追加 6 リージョン)
- kubeconfig の作成
- 認証モードを検出し、Access Entry の登録または aws-auth の案内
- Steampipe kubernetes プラグインの設定
- 接続テスト
トラブルシューティング
"error: You must be logged in to the server"
kubeconfig が存在しないか、期限切れです:
aws eks update-kubeconfig --name CLUSTER_NAME --region REGION
"AccessDeniedException: User is not authorized"
EC2 ロールに EKS API 呼び出しの権限がありません。IAM ポリシーに次を追加してください:
{
"Effect": "Allow",
"Action": [
"eks:DescribeCluster",
"eks:ListClusters"
],
"Resource": "*"
}
"error: exec plugin: invalid apiVersion"
AWS CLI v1 を使用している可能性があります。v2 にアップグレードしてください:
aws --version # aws-cli/2.x を確認
Steampipe で K8s テーブルが表示されない
Steampipe K8s プラグインの設定を確認してください:
cat ~/.steampipe/config/kubernetes.spc
# plugin = "kubernetes" を確認
sudo systemctl restart steampipe
関連ページ
- EKS Overview — EKS クラスターダッシュボード
- EKS Explorer — K9s スタイルのターミナル UI
- デプロイガイド — 全体のデプロイ手順