Kubernetes

Kubernetesのコンポーネントとワークロードのセキュリティ、可用性、運用設定についての文書です。

文書一覧

文書 パス
AlwaysAdmit Admission Plugin の使用 k8s/always_admit_admission_control_plugin_set
AlwaysPullImages Admission Plugin の未設定 k8s/always_pull_images_admission_control_plugin_not_set
匿名認証の無効化が未設定 k8s/anonymous_auth_is_not_set_to_false
Audit Log の出力先が未設定 k8s/audit_log_path_not_set
Audit Policy ファイルが未設定 k8s/audit_policy_file_not_defined
認可モードが AlwaysAllow に設定されている k8s/authorization_mode_set_to_always_allow
Node Authorizer 設定の確認 k8s/authorization_mode_node_not_set
RBAC による認可設定の確認 k8s/authorization_mode_rbac_not_set
コンテナーに公開された Docker デーモンソケット k8s/docker_daemon_socket_is_exposed_to_containers
Encryption Provider Config が未設定 k8s/encryption_provider_config_is_not_defined
Encryption Provider 設定の確認 k8s/encryption_provider_not_properly_configured
HPA 対象 Deployment のレプリカ数管理の確認 k8s/hpa_targeted_deployments_with_configured_replica_count
ホストの IPC 名前空間の共有 k8s/shared_host_ipc_namespace
ホストのネットワーク名前空間の共有 k8s/shared_host_network_namespace
Ingress Controller を介したワークロードの公開 k8s/ingress_controller_exposes_workload
Kubelet の認証局が未設定 k8s/kubelet_certificate_authority_not_set
Kubelet クライアント証明書または鍵が未設定 k8s/kubelet_client_certificate_or_key_not_set
Kubelet クライアント証明書の自動更新が無効 k8s/kubelet_client_periodic_certificate_switch_disabled
Kubelet HTTPS が無効 k8s/kubelet_https_set_to_false
Kubelet のカーネル設定保護の確認 k8s/kubelet_protect_kernel_defaults_set_to_false
認証のない Kubelet 読み取り専用ポートの有効化 k8s/kubelet_read_only_port_is_not_set_to_zero
Kubelet のストリーミング接続時間制限の確認 k8s/kubelet_streaming_connection_timeout_disabled
Kubelet の iptables 補助チェーン設定の確認 k8s/kubelet_not_managing_ip_tables
Kubernetes の AppArmor プロファイルの確認 k8s/missing_app_armor_config
Kubernetes コンテナーの CPU limit 設定の確認 k8s/cpu_limits_not_set
Kubernetes コンテナーの CPU request 設定の確認 k8s/cpu_requests_not_set
Kubernetes の cluster-admin バインド権限の確認 k8s/cluster_admin_role_binding_with_super_user_permissions
Kubernetes CronJob の開始期限の確認 k8s/cronjob_deadline_not_configured
Kubernetes Dashboard の利用状況の確認 k8s/dashboard_is_enabled
Kubernetes Deployment の Pod 分散配置の確認 k8s/deployment_has_no_pod_anti_affinity
Kubernetes Deployment の PodDisruptionBudget 設定の確認 k8s/deployment_without_pod_disruption_budget
Kubernetes の Event リクエスト制限の確認 k8s/event_rate_limit_admission_control_plugin_not_set
Kubernetes HPA の Object メトリクス参照設定の確認 k8s/hpa_targets_invalid_object
Kubernetes のイメージ admission ポリシーの確認 k8s/image_policy_webhook_admission_control_plugin_not_set
Kubernetes の NamespaceLifecycle admission 設定の確認 k8s/namespace_lifecycle_admission_control_plugin_disabled
Kubernetes 名前空間の LimitRange 設定の確認 k8s/pod_or_container_without_limit_range
Kubernetes ネームスペースのリソースクォータの確認 k8s/pod_or_container_without_resource_quota
Kubernetes NetworkPolicy の対象 Pod 選択の確認 k8s/network_policy_is_not_targeting_any_pod
Kubernetes の Pod・コンテナーのセキュリティコンテキストの確認 k8s/pod_or_container_without_security_context
Kubernetes 制御プレーンのプロファイリング設定の確認 k8s/profiling_not_set_to_false
Kubernetes Secret の環境変数による受け渡しの確認 k8s/secrets_as_environment_variables
Kubernetes NodePort サービスのアクセス範囲の確認 k8s/service_type_is_nodeport
Kubernetes Service の対象とポート接続の確認 k8s/service_does_not_target_pod
Kubernetes kubelet のイベント送信レート設定の確認 k8s/kubelet_event_qps_not_properly_set
kubelet のホスト名上書き設定の確認 k8s/kubelet_hostname_override_is_set
Kubernetes 監査ログの世代数設定の確認 k8s/audit_log_maxbackup_not_properly_set
Kubernetes 監査ログの保存期間設定の確認 k8s/audit_log_maxage_not_properly_set
Kubernetes 監査ログのローテーションサイズ設定の確認 k8s/audit_log_maxsize_not_properly_set
Kubernetes 監査ポリシーの記録範囲の確認 k8s/audit_policy_not_cover_key_security_concerns
Kubernetes Secret の管理方式の確認 k8s/using_kubernetes_native_secret_management
Kubernetes メタデータラベルの形式の確認 k8s/metadata_label_is_invalid
Kubernetes イメージのダイジェスト固定の確認 k8s/image_without_digest
Kubernetes コンテナーイメージのバージョン選択の確認 k8s/invalid_image
Kubernetes API バージョンのサポート状況の確認 k8s/object_is_using_a_deprecated_api_version
Kubernetes コンテナーの Linux capability 削減の確認 k8s/no_drop_capabilities_for_containers
Kubernetes コンテナーのイメージ取得ポリシーの確認 k8s/image_pull_policy_of_container_is_not_always
Kubernetes コンテナーのルートファイルシステム書き込み権限の確認 k8s/root_container_not_mounted_as_read_only
コンテナーのメモリ制限設定の確認 k8s/memory_limits_not_defined
コンテナーのメモリ要求量の確認 k8s/memory_requests_not_defined
NET_RAW capability の削除設定の確認 k8s/net_raw_capabilities_not_being_dropped
NetworkPolicy の適用構成の確認 k8s/cni_plugin_does_not_support_network_policies
NodeRestriction Admission Plugin が未設定 k8s/node_restriction_admission_control_plugin_not_set
PSP によるホスト PID 共有の許可 k8s/psp_allows_sharing_host_pid
PSP で NET_RAW の削除が必須になっていない k8s/net_raw_capabilities_disabled_for_psp
従来の PodSecurityPolicy の capability 制限の確認 k8s/not_limited_capabilities_for_pod_security_policy
広すぎる Pod 作成権限 k8s/permissive_access_to_create_pods
旧 PodSecurityPolicy の適用を確認すべき kube-apiserver k8s/pod_security_policy_admission_control_plugin_not_set
権限昇格を許可する RBAC ロール k8s/rbac_roles_allow_privilege_escalation
コンテナーへの attach を許可する RBAC k8s/rbac_roles_with_attach_permission
コンテナー内でのコマンド実行を許可する RBAC k8s/rbac_roles_with_exec_permission
Impersonation を許可する RBAC k8s/rbac_roles_with_impersonate_permission
Pod のポート転送を許可する RBAC k8s/rbac_roles_with_portforwarding_permissions
Secret の読み取りを許可する RBAC k8s/rbac_roles_with_read_secrets_permissions
Readiness Probe が未設定 k8s/readiness_probe_is_not_configured
API サーバーのリクエスト時間制限の確認 k8s/request_timeout_not_properly_set
コントローラーの API サーバー CA 信頼設定の確認 k8s/root_ca_file_not_defined
Root コンテナーの許可 k8s/root_containers_admitted
コンテナーの root 実行防止設定の確認 k8s/containers_running_as_root
Kubelet サーバー証明書の自動更新設定の確認 k8s/rotate_kubelet_server_certificate_not_active
SYS_ADMIN capability が追加された Kubernetes コンテナー k8s/containers_with_sys_admin_capabilities
Seccomp プロファイル設定の確認 k8s/seccomp_profile_is_not_configured
SecurityContextDeny の代替ポリシーの確認 k8s/security_context_deny_admission_control_plugin_not_set
ServiceAccountトークンの検証鍵設定の確認 k8s/service_account_key_file_not_properly_set
ServiceAccountトークンの署名鍵設定の確認 k8s/service_account_private_key_file_not_defined
ServiceAccountトークンの自動マウントの無効化漏れ k8s/service_account_token_automount_not_disabled
ServiceAccount admission pluginの無効化 k8s/service_account_admission_control_plugin_disabled
ワークロード間でのServiceAccountの共有 k8s/shared_service_account
ServiceAccount名の未指定 k8s/service_account_name_undefined_or_empty
ServiceAccountによるSecretへのアクセス k8s/service_account_allows_access_secrets
StatefulSet のボリュームアクセスモードの確認 k8s/incorrect_volume_claim_access_mode_read_write_once
StatefulSet レプリカの分散配置の確認 k8s/statefulset_has_no_pod_anti_affinity
StatefulSet の Headless Service 接続の確認 k8s/statefulset_without_service_name
StatefulSet の PodDisruptionBudget 設定の確認 k8s/statefulset_without_pod_disruption_budget
StatefulSet の永続ストレージ要件の確認 k8s/statefulset_requests_storage
TLS サーバー証明書設定の確認 k8s/tls_connection_certificate_not_setup
終了した Pod の整理しきい値の確認 k8s/terminated_pod_garbage_collector_threshold_not_properly_set
Helm 2 の Tiller を実行する Kubernetes ワークロード k8s/tiller_is_deployed
Unmasked の proc mount を許可する Kubernetes 構成 k8s/container_runs_unmasked
コントローラーごとのServiceAccount認証情報が無効 k8s/use_service_account_credentials_not_set_to_true
基本認証ファイルを使用する kube-apiserver k8s/basic_auth_file_is_set
etcd の自動 TLS が有効 k8s/auto_tls_set_to_true
etcd のクライアント証明書認証設定の確認 k8s/etcd_client_certificate_authentication_set_to_false
API サーバーの etcd CA ファイル設定の確認 k8s/etcd_client_certificate_file_not_defined
etcd Peer Auto TLS が有効 k8s/peer_auto_tls_set_to_true
etcd のピア証明書認証設定の確認 k8s/etcd_peer_client_certificate_authentication_set_to_false
etcd の TLS 証明書ファイル設定が不完全 k8s/etcd_tls_certificate_files_not_properly_set
etcd ピア TLS の証明書・キー設定の確認 k8s/etcd_peer_tls_certificate_files_not_properly_set
ホスト IPC の共有を許可する PodSecurityPolicy k8s/psp_allows_sharing_host_ipc
ホストの PID 名前空間を共有する Kubernetes ワークロード k8s/shared_host_pid_namespace
ホストのネットワーク名前空間の共有を許可する PodSecurityPolicy k8s/psp_containers_share_host_network_namespace
hostPath のアクセス制限を確認すべき PodSecurityPolicy k8s/psp_with_unrestricted_access_to_host_path
hostPort による直接バインドの確認 k8s/workload_host_port_not_specified
旧 kube-apiserver の非セキュアなバインド設定の確認 k8s/insecure_bind_address_set
旧 kube-apiserver の非セキュアポート設定の確認 k8s/insecure_port_not_properly_set
kube-apiserver の etcd TLS クライアント証明書設定が不完全 k8s/etcd_tls_certificate_not_properly_configured
kube-system 以外の名前空間で hostPath を使用するワークロード k8s/non_kube_system_pod_with_host_mount
コンテナーの liveness probe の必要性の確認 k8s/liveness_probe_is_not_defined
権限昇格を許可する PodSecurityPolicy k8s/psp_allows_privilege_escalation
権限昇格が許可された Kubernetes コンテナー k8s/privilege_escalation_allowed
特権コンテナーを許可する PodSecurityPolicy k8s/psp_set_to_privileged
特権モードで動作する Kubernetes コンテナー k8s/container_is_privileged
secure-port が 0 の kube-apiserver k8s/secure_port_set_to_zero
service-account-lookup が false の kube-apiserver k8s/service_account_lookup_set_to_false
kube-apiserver の静的トークンファイル認証の確認 k8s/token_auth_file_is_set
unsafe sysctl を許可する Kubernetes 構成 k8s/cluster_allows_unsafe_sysctls
ワイルドカード権限を含む Kubernetes RBAC ルール k8s/rbac_wildcard_in_rule
コントロールプレーンの認証局の信頼範囲の確認 k8s/not_unique_certificate_authority
ワークロードの Namespace 構成の確認 k8s/using_unrecommended_namespace
デフォルトの ServiceAccount を対象にする RoleBinding k8s/role_binding_to_default_service_account
コンテナーの実行 UID 設定の確認 k8s/containers_run_with_low_uid
Kubernetes リソースの管理境界の確認 k8s/ensure_administrative_boundaries_between_resources
機密性の高い OS ディレクトリをマウントする Kubernetes ワークロード k8s/workload_mounting_with_sensitive_os_directory
削除されていない Tiller Service k8s/tiller_service_is_not_deleted
OS ディレクトリのマウント保護を確認すべき Kubernetes コンテナー k8s/volume_mount_with_os_directory_write_permissions
Kubernetes TLS 暗号スイート設定の確認 k8s/weak_tls_cipher_suites
外部 LoadBalancer Service の使用 k8s/service_with_external_load_balancer
Pod の NetworkPolicy 設定不備 k8s/pod_misconfigured_network_policy
追加の Linux capability を持つコンテナー k8s/containers_with_added_capabilities
追加 capability の許可を確認すべき PodSecurityPolicy k8s/psp_with_added_capabilities
制御プレーンの bind-address のアクセス範囲の確認 k8s/bind_address_not_properly_set
Kubernetes のクライアント証明書 CA 設定の確認 k8s/client_certificate_authentication_not_setup_properly
クラスタ内部からのアクセス制限が必要な Tiller k8s/tiller_deployment_is_accessible_from_within_the_cluster

関連ページ142

AlwaysAdmit Admission Plugin の使用

検証を提供しない AlwaysAdmit を削除し、実際の admission ポリシーを確認してください。

AlwaysPullImages Admission Plugin の未設定

共有ノードにある非公開イメージの再利用を制御するため、取得ポリシーとレジストリ認証を確認してください。

匿名認証の無効化が未設定

不要な匿名認証と認可権限を制限し、API とノードへのアクセスを保護してください。

Audit Log の出力先が未設定

API 監査イベントを記録・保持する出力先を確認してください。

Audit Policy ファイルが未設定

監査ポリシーと出力を構成し、必要な API 操作を記録してください。

認可モードが AlwaysAllow に設定されている

AlwaysAllow の代わりに、各コンポーネントに適した認可ポリシーを使用してください。

Node Authorizer 設定の確認

Node authorizer と適切なノード認証主体で kubelet の権限を制限してください。

RBAC による認可設定の確認

RBAC authorizer とロール・バインディングを合わせて確認し、最小権限を適用してください。

コンテナーに公開された Docker デーモンソケット

不要な Docker ソケットマウントを削除し、ホストランタイムへのアクセスを隔離してください。

Encryption Provider Config が未設定

API サーバーの保存時暗号化設定と鍵を保護し、既存データへの適用も確認してください。

Encryption Provider 設定の確認

暗号化 provider の順序と鍵管理を確認し、保存データを保護してください。

HPA 対象 Deployment のレプリカ数管理の確認

自動スケーリングとデプロイツールが同じレプリカ数を繰り返し上書きしないようにしてください。

ホストの IPC 名前空間の共有

不要な hostIPC 共有を削除し、ホストの IPC リソースとの分離を維持してください。

ホストのネットワーク名前空間の共有

不要な hostNetwork 共有を削除し、サービスのネットワーク公開範囲を管理してください。

Ingress Controller を介したワークロードの公開

内部用ワークロードを Ingress で外部に公開すると、意図しないアクセス経路が生じるおそれがあります。

Kubelet の認証局が未設定

API サーバーが kubelet の HTTPS サーバー証明書を検証できるよう、信頼する CA を指定してください。

Kubelet クライアント証明書または鍵が未設定

API サーバーが kubelet に証明書で認証するには、クライアント証明書と秘密鍵が必要です。

Kubelet クライアント証明書の自動更新が無効

kubelet クライアント証明書が期限切れになる前に更新されるよう管理してください。

Kubelet HTTPS が無効

API サーバーと kubelet の管理通信を HTTPS で保護してください。

Kubelet のカーネル設定保護の確認

起動前にカーネル設定を管理し、kubelet による自動調整の要否を確認してください。

認証のない Kubelet 読み取り専用ポートの有効化

認証のない kubelet の読み取り専用ポートを無効にし、必要な監視を保護された経路へ移してください。

Kubelet のストリーミング接続時間制限の確認

実際に適用されるアイドルタイムアウトを確認し、不要なセッションが残らないように管理してください。

Kubelet の iptables 補助チェーン設定の確認

ノードのネットワーク構成に必要な kubelet の iptables 補助チェーン設定を確認してください。

Kubernetes の AppArmor プロファイルの確認

ノードが対応する AppArmor プロファイルで、コンテナーのシステムアクセスを制限してください。

Kubernetes コンテナーの CPU limit 設定の確認

CPU 上限の必要性とスロットリングの影響をワークロードの要件に合わせて確認してください。

Kubernetes コンテナーの CPU request 設定の確認

実際の CPU 要求に合うスケジューリング基準を設定してください。

Kubernetes の cluster-admin バインド権限の確認

クラスター全体の管理権限は、必要な主体だけに付与してください。

Kubernetes CronJob の開始期限の確認

開始の遅延を許容する範囲を、ジョブの時間要件に合わせて決めてください。

Kubernetes Dashboard の利用状況の確認

不要な Dashboard を削除し、必要な管理 UI のアクセス経路と権限を制限してください。

Kubernetes Deployment の Pod 分散配置の確認

必要な障害ドメインにレプリカを分散し、実際の配置を確認してください。

Kubernetes Deployment の PodDisruptionBudget 設定の確認

メンテナンス時に許容する自発的な Pod 中断数を決めてください。

Kubernetes の Event リクエスト制限の確認

Event の大量発生を制限し、運用に必要な Event が残ることを確認してください。

Kubernetes HPA の Object メトリクス参照設定の確認

測定対象のオブジェクトと、実際にスケールするワークロードを区別してください。

Kubernetes のイメージ admission ポリシーの確認

デプロイ時に必要なイメージポリシーが実際に適用されることを確認してください。

Kubernetes の NamespaceLifecycle admission 設定の確認

名前空間の状態に合わないリソース作成を防ぐ既定の制御を維持してください。

Kubernetes 名前空間の LimitRange 設定の確認

名前空間内の個々のリソースに合う資源基準を定義してください。

Kubernetes ネームスペースのリソースクォータの確認

ネームスペースの割り当て総量と個別コンテナーの制限を分けて管理してください。

Kubernetes NetworkPolicy の対象 Pod 選択の確認

ポリシーが意図した名前空間と Pod を実際に選択するか確認してください。

Kubernetes の Pod・コンテナーのセキュリティコンテキストの確認

各ワークロードに必要な実行ユーザー、権限、ファイルシステム保護を明示してください。

Kubernetes 制御プレーンのプロファイリング設定の確認

不要な性能診断を無効にし、必要な診断用エンドポイントへのアクセスを制限してください。

Kubernetes Secret の環境変数による受け渡しの確認

出力やデバッグによるシークレット露出を減らし、ローテーション時の利用側の更新を計画してください。

Kubernetes NodePort サービスのアクセス範囲の確認

必要なサービス入口を選び、利用できるネットワークを制限してください。

Kubernetes Service の対象とポート接続の確認

セレクター、準備済みの Pod、アプリケーションの実際の待ち受けポートを合わせて確認してください。

Kubernetes kubelet のイベント送信レート設定の確認

イベントの観測要件と API サーバーの負荷を合わせて考慮してください。

kubelet のホスト名上書き設定の確認

ノードの識別名を認証と運用の構成に一致させてください。

Kubernetes 監査ログの世代数設定の確認

ログ量と保存要件に合わせて、ローテーション後のファイル数を決めてください。

Kubernetes 監査ログの保存期間設定の確認

監査記録の実際の保存期間を、調査と運用の要件に合わせてください。

Kubernetes 監査ログのローテーションサイズ設定の確認

ファイルサイズと世代数を合わせて調整し、必要な記録を保存してください。

Kubernetes 監査ポリシーの記録範囲の確認

必要な API 操作を記録し、本文に残る機密情報を管理してください。

Kubernetes Secret の管理方式の確認

アクセス制御、機密情報の更新、監査の要件に合う管理方式を選んでください。