検査機能は、ACK クラスターのワークロードにおけるセキュリティ構成ミスをスキャンし、レポートを生成します。検査レポートを使用して、失敗した項目を特定して修正し、ワークロードを安全かつ健全に保ちます。
前提条件
開始する前に、以下を確認してください。
-
Kubernetes 1.14 以降を実行しているクラスター。アップグレード手順については、「ACK クラスターの手動更新」をご参照ください。
-
(RAM ユーザーのみ) 以下に説明する RAM 認可とロールベースアクセス制御 (RBAC) 認可。
RAM ユーザーへの権限付与
RAM ユーザーを使用して[インスペクション] ページにアクセスする場合、次の両方の権限付与ステップを実行してください。
RAM 認可
クラスターリソースに対して次のアクションを許可するカスタム RAM ポリシーを作成します。
{
"Statement": [
{
"Action": [
"cs:DescribePolarisConfig",
"cs:DescribePolarisJob",
"cs:DescribePolarisCronJob",
"cs:UpdatePolarisJob",
"cs:UpdatePolarisCronJob"
],
"Effect": "Allow",
"Resource": [
"acs:cs:*:*:cluster/<yourclusterID>"
]
}
],
"Version": "1"
}
検査レポートを表示するには、クラスター内の logtail-ds コンポーネントが使用する Simple Log Service プロジェクトに対する読み取り権限も RAM ユーザーに付与してください。
{
"Version": "1",
"Statement": [
{
"Action": [
"log:Get*",
"log:List*"
],
"Resource": "acs:log:*:*:project/<Project name>/*",
"Effect": "Allow"
}
]
}
カスタム RAM ポリシーの作成方法については、「カスタム RAM ポリシーの作成」および「カスタムポリシーを使用して RAM ユーザーに権限を付与する」をご参照ください。
RBAC 認可
RAM ユーザーにクラスターに対する管理者レベルの RBAC 権限を付与します。これにより、ユーザーは [検査] ページに表示される Kubernetes リソースを管理できます。手順については、「RAM ユーザーまたは RAM ロールに RBAC 権限を付与する」をご参照ください。
検査タスクの実行
-
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
[クラスター] ページで、ご利用のクラスターを見つけてその名前をクリックします。左側のウィンドウで、[セキュリティ] > [検査] を選択します。
-
(オプション) security-inspector コンポーネントをインストールまたは更新します。security-inspector コンポーネントは無料ですが、Pod リソースを消費します。詳細については、「security-inspector」をご参照ください。
-
検査タスクを実行します。デフォルトでは、すべての検査項目が有効になっています。含める検査項目をカスタマイズするには、[定期検査の設定] をクリックして、項目の選択を調整します。検査項目の完全なリストについては、「検査項目」をご参照ください。
-
即時検査: [検査] ページの右上隅で、[検査] をクリックします。
-
[定期検査]:右上隅で、[定期検査の設定] をクリックします。表示されるパネルで、[定期検査の設定] を選択し、検査サイクルを設定します。
重要ワークロードへの影響を最小限に抑えるため、オフピーク時間帯に検査タスクを実行してください。
-
-
タスクが完了したら、[検査] タブに移動し、結果エントリを見つけて、[アクション] 列の [詳細] をクリックします。
検査結果の表示
検査詳細
[検査] タブには、ワークロードごとの結果が表示されます。[合格または不合格]、[名前空間]、および [ワークロードタイプ] フィルターを使用して、関心のあるワークロードを見つけます。この表には、ワークロードごとの [合格項目数] と [不合格項目数] が表示されます。
[詳細] をクリックすると、検査詳細ページが開き、以下が表示されます。
-
Pod とコンテナごとの合格および不合格の検査項目
-
各検査項目の説明と修正案
-
ワークロードの YAML ファイル
失敗した項目を抑制するには、検査詳細ページで [ホワイトリストに追加] をクリックします。ホワイトリストに登録された項目は、今後の検査結果から除外されます。
検査レポート
[レポート] ページには、最新の検査タスクの結果が表示されます。これには以下が含まれます。
-
概要:総検査項目数、各リソースタイプの数と割合、およびクラスター全体のヘルスステータス
-
カテゴリ統計:ヘルスチェック、イメージ、ネットワーク、リソース、およびセキュリティ条件の内訳
-
詳細結果:リソースカテゴリ、リソース名、名前空間、検査タイプ、検査項目、および結果を含むワークロードごとの結果
検査項目
次の表に、すべての 17 の検査項目を示します。
| 項目 ID | 検査項目 | 失敗条件 | リスク | 修正 |
|---|---|---|---|---|
hostNetworkSet |
コンテナとホスト間のネットワーク名前空間の共有を無効にする | hostNetwork: true が設定されている |
コンテナがホストのネットワーク名前空間を共有し、ホストのネットワークトラフィックを傍受したり、ホストネットワークを直接攻撃したりする可能性がある。 | Pod 仕様から hostNetwork フィールドを削除する。 |
hostIPCSet |
コンテナとホスト間の IPC 名前空間の共有を無効にする | hostIPC: true が設定されている |
コンテナがホストの IPC 名前空間を共有し、ホストプロセスを攻撃したり、プロセス間通信データを傍受したりする可能性がある。 | Pod 仕様から hostIPC フィールドを削除する。 |
hostPIDSet |
コンテナとホスト間の PID 名前空間の共有を無効にする | hostPID: true が設定されている |
コンテナがホストの PID 名前空間を共有し、ホストプロセスを攻撃したり、プロセスデータを収集したりする可能性がある。 | Pod 仕様から hostPID フィールドを削除する。 |
hostPortSet |
コンテナ内のプロセスがホストポートでリッスンするのを防ぐ | Pod 仕様に hostPort フィールドが存在する |
指定されたホストポートが不正に占有される可能性があり、コンテナが予期しない外部リクエストを受信する可能性がある。 | Pod 仕様から hostPort フィールドを削除する。 |
runAsRootAllowed |
コンテナの root ユーザーとしての起動を無効にする | runAsNonRoot: true が存在しない |
コンテナが root として実行される可能性があり、悪意のあるプロセスがアプリケーション、ホスト、またはクラスターに侵入する可能性がある。 | Pod 仕様に runAsNonRoot: true を追加する。 |
runAsPrivileged |
コンテナの特権モードでの起動を無効にする | privileged: true が設定されている |
特権コンテナはホストへのほぼ無制限のアクセス権を持ち、悪意のあるプロセスがアプリケーション、ホスト、またはクラスターを危険にさらす可能性がある。 | Pod 仕様から privileged フィールドを削除する。 |
privilegeEscalationAllowed |
コンテナ内の子プロセスの権限昇格を無効にする | allowPrivilegeEscalation: false が存在しない |
子プロセスが親プロセスよりも高い権限を取得する可能性があり、不正な操作を可能にする。 | Pod 仕様に allowPrivilegeEscalation: false を追加する。 |
capabilitiesAdded |
不要な Linux 機能 (capabilities) を無効にする | capabilities フィールドに SYS_ADMIN、NET_ADMIN、または ALL |
過剰な Linux 機能 (capabilities) は、悪意のあるプロセスがアプリケーション、クラスターコンポーネント、またはクラスターに侵入することを可能にする。 | コンテナに Linux 機能 (capabilities) が不要な場合は、Pod 仕様からすべての機能を削除します。コンテナに特定の Linux 機能 (capabilities) が必要な場合は、必要なものだけを残し、残りを削除します。 |
notReadOnlyRootFileSystem |
コンテナファイルシステムの読み取り専用モードを有効にする | readOnlyRootFilesystem: true が存在しない |
悪意のあるプロセスが root ファイルシステムを変更し、アプリケーションバイナリまたは構成ファイルを変更する可能性がある。 | Pod 仕様に readOnlyRootFilesystem: true を追加する。特定のディレクトリに書き込む必要がある場合は、それらのパスに対して volumeMounts を構成する。 |
cpuRequestsMissing |
コンテナの最小 CPU リソースを設定する | resources.requests.cpu が存在しない |
Pod が十分な CPU リソースを持たないノードにスケジュールされ、プロセスが遅延または劣化する原因となる可能性がある。 | Pod 仕様に resources.requests.cpu を追加する。 |
cpuLimitsMissing |
コンテナの最大 CPU リソースを設定する | resources.limits.cpu が存在しない |
異常なコンテナプロセスが過剰な CPU リソースを消費し、ノードまたはクラスター上の他のワークロードを枯渇させる可能性がある。 | Pod 仕様に resources.limits.cpu を追加する。 |
memoryRequestsMissing |
コンテナの最小メモリリソースを設定する | resources.requests.memory が存在しない |
Pod がメモリ不足のノードにスケジュールされ、プロセスが OOM killer によって終了される可能性がある。 | Pod 仕様に resources.requests.memory を追加する。 |
memoryLimitsMissing |
コンテナの最大メモリリソースを設定する | resources.limits.memory が存在しない |
異常なコンテナプロセスが過剰なメモリを消費し、ノードまたはクラスターのメモリリソースを枯渇させる可能性がある。 | Pod 仕様に resources.limits.memory を追加する。 |
readinessProbeMissing |
コンテナの readiness プローブを設定する | readinessProbe が存在しない |
コンテナが準備完了になる前にトラフィックがルーティングされ、起動時またはローリングアップデート中にリクエストの失敗を引き起こす可能性がある。 | Pod 仕様に readinessProbe を追加する。 |
livenessProbeMissing |
コンテナの liveness プローブを設定する | livenessProbe が存在しない |
コンテナの再起動を必要とするアプリケーションの障害が検出されず、サービス中断を引き起こす可能性がある。 | Pod 仕様に livenessProbe を追加する。 |
tagNotSpecified |
コンテナのイメージバージョンを指定する | image フィールドにバージョンタグがないか、タグが latest |
コンテナが意図しないイメージバージョンをプルし、予期しない動作またはサービス中断を引き起こす可能性がある。 | image フィールドを latest 以外の特定のバージョンタグに設定する。 |
anonymousUserRBACBinding |
クラスターへの匿名アクセスを禁止する | RBAC ロールバインディングが匿名ユーザーからのアクセスを許可している | 匿名ユーザーが機密性の高いクラスター情報にアクセスしたり、クラスターを攻撃したり、クラスターに侵入したりする可能性がある。 | 匿名ユーザーへのアクセスを許可する RBAC ロールバインディングを削除する。 |
イベント
検査機能は、次のイベントを発行します。
| イベントタイプ | イベント名 | コンテンツ例 | 説明 | アクション |
|---|---|---|---|---|
| 通常 | SecurityInspectorConfigAuditStart | 構成監査の実行を開始します | 検査タスクが開始されました。 | アクションは不要です。 |
| 通常 | SecurityInspectorConfigAuditFinished | 構成監査の実行が完了しました | 検査タスクが完了しました。 | アクションは不要です。 |
| 警告 | SecurityInspectorConfigAuditHighRiskFound | 構成監査の実行後、2つの高リスクが検出されました | 検査により、ワークロード内のセキュリティリスクが特定されました。 | 1. [検査] タブに移動し、[合格または不合格]、[名前空間]、および [ワークロードタイプ] フィルターを使用して、影響を受けるワークロードを特定します。 2. [詳細] をクリックして、各検査項目の結果を確認します。リスクを抑制するには、[ホワイトリストに追加] をクリックします。リスクを修正するには、詳細ページに記載されている修正案に従ってください。 |
次のステップ
-
ワークロードの検査を超えて Pod セキュリティを向上させるには、Pod セキュリティポリシーを設定します。詳細については、「Pod セキュリティポリシーの設定」をご参照ください。
-
リソースクォータ不足や高リソースウォーターマークなどのクラスターレベルのリスクを検出するには、クラスター検査機能を使用します。詳細については、「クラスター検査機能の使用」をご参照ください。