Security Centerでは、自己管理型KubernetesクラスターをSecurity Centerに追加して、一元管理とリスク検出を行うことができます。 このトピックでは、セルフマネージドKubernetesクラスターをSecurity Centerに追加する方法について説明します。
制限事項
この機能をサポートしているのは、Security CenterのUltimateエディションのみです。 Security Centerの購入とアップグレード方法の詳細については、「セキュリティセンターの購入」および「Security Center のアップグレードとダウングレード」をご参照ください。
制限事項
セルフマネージドKubernetesクラスターは、サポートされているリージョンに存在する必要があります。
追加する自己管理型Kubernetesクラスターが仮想プライベートクラウド (VPC) にデプロイされている場合、クラスターは中国 (杭州) 、中国 (北京) 、中国 (上海) 、中国 (深セン) 、または中国 (香港) リージョンに存在する必要があります。
追加する自己管理型Kubernetesクラスターがインターネット上にデプロイされている場合、クラスターのリージョンに制限はありません。
前提条件
サーバー上にKubernetesクラスターが作成されます。
Dockerがインストールされています。
セルフマネージドKubernetesクラスターがハイブリッドクラウドにデプロイされ、インターネット経由でアクセスできない場合、トラフィック転送ルールが設定され、ネットワーク接続は正常です。
クラスターにアクセス制御ポリシーが設定されている場合は、コンテナーのリージョンに対応するIPアドレスがホワイトリストに追加されていることを確認します。
セルフマネージドKubernetesクラスターをSecurity Centerに追加する
Security Centerコンソールにログインします。 上部のナビゲーションバーで、管理するアセットのリージョンを選択します。 中国 または 全世界 (中国を除く) を選択できます。
左側のナビゲーションウィンドウで、 を選択します。
Cluster タブで、Self-built cluster access をクリックします。
Self-built cluster managementパネルで、Self-built cluster accessをクリックします。 表示されるパネルで、Security Centerに追加するクラスターを設定し、Generate Command をクリックします。
パラメーター
説明
Cluster name
自己管理Kubernetesクラスターの名前を入力します。 例: text-001。
Expiration Time
セルフマネージドKubernetesクラスターの追加に使用するコマンドの有効期限を選択します。
Group
クラスターを追加するグループを選択します。 このパラメーターを、クラスターが作成されるサーバーのグループに設定します。
Service Provider
クラスターが作成されるサーバーのプロバイダーを選択します。
オプションです。 Enable Log Collection セクションで、Kubernetesクラスターのログベースの脅威検出を有効にするかどうかを指定します。
ログベースの脅威検出を有効にすると、Security Centerはさらなるリスク検出のためにさらに多くの監査ログを収集します。 ログベースの脅威検出を有効にする前に、KubernetesクラスターにLogtailコンポーネントをインストールし、監査関連の設定を行う必要があります。 詳細については、「ログベースの脅威検出の有効化」をご参照ください。
クラスターが作成されたサーバーにログインし、サーバー上にtext-001という名前のYAMLファイルを作成し、生成されたコマンドをファイルにコピーしてから、サーバー上で
kubectl apply -f text-001.yaml
コマンドを実行します。 クラスターがSecurity Centerに追加されます。説明このステップでは、text-001.yamlと
kubectl apply -f text-001.yaml
の両方のtext-001がCluster nameパラメーターの値の例です。 実際の操作では、text-001を Cluster name パラメーターに指定した値に置き換える必要があります。セルフマネージドKubernetesクラスターがSecurity Centerに追加されると、Cluster タブのクラスターリストにクラスター情報が表示されます。
ログベースの脅威検出の有効化
クラスターのKubernetesバージョンが1.16以降の場合は、ログベースの脅威検出を有効にして、クラスターでより包括的なリスク検出を行うことができます。 リスクの高い操作や攻撃行動などのリスクを検出できます。
ステップ1. Logtailコンポーネントのインストール
具体的な手順については、「自己管理KubernetesクラスターへのLogtailコンポーネントのインストール」の「Logtailのインストール」をご参照ください。
ステップ2. クラスター監査機能の有効化
次のプロシージャは参照だけのためです。 詳細については、「クラスターのクラスター監査の有効化」をご参照ください。
登録済みクラスターを作成し、自己管理Kubernetesクラスターを登録済みクラスターに追加します。 詳細については、「ACKコンソールでの登録済みクラスターの作成」をご参照ください。
マスターノードのaudit-policy.yamlファイルを設定します。
マスターノードにログインし、次のテンプレートに基づいて /etc/kubernetes/audit-policy.yamlファイルを変更します。 この手順は、他のマスターノードでも実行する必要があります。
apiVersion: audit.k8s.io/v1beta1 # This is required. kind: Policy # Don't generate audit events for all requests in RequestReceived stage. omitStages: - "RequestReceived" rules: # The following requests were manually identified as high-volume and low-risk, # so drop them. - level: None users: ["system:kube-proxy"] verbs: ["watch"] resources: - group: "" # core resources: ["endpoints", "services"] - level: None users: ["system:unsecured"] namespaces: ["kube-system"] verbs: ["get"] resources: - group: "" # core resources: ["configmaps"] - level: None users: ["kubelet"] # legacy kubelet identity verbs: ["get"] resources: - group: "" # core resources: ["nodes"] - level: None userGroups: ["system:nodes"] verbs: ["get"] resources: - group: "" # core resources: ["nodes"] - level: None users: - system:kube-controller-manager - system:kube-scheduler - system:serviceaccount:kube-system:endpoint-controller verbs: ["get", "update"] namespaces: ["kube-system"] resources: - group: "" # core resources: ["endpoints"] - level: None users: ["system:apiserver"] verbs: ["get"] resources: - group: "" # core resources: ["namespaces"] # Don't log these read-only URLs. - level: None nonResourceURLs: - /healthz* - /version - /swagger* # Don't log events requests. - level: None resources: - group: "" # core resources: ["events"] # Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data, # so only log at the Metadata level. - level: Metadata resources: - group: "" # core resources: ["secrets", "configmaps"] - group: authentication.k8s.io resources: ["tokenreviews"] # Get repsonses can be large; skip them. - level: Request verbs: ["get", "list", "watch"] resources: - group: "" # core - group: "admissionregistration.k8s.io" - group: "apps" - group: "authentication.k8s.io" - group: "authorization.k8s.io" - group: "autoscaling" - group: "batch" - group: "certificates.k8s.io" - group: "extensions" - group: "networking.k8s.io" - group: "policy" - group: "rbac.authorization.k8s.io" - group: "settings.k8s.io" - group: "storage.k8s.io" # Default level for known APIs - level: RequestResponse resources: - group: "" # core - group: "admissionregistration.k8s.io" - group: "apps" - group: "authentication.k8s.io" - group: "authorization.k8s.io" - group: "autoscaling" - group: "batch" - group: "certificates.k8s.io" - group: "extensions" - group: "networking.k8s.io" - group: "policy" - group: "rbac.authorization.k8s.io" - group: "settings.k8s.io" - group: "storage.k8s.io" # Default level for all other requests. - level: Metadata
マスターノードのkube-apiserver.yamlファイルを設定します。
マスターノードにログインし、次の説明に基づいて /etc/kubernetes/manifests/kube-apiserver.yamlファイルを変更します。 この手順は、他のマスターノードでも実行する必要があります。
-- audit-log-*
パラメーターをcommandセクションに追加します。... spec: containers: - command: - kube-apiserver - --audit-log-maxbackup=10 - --audit-log-maxsize=100 - --audit-log-path=/var/log/kubernetes/kubernetes.audit - --audit-log-maxage=30 - --audit-policy-file=/etc/kubernetes/audit-policy.yaml ...
aliyun_logs_audit-*
パラメーターをenvセクションに追加します。{cluster_id} をクラスターのIDに置き換える必要があります。 クラスターのIDを取得するには、次の操作を実行します。Security Centerコンソールにログインしますし、[コンテナー] ページの [クラスター] タブを開きます。 次の図は、クラスターのIDを取得する方法を示しています。
... spec: containers: - command: - kube-apiserver - --audit-log-maxbackup=10 - --audit-log-maxsize=100 - --audit-log-path=/var/log/kubernetes/kubernetes.audit - --audit-log-maxage=30 - --audit-policy-file=/etc/kubernetes/audit-policy.yaml ... ... env: - name: aliyun_logs_audit-${cluster_id} value: /var/log/kubernetes/kubernetes.audit - name: aliyun_logs_audit-${cluster_id}_tags value: audit=apiserver - name: aliyun_logs_audit-${cluster_id}_product value: k8s-audit - name: aliyun_logs_audit-${cluster_id}_jsonfile value: "true" image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/kube-apiserver:v1.20.4-aliyun.1
次のテンプレートを使用して、/etc/kubernetes/audit-policy.yamlをkube-apiserverのポッドにマウントします。
... spec: containers: - command: - kube-apiserver - --audit-log-maxbackup=10 - --audit-log-maxsize=100 - --audit-log-path=/var/log/kubernetes/kubernetes.audit - --audit-log-maxage=30 - --audit-policy-file=/etc/kubernetes/audit-policy.yaml ... ... env: - name: aliyun_logs_audit-${cluster_id} value: /var/log/kubernetes/kubernetes.audit - name: aliyun_logs_audit-${cluster_id}_tags value: audit=apiserver - name: aliyun_logs_audit-${cluster_id}_product value: k8s-audit - name: aliyun_logs_audit-${cluster_id}_jsonfile value: "true" image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/kube-apiserver:v1.20.4-aliyun.1 ... ... volumeMounts: - mountPath: /var/log/kubernetes name: k8s-audit - mountPath: /etc/kubernetes/audit-policy.yaml name: audit-policy readOnly: true ... ... volumes: - hostPath: path: /var/log/kubernetes type: DirectoryOrCreate name: k8s-audit - hostPath: path: /etc/kubernetes/audit-policy.yaml type: FileOrCreate name: audit-policy ...
ステップ3. ログが収集されているかどうかを確認する
Simple Log Serviceコンソールにログインします。
必要なプロジェクトの名前をクリックします。
関連ログがプロジェクト内の指定されたLogstoreに収集されているかどうかを確認します。
ステップ 4. 脅威検出の有効化
Security Centerコンソールにログインします。 上部のナビゲーションバーで、管理するアセットのリージョンを選択します。 中国 または 全世界 (中国を除く) を選択できます。
左側のナビゲーションウィンドウで、 .
Cluster タブで、Self-built cluster access をクリックします。
必要なセルフマネージドKubernetesクラスターを見つけ、操作する 列の 編集 をクリックします。
Enable Log Collection タブで、Enable Kubernetes Log Reporting to Detect Threats を選択し、次のパラメーターを設定して、保存 をクリックします。
Region of Log Audit Service: ログを保存するリージョンを選択します。
Project of Log Audit Service: 手順1で作成したプロジェクトの名前を入力します。 Logtailコンポーネントをインストールします。 例: k8s-log-custom-sd89ehdq。
Logstore of Log Audit Service: ステップ1で自動的に作成されたLogstoreの名前を入力します。 Logtailコンポーネントをインストールします。 例: audit-027b007a7dd11967a9f7e2449d8dc497。