Kubernetes Security
Supported Versions: Kubernetes 1.32, 1.33, 1.34 最終更新: February 23, 2026
Kubernetes において、security(セキュリティ)は cluster と application を保護するための重要な要素です。この章では、Kubernetes security の概念、authentication と authorization の仕組み、network policies、security contexts、そして Amazon EKS で security を強化する方法について見ていきます。
Lab Environment Setup
このドキュメントの例を試すには、次のツールと環境が必要です。
Required Tools
- kubectl v1.34 以上
- 稼働中の Kubernetes cluster(EKS、minikube、kind など)
- OpenSSL(certificate 作成用)
Security Example Setup
# Create namespace
kubectl create namespace security-demo
# Create service account
kubectl -n security-demo create serviceaccount demo-sa
# Create role
kubectl -n security-demo apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
EOF
# Create role binding
kubectl -n security-demo apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
subjects:
- kind: ServiceAccount
name: demo-sa
namespace: security-demo
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
EOF
# Create Pod with security context
kubectl -n security-demo apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
serviceAccountName: demo-sa
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: sec-ctx-demo
image: busybox
command: ["sh", "-c", "sleep 3600"]
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
EOFKubernetes Security Architecture
Table of Contents
- Security Overview
- Authentication
- Authorization
- Security Context
- Network Policy
- Secret Management
- Image Security
- Pod Security Standards
- Audit Logging
- EKS Security Best Practices
Security Overview
Key Concept: Kubernetes security は Defense in Depth(多層防御)アプローチに従い、infrastructure、cluster、workload の各レベルで複数の security mechanisms を提供します。
Kubernetes security は、次の主要領域で構成されます。
Security Area Comparison
| Security Area | Main Components | Responsible Party | Security Mechanisms |
|---|---|---|---|
| Infrastructure Security | Host OS, Container Runtime, Network | Cluster Administrator | Firewall, OS hardening, Container runtime security |
| Cluster Security | API Server, etcd, kubelet | Cluster Administrator | Authentication, Authorization, Admission Control, Encryption |
| Workload Security | Pods, Containers, Services | Application Developer | Security Context, Network Policy, RBAC |
Security Principles
- Principle of Least Privilege: 必要最小限の permissions のみを付与します
- Defense in Depth: 複数の security layers によって防御します
- Default Deny: 明示的に許可されていないものはすべて拒否します
- Security Hardening: defaults より強力な security settings を適用します
- Continuous Monitoring: security events を検出し、対応します
Authentication
Authentication は、user または service account が誰であるかを検証する process です。Kubernetes はさまざまな authentication methods をサポートしています。
Authentication Methods
- X.509 Certificates: TLS client certificates を使用した authentication
- Service Account Tokens: JWT tokens を使用した service account authentication
- OpenID Connect (OIDC): external identity providers を通じた authentication
- Webhook Token Authentication: external authentication services を通じた authentication
- Authentication Proxy: proxy を通じた authentication
Service Account Example
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: default
---
apiVersion: v1
kind: Secret
metadata:
name: my-service-account-token
annotations:
kubernetes.io/service-account.name: my-service-account
type: kubernetes.io/service-account-tokenAuthentication
Kubernetes API server にアクセスするには、authentication process を通過する必要があります。Kubernetes はさまざまな authentication methods をサポートしています。
X.509 Certificates
Kubernetes は TLS certificates を使用して clients を authenticate します。これは主に internal cluster communication と administrator authentication に使用されます。
# Example kubeconfig setup for certificate-based authentication
kubectl config set-credentials admin --client-certificate=admin.crt --client-key=admin.keyService Account Tokens
Service accounts は、Pods 内で実行される processes が API server と通信するために使用する accounts です。各 service account には自動生成された token があり、Pods に自動的に mount されます。
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: defaultapiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: my-service-account
containers:
- name: my-container
image: nginx:1.19OpenID Connect (OIDC)
external identity providers(例: AWS IAM、Google、Azure AD)を通じた authentication をサポートします。これは enterprise environments で Single Sign-On (SSO) を実装する場合に役立ちます。
# Example kubeconfig setup using OIDC
kubectl config set-credentials oidc-user \
--auth-provider=oidc \
--auth-provider-arg=idp-issuer-url=https://accounts.google.com \
--auth-provider-arg=client-id=<CLIENT_ID> \
--auth-provider-arg=client-secret=<CLIENT_SECRET>Webhook Token Authentication
external authentication service を通じて tokens を検証する方法です。API server は tokens を external service に転送し、その service が token を検証して user information を返します。
Authentication Proxy
authentication proxy を API server の前段に配置し、user authentication を処理する方法です。proxy は authenticated user information を HTTP headers に含め、API server に転送します。
Authorization
Authentication が「あなたが誰か」を検証する process であるなら、authorization は「あなたが何をできるか」を判断する process です。Kubernetes はさまざまな authorization modes をサポートしています。
RBAC (Role-Based Access Control)
RBAC は Kubernetes で最も広く使用されている authorization mechanism です。Roles と RoleBindings を通じて、users または service accounts に特定の resources に対する specific permissions を付与します。
Role and ClusterRole
Roles は namespace 内の permissions を定義し、ClusterRoles は cluster 全体に適用される permissions を定義します。
# Namespace Role example
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]# Cluster-wide ClusterRole example
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]RoleBinding and ClusterRoleBinding
RoleBinding は、特定の namespace 内で Role または ClusterRole を users、groups、または service accounts に bind します。ClusterRoleBinding は、cluster 全体で ClusterRole を users、groups、または service accounts に bind します。
# RoleBinding example
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io# ClusterRoleBinding example
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.ioABAC (Attribute-Based Access Control)
ABAC は、user attributes、resource attributes、environment attributes などに基づいて permissions を付与する方法です。Kubernetes では、policies は JSON files を通じて定義されます。より柔軟である一方、management complexity のため RBAC ほど一般的には使用されません。
Node Authorization
Node authorization は、kubelets が API server にアクセスするときに使用される特別な authorization mode です。Kubelets は、自身が実行されている nodes に関連する resources(Pods、node status など)にのみアクセスできます。
Webhook Authorization
external service を通じて authorization decisions を行う方法です。API server は authorization requests を external service に転送し、その service が request を許可するか拒否するかを判断します。
Security Context
Security context は、Pod または container level で security settings を定義します。これにより、privileges、access control、capabilities などをきめ細かく制御できます。
Pod Security Context
apiVersion: v1
kind: Pod
metadata:
name: security-context-pod
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
containers:
- name: security-context-container
image: nginx:1.19
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true上の例では次のようになります。
runAsUser: container process が実行される User IDrunAsGroup: container process が実行される Group IDfsGroup: volumes にアクセスするときに使用される Group IDallowPrivilegeEscalation: process が parent process より多くの privileges を取得できるかどうかcapabilities: Linux kernel capabilities を追加または削除しますreadOnlyRootFilesystem: root filesystem を read-only として mount します
Pod Security Standards
Kubernetes 1.25 以降、Pod Security Policy は Pod Security Standards に置き換えられました。Pod Security Standards は 3 つの policy levels を定義します。
- Privileged: 制限なし、すべての privileges が許可されます
- Baseline: 既知の privilege escalation paths をブロックします
- Restricted: 強力に harden された security policy
# Example applying Pod Security Standards to namespace
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restrictedNetwork Policy
Network policies は、Pods 間の communication を制御する方法を提供します。デフォルトでは、Kubernetes cluster 内のすべての Pods は相互に通信できますが、network policies を使用してこれを制限できます。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow
namespace: default
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
egress:
- to:
- podSelector:
matchLabels:
app: database
ports:
- protocol: TCP
port: 5432上の例では次のようになります。
apilabel を持つ Pods の network policy を定義しますfrontendlabel を持つ Pods から port 8080 への inbound traffic のみを許可しますdatabaselabel を持つ Pods の port 5432 への outbound traffic のみを許可します
network policies を使用するには、cluster の network plugin が network policies をサポートしている必要があります。Calico、Cilium、Antrea などの CNI plugins は network policies をサポートしています。
Secret Management
Kubernetes Secrets は、passwords、API keys、certificates などの sensitive information を保存および管理するために使用されます。ただし、デフォルトでは secrets は base64 encoded されるだけで、encrypted されません。そのため、追加の security measures が必要です。
Secret Encryption
etcd に保存される secrets を encrypt するには、API server の encryption configuration を設定する必要があります。
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-key>
- identity: {}External Secret Management
より安全な secret management のために、external secret management systems を使用できます。
- HashiCorp Vault
- AWS Secrets Manager
- Azure Key Vault
- Google Secret Manager
- External Secrets Operator
Image Security
Container image security は Kubernetes security の重要な部分です。
Image Vulnerability Scanning
container images の vulnerabilities を scan し、既知の security issues を特定して解決します。
- Trivy
- Clair
- Anchore
- AWS ECR Scan
- Docker Hub Scan
Image Signing and Verification
image signing を通じて images の origin と integrity を検証します。
- Notary
- Cosign
- Portieris
- AWS Signer
- Connaisseur
Image Policies
image policies を通じて、trusted registries からのみ images を pull するよう制限します。
apiVersion: admission.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ImagePolicyWebhook
configuration:
imagePolicy:
kubeConfigFile: /path/to/kubeconfig
allowTTL: 50
denyTTL: 50
retryBackoff: 500
defaultAllow: falseAudit
Kubernetes auditing は、cluster 内で発生する events を記録および分析する mechanism を提供します。
Audit Policy
Audit policies は、どの events を記録するかを定義します。
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
resources:
- group: ""
resources: ["pods"]
- level: Request
resources:
- group: ""
resources: ["secrets"]
- level: None
users: ["system:kube-proxy"]
resources:
- group: ""
resources: ["endpoints", "services"]Audit levels:
None: events を記録しませんMetadata: request metadata(user、time、resource など)のみを記録しますRequest: request metadata と request body を記録しますRequestResponse: request metadata、request body、response body を記録します
Audit Log Backends
Audit logs はさまざまな backends に保存できます。
- File
- Webhook
- Dynamic backends(例: Elasticsearch、Loki)
Amazon EKS Security Enhancement
Amazon EKS は、Kubernetes の基本的な security features に加えて、AWS security services と統合することで security を強化できます。
IAM Roles and Service Accounts (IRSA)
IRSA (IAM Roles for Service Accounts) を使用すると、IAM roles を Kubernetes service accounts に関連付けて、AWS services に安全にアクセスできます。
# Create OIDC provider
eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
# Create IAM role and associate with service account
eksctl create iamserviceaccount \
--name my-service-account \
--namespace default \
--cluster my-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \
--approveSecret Encryption with AWS KMS
AWS KMS を使用して、EKS cluster 内の Kubernetes secrets を encrypt できます。
# Create KMS key
aws kms create-key --description "EKS Secret Encryption Key"
# Specify KMS key when creating EKS cluster
eksctl create cluster --name my-cluster --encryption-provider-key-arn arn:aws:kms:region:account-id:key/key-idAWS Security Groups
AWS security groups を EKS cluster nodes と Pods に適用し、network traffic を制御します。
# Create security group
aws ec2 create-security-group --group-name eks-cluster-sg --description "EKS Cluster Security Group"
# Add inbound rule
aws ec2 authorize-security-group-ingress \
--group-id sg-12345 \
--protocol tcp \
--port 443 \
--cidr 10.0.0.0/16AWS WAF
AWS WAF (Web Application Firewall) を EKS clusters の前段に配置し、web applications を保護します。
# Create WAF Web ACL
aws wafv2 create-web-acl \
--name eks-web-acl \
--scope REGIONAL \
--default-action Allow={} \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=eks-web-aclAWS GuardDuty
AWS GuardDuty を使用して、EKS clusters の security threats を検出し、対応します。
# Enable GuardDuty
aws guardduty create-detector --enable
# Enable EKS protection
aws guardduty update-detector \
--detector-id 12abc34d567e8fa901bc2d34e56789f0 \
--features '[{"Name": "EKS_RUNTIME_MONITORING", "Status": "ENABLED"}]'Security Best Practices
Kubernetes clusters と workloads の security を強化するための best practices は次のとおりです。
Cluster Security
- Keep Versions Up to Date: Kubernetes とすべての components を最新の状態に保ち、既知の vulnerabilities に patch を適用します。
- Restrict API Server Access: API server への access を制限し、必要な場合にのみ public access を許可します。
- etcd Encryption: etcd に保存される data を encrypt し、sensitive information を保護します。
- Enable Audit Logging: audit logging を有効にし、cluster activity を monitor および analyze します。
- Implement Network Policies: network policies を実装し、Pod-to-Pod communication を制限します。
Workload Security
- Principle of Least Privilege: Pods と containers に必要最小限の permissions のみを付与します。
- Non-root User: containers を non-root users として実行します。
- Read-only Filesystem: 可能な場合、container root filesystems を read-only として mount します。
- Resource Limits: CPU と memory resource limits を設定し、DoS attacks を防止します。
- Configure Security Context: Pod と container security contexts を適切に設定します。
Image Security
- Minimal Base Images: 最小限の packages のみを含む base images を使用します。
- Image Vulnerability Scanning: container images の vulnerabilities を定期的に scan します。
- Image Signing and Verification: image signing を通じて images の origin と integrity を検証します。
- Trusted Registries: trusted registries からのみ images を pull します。
- Use Latest Images: 既知の vulnerabilities に patch を適用するため、images を定期的に update します。
Secret Management
- External Secret Management: external secret management systems を使用して secrets を安全に管理します。
- Secret Encryption: etcd に保存される secrets を encrypt します。
- Secret Rotation: security を強化するため、secrets を定期的に rotate します。
- Minimum Privilege Access: secrets への access を必要な Pods のみに制限します。
- Use Volumes Instead of Environment Variables: environment variables の代わりに volumes を通じて secrets を mount します。
Conclusion
Kubernetes security は、cluster infrastructure、Kubernetes components、application workloads などすべての領域で security を考慮し、複数の layers で実装する必要があります。authentication、authorization、network policies、security contexts などの Kubernetes の基本的な security features に加え、image security、secret management、audit logging などの追加の security measures によって、cluster と workload の security を強化できます。
Amazon EKS を使用する場合、さまざまな AWS security services と統合することで、security をさらに強化できます。IAM Roles and Service Accounts (IRSA)、AWS KMS による secret encryption、AWS Security Groups、AWS WAF、AWS GuardDuty などの services を使用して、EKS cluster security を改善できます。
Security は継続的な process であるため、定期的な security assessments と updates を通じて、clusters と workloads の security posture を維持することが重要です。
Quiz
この章で学んだ内容を確認するには、Security Quiz に挑戦してください。
References
- Kubernetes Official Documentation - Security
- Kubernetes Official Documentation - Authentication
- Kubernetes Official Documentation - Authorization
- Kubernetes Official Documentation - RBAC
- Kubernetes Official Documentation - Network Policies
- Kubernetes Official Documentation - Security Context
- Kubernetes Official Documentation - Pod Security Standards
- Kubernetes Official Documentation - Secrets
- Kubernetes Official Documentation - Audit
- Amazon EKS Official Documentation - Security
- Amazon EKS Official Documentation - IAM Roles for Service Accounts
- Amazon EKS Official Documentation - Secret Encryption
- AWS Security Blog - EKS Security Best Practices