すべてのプロダクト
Search
ドキュメントセンター

Security Center:セルフマネージドKubernetesクラスターをSecurity Centerに追加する

最終更新日:Dec 27, 2024

Security Centerでは、自己管理型KubernetesクラスターをSecurity Centerに追加して、一元管理とリスク検出を行うことができます。 このトピックでは、セルフマネージドKubernetesクラスターをSecurity Centerに追加する方法について説明します。

制限事項

この機能をサポートしているのは、Security CenterのUltimateエディションのみです。 Security Centerの購入とアップグレード方法の詳細については、「セキュリティセンターの購入」および「Security Center のアップグレードとダウングレード」をご参照ください。

制限事項

セルフマネージドKubernetesクラスターは、サポートされているリージョンに存在する必要があります。

  • 追加する自己管理型Kubernetesクラスターが仮想プライベートクラウド (VPC) にデプロイされている場合、クラスターは中国 (杭州) 、中国 (北京) 、中国 (上海) 、中国 (深セン) 、または中国 (香港) リージョンに存在する必要があります。

  • 追加する自己管理型Kubernetesクラスターがインターネット上にデプロイされている場合、クラスターのリージョンに制限はありません。

前提条件

  • サーバー上にKubernetesクラスターが作成されます。

  • Dockerがインストールされています。

  • セルフマネージドKubernetesクラスターがハイブリッドクラウドにデプロイされ、インターネット経由でアクセスできない場合、トラフィック転送ルールが設定され、ネットワーク接続は正常です。

    トラフィック転送ルールを設定するにはどうすればよいですか。

    ECS (Elastic Compute Service) インスタンスを指定し、自己管理KubernetesクラスターのAPIサーバーがインストールされているオンプレミスサーバーにECSインスタンス宛てのトラフィックを転送するようにトラフィック転送ルールを設定します。

    次のコマンド例では、IPアドレス10.0.XX.XXを使用するECSインスタンスのポートAのトラフィックは、IPアドレス192.168.XX.XXを使用するオンプレミスサーバーのポートBに転送されます。

    • CentOS 7のコマンド例

      • ファイアウォール-cmdを使用する

        firewall-cmd --permanent --add-forward-port=port=<Port A>:proto=tcp:toaddr=<192.168.XX.XX>:toport=<Port B>
      • iptablesの使用

      • # Enable port forwarding.
        echo "1" 	> /proc/sys/net/ipv4/ip_forward
        
        Configure port forwarding.
        iptables -t nat -A PREROUTING -p tcp --dport <Port A> -j DNAT --to-destination <192.168.XX.XX>:<Port B>
    • Windows用のコマンドの例

      netsh interface portproxy add v4tov4 listenport=<Port A> listenaddress=* connectaddress=<192.168.XX.XX> connectport=<Port B> protocol=tcp
  • クラスターにアクセス制御ポリシーが設定されている場合は、コンテナーのリージョンに対応するIPアドレスがホワイトリストに追加されていることを確認します。

    リージョンとIPアドレス

    リージョン

    パブリックIPアドレス

    プライベートIPアドレス

    中国 (杭州)

    47.96.166.214

    100.104.12.64/26

    中国 (上海)

    139.224.15.48、101.132.180.26、47.100.18.171、47.100.0.176、139.224.8.64、101.132.70.106、101.132.156.228、106.15.36.12、139.196.168.125、47.101.178.223、および47.101.220.176

    100.104.43.0/26

    中国 (青島)

    47.104.111.68

    100.104.87.192/26

    中国 (北京)

    47.95.202.245

    100.104.114.192/26

    中国 (張家口)

    39.99.229.195

    100.104.187.64/26

    中国 (フフホト)

    39.104.147.68

    100.104.36.0/26

    中国 (深セン)

    120.78.64.225

    100.104.250.64/26

    中国 (広州)

    8.134.118.184

    100.104.111.0/26

    中国 (香港)

    8.218.59.176

    100.104.130.128/26

    日本 (東京)

    47.74.24.20

    100.104.69.0/26

    シンガポール

    8.219.240.137

    100.104.67.64/26

    米国 (シリコンバレー)

    47.254.39.224

    100.104.145.64/26

    米国 (バージニア)

    47.252.4.238

    100.104.36.0/26

    ドイツ (フランクフルト)

    47.254.158.71

    172.16.0.0/20

    イギリス (ロンドン)

    8.208.14.12

    172.16.0.0/20

    インドネシア (ジャカルタ)

    149.129.238.99

    100.104.193.128/26

セルフマネージドKubernetesクラスターをSecurity Centerに追加する

  1. Security Centerコンソールにログインします。 上部のナビゲーションバーで、管理するアセットのリージョンを選択します。 中国 または 全世界 (中国を除く) を選択できます。

  2. 左側のナビゲーションウィンドウで、アセットセンター > コンテナアセットを選択します。

  3. Cluster タブで、Self-built cluster access をクリックします。

  4. Self-built cluster managementパネルで、Self-built cluster accessをクリックします。 表示されるパネルで、Security Centerに追加するクラスターを設定し、Generate Command をクリックします。

    パラメーター

    説明

    Cluster name

    自己管理Kubernetesクラスターの名前を入力します。 例: text-001。

    Expiration Time

    セルフマネージドKubernetesクラスターの追加に使用するコマンドの有効期限を選択します。

    Group

    クラスターを追加するグループを選択します。 このパラメーターを、クラスターが作成されるサーバーのグループに設定します。

    Service Provider

    クラスターが作成されるサーバーのプロバイダーを選択します。

  5. オプションです。 Enable Log Collection セクションで、Kubernetesクラスターのログベースの脅威検出を有効にするかどうかを指定します。

    ログベースの脅威検出を有効にすると、Security Centerはさらなるリスク検出のためにさらに多くの監査ログを収集します。 ログベースの脅威検出を有効にする前に、KubernetesクラスターにLogtailコンポーネントをインストールし、監査関連の設定を行う必要があります。 詳細については、「ログベースの脅威検出の有効化」をご参照ください。

  6. クラスターが作成されたサーバーにログインし、サーバー上に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. クラスター監査機能の有効化

次のプロシージャは参照だけのためです。 詳細については、「クラスターのクラスター監査の有効化」をご参照ください。

  1. 登録済みクラスターを作成し、自己管理Kubernetesクラスターを登録済みクラスターに追加します。 詳細については、「ACKコンソールでの登録済みクラスターの作成」をご参照ください。

  2. マスターノードの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
  3. マスターノードの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を取得する方法を示しています。获取集群Cluster-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. ログが収集されているかどうかを確認する

  1. Simple Log Serviceコンソールにログインします。

  2. 必要なプロジェクトの名前をクリックします。

  3. 関連ログがプロジェクト内の指定されたLogstoreに収集されているかどうかを確認します。

ステップ 4. 脅威検出の有効化

  1. Security Centerコンソールにログインします。 上部のナビゲーションバーで、管理するアセットのリージョンを選択します。 中国 または 全世界 (中国を除く) を選択できます。

  2. 左側のナビゲーションウィンドウで、アセットセンター > コンテナアセット.

  3. Cluster タブで、Self-built cluster access をクリックします。

  4. 必要なセルフマネージドKubernetesクラスターを見つけ、操作する 列の 編集 をクリックします。

  5. 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。