self-assessment-1.23
---
title: CIS 1.23 自己評価ガイド
---
## 概要
このドキュメントは[K3sセキュリティ強化ガイド](hardening-guide.md)の補足資料です。強化ガイドはK3sの本番インストールを強化するための具体的な指針を提供し、このベンチマークガイドはCIS Kubernetesベンチマークの各コントロールに対して強化されたクラスターのセキュリティレベルを評価するのに役立ちます。K3sのオペレーター、セキュリティチーム、監査人、意思決定者が使用することを目的としています。
このガイドはK3sの**v1.22-v1.23**リリースラインおよびCIS Kubernetesベンチマークの**v1.23**リリースに特化しています。
各コントロールに関する詳細な説明やテスト失敗時の修正方法については、CIS Kubernetesベンチマークv1.6の該当セクションを参照してください。ベンチマークは[Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes)で無料アカウントを作成後にダウンロードできます。
### コントロールテストの方法論
CIS Kubernetesベンチマークの各コントロールは、付随する強化ガイドに従って設定されたK3sクラスターに対して評価されました。
コントロール監査が元のCISベンチマークと異なる場合、K3sに特化した監査コマンドがテスト用に提供されます。
各コントロールの結果は以下の通りです:
- **合格** - テスト対象のK3sクラスターがベンチマークに記載された監査に合格しました。
- **該当なし** - コントロールはK3sの設計上適用されません。修正セクションでその理由を説明します。
- **警告** - コントロールはCISベンチマークで手動とされており、クラスターの使用ケースやその他の要因に依存します。これらのコントロールはK3sがその実装を妨げないことを確認するために評価されていますが、テスト対象のクラスターのさらなる設定や監査は行われていません。
このガイドは、K3sがSystemdユニットとして実行されていることを前提としています。インストール方法が異なる場合は、「監査」コマンドをシナリオに合わせて調整する必要があります。
> 注意: このガイドでは`自動化された`テスト(以前は`スコア付き`と呼ばれていたもの)のみを対象としています。
## 1.1 コントロールプレーンノードの設定ファイル
### 1.1.1 APIサーバーポッド仕様ファイルの権限が644以上に設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chmod 644 /etc/kubernetes/manifests/kube-apiserver.yaml`
### 1.1.2 APIサーバーポッド仕様ファイルの所有者がroot:rootに設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml`
### 1.1.3 コントローラーマネージャーポッド仕様ファイルの権限が644以上に設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chmod 644 /etc/kubernetes/manifests/kube-controller-manager.yaml`
### 1.1.4 コントローラーマネージャーポッド仕様ファイルの所有者がroot:rootに設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chown root:root /etc/kubernetes/manifests/kube-controller-manager.yaml`
### 1.1.5 スケジューラーポッド仕様ファイルの権限が644以上に設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chmod 644 /etc/kubernetes/manifests/kube-scheduler.yaml`
### 1.1.6 スケジューラーポッド仕様ファイルの所有者がroot:rootに設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chown root:root /etc/kubernetes/manifests/kube-scheduler.yaml`
### 1.1.7 etcdポッド仕様ファイルの権限が644以上に設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chmod 644 /etc/kubernetes/manifests/etcd.yaml`
### 1.1.8 etcdポッド仕様ファイルの所有者がroot:rootに設定されていることを確認する(自動化)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chown root:root /etc/kubernetes/manifests/etcd.yaml`
### 1.1.9 コンテナネットワークインターフェースファイルの権限が644以上に設定されていることを確認する(手動)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chmod 644 <path/to/cni/files>`
### 1.1.10 コンテナネットワークインターフェースフ ァイルの所有者がroot:rootに設定されていることを確認する(手動)
**結果:** 該当なし
**修正方法:**
コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例:`chown root:root <path/to/cni/files>`
### 1.1.11 etcdデータディレクトリの権限が700以上に設定されていることを確認する(自動化)
**結果:** 合格
**修正方法:**
etcdサーバーノードで、コマンド'ps -ef | grep etcd'から引数--data-dirとして渡されるetcdデータディレクトリを取得します。
以下のコマンドを実行します(上記で見つかったetcdデータディレクトリに基づく)。例:chmod 700 /var/lib/etcd
**監査スクリプト:** `check_for_k3s_etcd.sh`
```bash
#!/bin/bash
# このスクリプトは、k3sが実際にetcdを実行していること(sqlite3などの他のデータベースではないこと)を確認してから要件をチェックします
set -eE
handle_error() {
echo "false"
}
trap 'handle_error' ERR
if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd cluster initializing' | grep -v grep | wc -l)" -gt 0 ]]; then
case $1 in
"1.1.11")
echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
"1.2.29")
echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
"2.1")
echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
"2.2")
echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
"2.3")
echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
"2.4")
echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
"2.5")
echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth');;
"2.6")
echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
"2.7")
echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
esac
else
# 別のデータベースが実行されている場合、スキャンに合格するために必要なものを返します
case $1 in
"1.1.11")
echo "700";;
"1.2.29")
echo "--etcd-certfile AND --etcd-keyfile";;
"2.1")
echo "cert-file AND key-file";;
"2.2")
echo "--client-cert-auth=true";;
"2.3")
echo "false";;
"2.4")
echo "peer-cert-file AND peer-key-file";;
"2.5")
echo "--client-cert-auth=true";;
"2.6")
echo "--peer-auto-tls=false";;
"2.7")
echo "--trusted-ca-file";;
esac
fi
監査実行:
./check_for_k3s_etcd.sh 1.1.11
期待される結果:
'700' は '700' と等しい
返された値:
700
1.1.12 etcdデータディレクトリの所有者がetcd:etcdに設定されていることを確認する(自動化)
結果: 該当なし
修正方法: etcdサーバーノードで、コマンド'ps -ef | grep etcd'から引数--data-dirとして渡されるetcdデータディレクトリを取得します。 以下のコマンドを実行します(上記で見つかったetcdデータディレクトリに基づく)。 例:chown etcd:etcd /var/lib/etcd
1.1.13 admin.confファイルの権限が600以上に設定されていることを確認する(自動化)
結果: 該当なし
修正方法: コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。 例:chmod 600 /var/lib/rancher/k3s/server/cred/admin.kubeconfig
1.1.14 admin.confファイルの所有者がroot:rootに設定されていることを確認する(自動化)
結果: 合格
修正方法: コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。 例:chown root:root /etc/kubernetes/admin.conf
監査:
/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/admin.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/admin.kubeconfig; fi'
期待される結果:
'root:root' は 'root:root' と等しい
返された値:
root:root
1.1.15 scheduler.confファイルの権限が644以上に設定されていることを確認する(自動化)
結果: 合格
修正方法: コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。 例:chmod 644 scheduler
監査:
/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; then stat -c permissions=%a /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; fi'
期待される結果:
permissionsは644の権限を持ち、期待される権限は644以上
返された値:
permissions=644
1.1.16 scheduler.confファイルの所有者がroot:rootに設定されていることを確認する(自動化)
結果: 合格
修正方法: コントロールプレーンノードで以下のコマンドを実行します(システム上のファイルの場所に基づく)。
例えば、`chown root:root scheduler`
**監査:**
```bash
/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/scheduler.kubeconfig; fi'
期待される結果:
'root:root' が存在する
返された値:
root:root