KubernetesとPAM360の連携

ManageEngineの統一特権アクセス管理製品であるPAM360は、ソフトウェアのオートメーションを促進し、アプリケーションの効果的なスケーリングと管理ができるオープンソースのコンテナオーケストレーション・ツールであるKubernetesと連携されます。

この連携では、Kubernetesクラスタに保存されたシークレットを取り込み、PAM360インターフェイスで管理できます—複数のKubernetesクラスタから取得したシークレットを取り込み、管理、および定期的にローテーションできます。連携により、エンタープライズで使用するKubernetesシークレットのコラボレーション管理を実現できます。取り込まれたシークレットがPAM360リポジトリに追加されると、クラスタ同期によるシークレットの更新や、秘密鍵のローテーション、Kubernetesリソースでのアクセスコントロールの実行による機密シークレットへのアクセスコントロール等、さまざまな操作を通じて、それらを管理できます。PAM360 は、リポジトリに保存されているシークレットに対して実行されたすべての操作に関する広範な監査証跡を記録します。

本書の終わりには、以下について学ぶことになります:

  1. 用語集
  2. 連携はどのように機能しますか?
  3. PAM360でKubernetes連携を設定
  4. シークレットの取り込みと管理
  5. シークレットのリソースへのマッピング
  6. 制限

1.用語集

用語

説明

コンテナ

ソフトウェアおよび依存関係がすべて含まれるポータブルな実行画像。

シークレット

パスワード、トークンまたはキー等、機密データを含むオブジェクト。

クラスタ

コンテナ化されたアプリケーションを実行する、ノードと呼ばれるワーカーマシンのセット。すべてのクラスタには、少なくとも1つのワーカーノードがあります。

Kubectl

Kubernetesクラスタのコントロールプレーンと、Kubernetes APIを使って通信するのに使うコマンドラインツール。

名前空間

名前空間は、単一のKubernetesクラスタ内にあるリソースのグループを分離するのに使う抽象概念です。


2.連携はどのように機能しますか?

Kubernetes-PAM360連携は、API応答を利用して、Kubernetesサーバーからシークレットを取り込み、PAM360リポジトリにリソースとして取り入れ、そこで管理および共有できます。複数の名前空間クラスタのシークレットは、PAM360から取り込み、管理できます。

PAM360は、異なるタスク用に呼び出された各種Kubernetesクラスタのシークレットを検出および保存できるリポジトリのように機能します。各名前空間から取り込まれたKubernetesシークレットは、リソース内にアカウントとして追加され、リソースタイプ「Kubernetes」に保存されます。アカウントは、ダウンロード可能なファイルから利用可能です。以下は Kubernetesシークレットのサンプルを示しています。

apiVersion: v1 kind: Secret metadata: name: pam-win8-32-0ex097 namespace: pam360-com type: Opaque data: admin: dXNlcm5hbWU= sysadmin: dXNlcm5hbWU= user-5841: dXNlcm5hbWU= automation: dXNlcm5hbWU= service-acc: dXNlcm5hbWU= local-admin: dXNlcm5hbWU=

メモ:

シークレットファイル(.json)には、お使いのKubernetes構成によっては、単一または複数のキーが含まれている場合があります。

3.PAM360でKubernetes連携を設定

メモ:

PAM360はHTTPS接続のみをサポートしています。したがって、Kubernetesサーバーに安全に接続するには、有効なSSL 証明書が必要です。Kubernetesを実行しているホストのSSL証明書をPAM360証明書ストアにインポートするには、証明書モジュールの質問11に記載されている手順に従ってください。SSL証明書をインポートするとき、SSL証明書にサブジェクト代替名(SAN)フィールドが含まれていることを確認してください。

3.1 YAMLファイルのPAM360からのダウンロード

  1. [管理] >> [DevSecOps〛 >> [コンテナプラットフォーム〛の順に移動します。
  2. 連携ページで、Kubernetesオプションの[設定]をクリックします。
    kubernetes-1
  3. 設定プロセスを開始するには、初めに、YAMLファイルをPAM360インターフェイスからダウンロードする必要があります。YAMLファイルには、Kubernetesサーバーのマスターノードへの適用が必要なコマンドが含まれます。このウインドウで、[YAMLファイルダウンロード]をクリックして、継続します。
    kubernetes-2

3.2 Kubernetesサーバーでのサービスアカウントトークンの生成

  1. YAMLファイルを、Kubernetesサーバーが実行されているマシンに移動します。以下のコマンドを実行して、YAML構成ファイルを呼び出します。このコマンドは、PAM360 とマスター ノード間の通信を認証するための新しいサービス トークンを作成します。
    kubectl apply -f pam360-config.yaml
  2. 次に、以下のコマンドを実行して、サービスアカウントトークンをKubernetesサーバーから取り込みます:
    kubectl get secrets/pam360-secret -o jsonpath='{.data.token}'
  3. サービス アカウント トークンが生成されます。デフォルトでは、トークンは Base64 でエンコードされた形式になります。このサービスアカウントトークンをコピーして、PAM360で連携を構成します。

3.3 PAM360インターフェイスでの連携の設定

  1. 次に、PAM360インターフェイスをもう一度開き、[管理] >> [DevSecOps] >> [コンテナプラットフォーム]の順に移動し、[Kubernetes]をクリックします。
  2. このウインドウで、以下の属性を追加して、新しいKubernetesクラスタをPAM360に作成します:
    1. クラスタ名
    2. Kubernetesサーバーが実行されているマシンのホスト名/IPアドレス
    3. 前の手順で生成されたサービスアカウントトークン
      kubernetes-3
  3. [テスト]をクリックします。この操作では、クラスタ構成をテストし、PAM360とKubernetesの間の通信が確立できていることを確認します。PAM360は、接続を確立する前に、3つのチェックを実行します:
    1. Kubernetesサーバーが実行されているホストマシンとの通信ができるかを確認します。
    2. Kubernetesクラスタと通信できるかを確認します。
    3. サービスアカウントトークンを認証します。
      kubernetes-4
  4. [保存]をクリックして、構成を完了します。構成詳細は、テストが正常に完了した場合のみ保存できます。
    kubernetes-5

4.シークレットの取り込みと管理

構成ファイルを保存したら、次の手順で、シークレットをKubernetesクラスタから取りl込みます。以下の手順に従ってください:

  1. 表示されるシークレットウインドウに、名前空間のリストと対応するシークレットが表示されます。必要な名前空間または個別シークレットを選択して、[保存]をクリックして、シークレットの取り込みを開始します。
    kubernetes-6
  2. Kubernetes クラスタページで、クラスタ名をクリックして、[名前空間とシークレットを入力します。]ウインドウに名前空間とクラスタに関連するすべての詳細を表示します。
    kubernetes-7
  3. 入力したKubernetesサーバー詳細がある新しいクラスタが、Kubernetesサーバーと、実行する操作とあわせて、このページに表示されます。クラスタで実行できる操作は主に4つあります:
    1. シークレットをフェッチ: [シークレットをフェッチ]アイコンをクリックして、名前空間をKubernetesサーバーから取り込みます。クラスタは、名前空間名の形式で名前が付けられます - クラスタの作成中に指定したクラスタ名です。
    2. 編集[編集]アイコンをクリックして、Kubernetes構成詳細を変更します。
    3. クラスタ削除[クラスタ削除]をクリックして、クラスタを削除します。追加して戻すには、手順3にしたがって、再構成する必要があります。削除操作をすると、シークレット関連のみ削除され、このクラスタで作成したリソース(リソースタブでまだ利用可能)は削除されませんので、注意してください。競合の可能性を避けるために、リソースを手動で削除することをお勧めします。
    4. シークレット同期:このオプションを使って、すでにPAM360に追加されたKubernetesクラスタから取り込まれたシークレットのリストを更新します。つまり、新しいシークレットセットがKubernetesサーバーのクラスタに追加された場合、同期オプションにより、PAM360での初回取り込み操作後に追加された追加シークレットをすべて取り込まれ、クラスタ情報をKubernetesサーバーと同期されます。

4.1 リアルタイムのユースケースシナリオ

ジョンは重要なデータベースを管理する IT管理者です。認証に必要なデータベースキーは、安全保管が必要な重要エンティティです。この目的のため、ジョンは複数のKubernetesシークレット内にデータベースキーを保存します。そこで、Kubernetesシークレットを保存して、単一のインターフェイスから管理するための安全なリポジトリが必要になります。

ここでPAM360-Kubernetes連携が役立ちます。この連携により、ジョンは必要に応じてKubernetesクラスタに保存されているシークレットを選択して取得できます。この操作中、PAM360は重要なシークレットキーを含む JSONファイルを取得し、リポジトリ内のファイルストアに保存します。PAM360がシークレットファイル内に含まれるシークレットキーをエンコードします。この製品は、複数のKubernetesクラスタからシークレットを取得して保存できます。Kubernetesシークレットには、システムがKubernetesサーバー外の他のシステムとやり取りするために使用するマシンIDが含まれています。この連携により、PAM360がシークレット管理のプロセスを自動化します。

ジョンは PAM360インターフェイスからパスワードリセット操作を通じて Kubernetesシークレットをローテーションすることもできます。これを実現するには、KubernetesシークレットをPAM360内の既存のリソースにマッピングして、そのリソースのパスワードを変更できます。この操作により、Kubernetesから取り込んだJSONファイル内に保存されているシークレットキーがローテーションされます。ただし、シークレットキーがKubernetesサーバー内で直接自動更新されることはありません。

5.シークレットのリソースへのマッピング

取り込んだシークレットの管理を開始するには、それらをPAM360リポジトリのリソースにマッピングします。

  1. シークレットが取り込まれたら、PAM360が、以下の命名規約で個別リソースを作成します:名前空間-クラスタ名です。リソースタブに移動し、PAM360が作成したすべてのKubernetesリソースを表示します。
  2. シークレットは、取り込まれる元の名前空間とKubernetesクラスタに基づいて、リソースでカテゴライズされます。
    kubernetes-8
  3. Kubernetesシークレットを、あなたが所有する、またはあなたと共有するリソースタイプのいずれかのリソースと関連付けることができます。
  4. リソースを選択し、[アカウントアクション] >> [シークレットの関連付け]の順に進みます
    kubernetes-9
  5. シークレットの関連付けウインドウで、ドロップダウンからリソース名、シークレット名、およびシークレットに属する秘密鍵を選択します。[マップ]をクリックして、保存します。選択したシークレットと秘密鍵がアカウントと正常に関連付けられました。複数のシークレットをリソースにマッピングすることができます。
    kubernetes-10
  6. マッピングが完了したら、シークレットをリソースからいつでも管理できます。マッピングの詳細を表示するには、Kubernetes リソースを開いて、[リソース詳細のマップ]をクリックします。このウインドウには、このKubernetesクラスタに属するシークレットのすべてのリストと、マッピングされる先のリソースが表示されます。
    kubernetes-11

    kubernetes-12

メモ:

マッピングされたリソースからトリガーされるパスワードリセット操作により、そこにマッピングされた秘密鍵のすべてが変更され、変更内容はKubernetesサーバーに反映されますので、注意してください。ただし、PAM360では、Kubernetesクラスタ内で実行されているサービスのパスワードはリセットされません。


6.制限

  1. 各シークレットをリソースに手動でマッピングし、PAM360リポジトリから管理する必要があります。新しいシークレットがオンデマンド取り込みにより、Kubernetesサーバーから同期されると必ず、シークレットをリソースタブからリソースに手動でマッピングする必要があります。
  2. PAM360のリモートパスワードリセットサポートは、Kubernetesサーバー内で実行されているサービスには拡張されません。
  3. 連携は一方向同期のみ実行します—PAM360は、Kubernetesクラスタに追加された追加シークレットを取り込むことはできますが、Kubernetesサーバーからすでに削除されたシークレットを削除することはできません。
  4. PAM360は、Kubernetesサーバーから自動的にシークレットを取り込む自動同期スケジュール設定は行いません。