Kubernetes

Terraformで定義するKubernetesリソースのアクセス制御とワークロード運用についての文書です。

文書一覧

文書 パス
コンテナーの AppArmor 適用状態の確認 terraform/kubernetes/missing_app_armor_config
コンテナーの CPU limit 設定の確認 terraform/kubernetes/cpu_limits_not_set
コンテナーの CPU request 設定の確認 terraform/kubernetes/cpu_requests_not_set
コンテナーによるホスト PID 名前空間の共有 terraform/kubernetes/container_host_pid_is_true
コンテナーのリソース要求量と制限の確認 terraform/kubernetes/container_resources_limits_undefined
コンテナーの Linux capability 追加設定の確認 terraform/kubernetes/container_with_added_capabilities
CronJob の開始期限の確認 terraform/kubernetes/cronjob_deadline_not_configured
Deployment の Pod 分散配置の確認 terraform/kubernetes/deployment_has_no_pod_anti_affinity
Deployment の PodDisruptionBudget 構成の確認 terraform/kubernetes/deployment_without_pod_disruption_budget
コンテナーからの Docker デーモンソケットへのアクセス確認 terraform/kubernetes/docker_daemon_socket_is_exposed_to_containers
HPA Object メトリック参照の構成確認 terraform/kubernetes/hpa_targets_invalid_object
ホスト IPC 共有を許可する Kubernetes PodSecurityPolicy terraform/kubernetes/psp_allows_sharing_host_ipc
Pod によるホスト IPC 名前空間の共有 terraform/kubernetes/shared_host_ipc_namespace
ホストネットワーク共有を許可する Kubernetes PodSecurityPolicy terraform/kubernetes/psp_allows_containers_to_share_the_host_network_namespace
Pod によるホストネットワーク名前空間の共有 terraform/kubernetes/shared_host_network_namespace
Kubernetes Ingress によるワークロード公開範囲の確認 terraform/kubernetes/ingress_controller_exposes_workload
コンテナーのメモリ limit 設定の確認 terraform/kubernetes/memory_limits_not_defined
コンテナーのメモリ request 設定の確認 terraform/kubernetes/memory_requests_not_defined
コンテナーの NET_RAW 除去設定の確認 terraform/kubernetes/net_raw_capabilities_not_being_dropped
ポリシーによる NET_RAW 除去要件の確認 terraform/kubernetes/net_raw_capabilities_disabled_for_psp
Pod・コンテナーの Security Context の確認 terraform/kubernetes/pod_or_container_without_security_context
Pod 作成権限の過剰な付与 terraform/kubernetes/permissive_access_to_create_pods
NetworkPolicy の対象 Pod 選択の確認 terraform/kubernetes/network_policy_is_not_targeting_any_pod
権限昇格を許可する Kubernetes PodSecurityPolicy terraform/kubernetes/psp_allows_privilege_escalation
権限昇格が許可された Kubernetes コンテナー terraform/kubernetes/privilege_escalation_allowed
Privileged モードで実行される Kubernetes コンテナー terraform/kubernetes/container_is_privileged
Privileged 実行を許可する Kubernetes PodSecurityPolicy terraform/kubernetes/psp_set_to_privileged
コンテナーの readiness probe 構成の確認 terraform/kubernetes/readiness_probe_is_not_configured
コンテナーの root 実行を許可するポリシーの確認 terraform/kubernetes/root_containers_admitted
SYS_ADMIN capability が追加された Kubernetes コンテナー terraform/kubernetes/containers_with_sys_admin_capabilities
コンテナーの seccomp プロファイル適用の確認 terraform/kubernetes/secoomp_profile_is_not_configured
Secret を環境変数で渡す際の漏えいリスクの確認 terraform/kubernetes/secrets_as_environment_variables
Secret の読み取り権限を持つ RBAC Role terraform/kubernetes/rbac_roles_with_read_secrets_permissions
ServiceAccount の共有範囲の確認 terraform/kubernetes/shared_service_account
ServiceAccount 名が未指定 terraform/kubernetes/service_account_name_undefined_or_empty
ServiceAccount トークンの自動マウント設定の確認 terraform/kubernetes/service_account_token_automount_not_disabled
ServiceAccount の Secret アクセス権限の確認 terraform/kubernetes/service_account_allows_access_secrets
Kubernetes NodePort のアクセス範囲の確認 terraform/kubernetes/service_type_is_nodeport
StatefulSet と Headless Service の関連付けの確認 terraform/kubernetes/statefulset_without_service_name
StatefulSet の PodDisruptionBudget 構成の確認 terraform/kubernetes/statefulset_without_pod_disruption_budget
StatefulSet の永続ストレージ要件の確認 terraform/kubernetes/statefulset_requests_storage
Tiller (Helm v2) がデプロイされた Kubernetes 環境 terraform/kubernetes/tiller_is_deployed
Unmasked proc mount を許可する Kubernetes セキュリティポリシー terraform/kubernetes/container_runs_unmasked
Unsafe sysctl を許可する Kubernetes 構成 terraform/kubernetes/cluster_allows_unsafe_sysctls
ワークロードの host_port の必要性の確認 terraform/kubernetes/workload_host_port_not_specified
cluster-admin の ClusterRoleBinding 権限の確認 terraform/kubernetes/cluster_admin_role_binding_with_super_user_permissions
コンテナーの liveness probe の必要性の確認 terraform/kubernetes/liveness_probe_is_not_defined
Kubernetes の既定名前空間の使用状況の確認 terraform/kubernetes/using_default_namespace
既定の ServiceAccount 権限とトークン自動マウントの確認 terraform/kubernetes/default_service_account_in_use
RoleBinding が既定の ServiceAccount を対象にしている terraform/kubernetes/role_binding_to_default_service_account
機密性のあるホストディレクトリを使用する Kubernetes ワークロード terraform/kubernetes/workload_mounting_with_sensitive_os_directory
Kubernetes の OS ディレクトリマウント保護の確認 terraform/kubernetes/volume_mount_with_os_directory_write_permissions
Kubernetes LoadBalancer Service の公開範囲の確認 terraform/kubernetes/service_with_external_load_balancer
コンテナーイメージのダイジェスト固定の確認 terraform/kubernetes/image_without_digest
一般の Kubernetes ワークロードにおける hostPath 使用の確認 terraform/kubernetes/non_kube_system_pod_with_host_mount
ボリュームクレームのアクセスモードの確認 terraform/kubernetes/incorrect_volume_claim_access_mode_read_write_once
Kubernetes メタデータラベル形式の確認 terraform/kubernetes/metadata_label_is_invalid
コンテナーのイメージ参照の確認 terraform/kubernetes/invalid_image
追加 capabilities を許可する Kubernetes PodSecurityPolicy terraform/kubernetes/psp_with_added_capabilities
コンテナーの Linux capability 削減の確認 terraform/kubernetes/no_drop_capabilities_for_containers
コンテナーのイメージ取得ポリシーの確認 terraform/kubernetes/image_pull_policy_of_container_is_not_always
コンテナーのルートファイルシステム書き込み保護の確認 terraform/kubernetes/root_container_not_mounted_as_read_only

関連ページ62

コンテナーの AppArmor 適用状態の確認

ノードの対応と実際のプロファイルを確認し、必要な AppArmor 制限を適用してください。

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

CPU 上限の必要性と throttling の影響を、ワークロードの要件に合わせて確認してください。

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

実際の CPU 要件に合わせ、配置の基準となる要求量を設定してください。

コンテナーによるホスト PID 名前空間の共有

ホストプロセスへのアクセスが不要な Pod では host_pid を無効にしてください。

コンテナーのリソース要求量と制限の確認

実際のワークロードに合わせ、CPU・メモリ要求量と使用上限を設定してください。

コンテナーの Linux capability 追加設定の確認

追加権限の必要性を確認し、実際の capability を最小限にしてください。

CronJob の開始期限の確認

作業の時間要件に合わせ、遅れて開始できる範囲を決めてください。

Deployment の Pod 分散配置の確認

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

Deployment の PodDisruptionBudget 構成の確認

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

コンテナーからの Docker デーモンソケットへのアクセス確認

通常のアプリケーションにホストの Docker デーモンソケットを公開しないでください。

HPA Object メトリック参照の構成確認

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

ホスト IPC 共有を許可する Kubernetes PodSecurityPolicy

不要なホスト IPC 名前空間の共有をポリシーで禁止してください。

Pod によるホスト IPC 名前空間の共有

ホスト IPC リソースが不要な Pod では host_ipc を無効にしてください。

ホストネットワーク共有を許可する Kubernetes PodSecurityPolicy

不要なホストネットワーク共有をポリシーで制限してください。

Pod によるホストネットワーク名前空間の共有

ホストネットワークが不要な Pod では、個別のネットワーク名前空間を使用してください。

Kubernetes Ingress によるワークロード公開範囲の確認

Ingress の実際のアクセス経路、認証、TLS 構成がサービス要件に合っているか確認してください。

コンテナーのメモリ limit 設定の確認

メモリ使用量に合った上限と、実際に適用される制限を確認してください。

コンテナーのメモリ request 設定の確認

実際のメモリ要件に合わせ、request と適用される既定値を確認してください。

コンテナーの NET_RAW 除去設定の確認

raw socket が不要なコンテナーから NET_RAW を除去してください。

ポリシーによる NET_RAW 除去要件の確認

raw socket が不要なワークロードには、NET_RAW の除去を要求してください。

Pod・コンテナーの Security Context の確認

実際の実行権限を確認し、必要なセキュリティコンテキストを適用してください。

Pod 作成権限の過剰な付与

Pod 作成を必要な主体に限定し、デプロイできるワークロード設定も制御してください。

NetworkPolicy の対象 Pod 選択の確認

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

権限昇格を許可する Kubernetes PodSecurityPolicy

権限昇格の制限をアドミッションポリシーで適用し、複数のワークロードで最小権限を維持してください。

権限昇格が許可された Kubernetes コンテナー

実行ファイルを通じた追加権限の取得を制限するよう、コンテナーの権限昇格設定を構成してください。

Privileged モードで実行される Kubernetes コンテナー

Kubernetes コンテナーの不要な privileged モードを無効にしてください。

Privileged 実行を許可する Kubernetes PodSecurityPolicy

一般のワークロードの privileged 実行をポリシーで禁止してください。

コンテナーの readiness probe 構成の確認

実際にリクエストを処理できるかを基準に、準備状態を確認してください。

コンテナーの root 実行を許可するポリシーの確認

非 root 実行と権限昇格の制限を、別々の制御として適用してください。

SYS_ADMIN capability が追加された Kubernetes コンテナー

必要性を確認せずにコンテナーへ SYS_ADMIN capability を付与しないでください。

コンテナーの seccomp プロファイル適用の確認

Linux コンテナーに適切な seccomp プロファイルを適用し、実際の動作を確認してください。

Secret を環境変数で渡す際の漏えいリスクの確認

Secret の渡し方と、ログや診断ツールによる値の取り扱いを管理してください。

Secret の読み取り権限を持つ RBAC Role

Secret の読み取り権限を、必要な主体と名前空間に限定してください。

ServiceAccount の共有範囲の確認

用途や必要な権限が異なるワークロードでは、ServiceAccount を分離してください。

ServiceAccount 名が未指定

Pod が使うアカウントを明示し、実際の権限を確認してください。

ServiceAccount トークンの自動マウント設定の確認

Kubernetes API トークンが不要な Pod では、自動マウントを無効にしてください。

ServiceAccount の Secret アクセス権限の確認

ServiceAccount に付与する Secret の読み取り権限を、ワークロードに必要な範囲へ限定してください。

Kubernetes NodePort のアクセス範囲の確認

NodePort の必要性を確認し、実際のノードへのアクセス経路を制限してください。

StatefulSet と Headless Service の関連付けの確認

StatefulSet の安定したネットワーク識別子に使う Headless Service を構成してください。

StatefulSet の PodDisruptionBudget 構成の確認

ステートフルなアプリケーションが許容できる自発的な中断数を決めてください。

StatefulSet の永続ストレージ要件の確認

データ永続化の必要性と、容量・保持方針を併せて確認してください。

Tiller (Helm v2) がデプロイされた Kubernetes 環境

サポート終了した Helm v2 の Tiller を削除し、サポートされるデプロイ方式へ移行してください。

Unmasked proc mount を許可する Kubernetes セキュリティポリシー

Unmasked proc mount の許可を削除し、/proc の既定の保護を維持してください。

Unsafe sysctl を許可する Kubernetes 構成

Unsafe sysctl の許可を制限し、Pod の隔離とノードの安定性を保ってください。

ワークロードの host_port の必要性の確認

host_port が必要な場合だけ、ノードのポート接続とアクセス範囲を構成してください。

cluster-admin の ClusterRoleBinding 権限の確認

クラスター全体の管理が必要な主体だけに cluster-admin を付与してください。

コンテナーの liveness probe の必要性の確認

再起動で復旧できる異常状態に対して liveness probe を使用してください。

Kubernetes の既定名前空間の使用状況の確認

名前空間を明示し、RBAC・ネットワーク・リソースのポリシーを併せて構成してください。

既定の ServiceAccount 権限とトークン自動マウントの確認

ワークロードごとに権限を分離し、不要な API トークンを自動マウントしないでください。

RoleBinding が既定の ServiceAccount を対象にしている

既定のアカウントへの不要な権限付与を避け、用途別のアカウントを使ってください。