Kubernetes外部シークレットオペレータ

KeeperシークレットマネージャーのシークレットをKubernetes外部シークレットオペレータと同期

概要

Kubernetes外部シークレットオペレータは、さまざまな外部APIからシークレットを同期することで、Kubernetesにシークレットを挿入します。本ページでは主に外部シークレットのセットアップに焦点を当て、KeeperボルトからKubernetesへのシークレットを同期します。

特徴

  • 外部シークレットを介して、KeeperボルトからKubernetesへシークレットをシームレスに同期します。

  • Keeperボルトからすべてのポッドに渡ってシークレットにリアルタイムでアクセスできます。

要件

この統合を利用するには、以下が必要となります。

セットアップ

Helmで外部シークレットをインストールする

以下のコマンドを実行します。

Base64 KSM 構成を保存するためのKubernetesシークレットを作成

ご利用のデバイス用にSecrets Manager構成を作成すると、KeeperシークレットマネージャーAPI からのデータの認証と復号化に使用される接続トークン、暗号化キー、識別子、ドメイン情報を含む Base64 JSON 文字列が作成されます。

Base64 JSON構成文字列は外部シークレットによって設定されKeeper Securityに対して認証し、通常のKubernetesシークレット内で定義されます。

以下のコマンドを呼び出すと、Keeperシークレットマネージャーへの認証に使用される Kubernetesシークレットが作成されます。

注: 上記のコード例の2行目から8行目は 、YAMLファイルに保存してkubectl applyコマンドで適用できます。たとえば、2行目から8行目をsecrets.yamlに保存して、以下のコマンドを実行します。

SecretStoreを作成

Base64 JSON文字列に定義したksm_configでKubernetesシークレットを作成すると、SecretStoreを作成できます。

以下のコマンドを呼び出すと、SecretStoreが作成されます。

上記の例では、ボルト内のレコードが保存されている共有フォルダのUIDでfolderIDを定義します。

ClusterSecretStoreの場合は、作成したシークレットの名前空間で SecretAccessKeyRefのnamespaceを指定するようにしてください。

注: 上記のコード2行目から13行目は 、YAMLファイルに保存して、kubectl applyコマンドで適用できます。たとえば、2行目から13行目をsecretstore.yamlに保存して、以下のコマンドを実行します。

ExternalSecretを作成

次に、ExternalSecretを作成します。

以下のコードでは、外部シークレットを作成し、指定したレコードのログインとパスワードフィールドの値をKubernetesシークレットに保存します。これらのフィールドはtarget.template.dataセクションで定義され、30秒ごとに更新されます。サポートされているフィールドのリストについては、こちらのページをご覧ください。

上記のコード例で、[RECORD UID]を目的のレコードUIDに置き換えます。

namephonebankAccountなどの複雑なタイプは単一の文字列値と一致しないため、外部シークレットは完全なJSON文字列を返します。JSONテンプレート関数を使用してデコードします。

注: 上記のコード例の2行目から27行目は 、YAMLファイルに保存して、kubectl applyコマンドで適用できます。たとえば、2行目から27行目をexternalsecret.yamlに保存して、以下のコマンドを実行します。

動作

  • RecordがExternalSecretがマッピングされる方法

    • remoteRef.keyがレコードIDに一致

    • remoteRef.propertyが以下のいずれかに一致

      • フィールド: レコードのフィールドのタイプ

      • CustomFields: レコードのフィールドのラベル

      • ファイル: レコードのファイル名

      • 空白の場合、レコード全体がJSON形式で返されます。

    • remoteRef.versionは現在サポートされていません。

  • dataFrom:

    • find.pathは現在サポートされていません。

    • find.name.regexpが以下のいずれかに一致

      • フィールド: レコードのフィールドのタイプ

      • CustomFields: レコードのフィールドのラベル

      • ファイル: レコードのファイル名

    • find.tagsは現時点ではサポートされていません。

制限事項

このプロバイダの使用にはいくつかの制限があります。

  • Keeperシークレットマネージャーは、レガシーのタイプなしのレコードでは動作しません。

  • Keeperシークレットマネージャーではfind.tagsタグの使用はサポートされていません。

  • find.pathは現在サポートされていません。

シークレットをプッシュ

プッシュシークレットは、カスタムKeeperSecurityレコードタイプのExternalSecretsでのみ機能します。

動作

  • selector:

  • secret.name: プッシュするKubernetes シークレットの名前

  • data.match:

  • secretKey: プッシュする選択済みシークレットのキー

  • remoteRef.remoteKey: リモートプロバイダで作成されるシークレットとキー

    • 形式: SecretName/SecretKey

PushSecretを作成

KubernetesからKeeper Securityレコードを作成するには、Kind=PushSecretが必要となります。

注: 上記のコード例の2行目から19行目は 、YAMLファイルに保存して、kubectl applyコマンドで適用できます。たとえば、 2行目から19行目をpushsecret.yamlに保存して、以下のコマンドを実行します。

制限事項

  • 現時点では、シークレットごとに 1 つのキーのみプッシュできます。

  • 選択した名前のレコードは存在するが、キーが存在しない場合は、レコードを更新できません。

セットアップの確認

KubernetesシークレットSecretStoreExternalSecretを設定後、kubectl get secretsコマンドでシークレットを抽出できます。

上記のコード例では、シークレットの名前はmy-external-secrets-valuesであり、以下のレコード値が保存されます。

ログインとパスワードの値を取得するには、以下のコマンドを呼び出します。

上記の応答はエンコードいるので、デコードするには以下を呼び出します。

結論

本ページでは、Kubernetes外部シークレットオペレータを介して KeeperシークレットマネージャーをKubernetesに統合するための手順を詳しく説明しました。上記の手順で、Keeperボルトに保存されているシークレットをKubernetes環境にシームレスに同期できるようになります。これにより、シークレットを安全に管理できるだけでなく、すべてのポッド間でリアルタイムのアクセスも容易になります。

概説したプロセス (外部シークレットオペレータの設定、Kubernetesシークレット、SecretStore、ExternalSecret の作成など) は、この統合の鍵となります。設定が成功すると、コマンドを使用して統合を確認し、保存されているシークレットを簡単に取得できるようになります。

KeeperシークレットマネージャーとKubernetesの統合により、Kubernetes環境で実行されるアプリケーションのセキュリティインフラストラクチャが強化されます。シークレットを管理するための強固な基盤となり、全体的な運用効率とセキュリティ体制が向上します。

コマンド例のすべてのプレースホルダ部分を実際の情報に置き換えるようにしましょう。Kubernetesで外部シークレットを設定または管理する必要があるときはいつでも、本ページをご参照ください。

最終更新