For the complete documentation index, see llms.txt. This page is also available as Markdown.

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

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

概要

Kubernetes External Secrets Operatorは、各種外部APIからシークレットを同期し、Kubernetesへ挿入します。本ページでは主にExternal Secretsのセットアップ手順と、KeeperボルトからKubernetesへのシークレット同期を取り扱います。

External Secrets Operatorのドキュメントはこちらをご参照ください。

機能

  • External SecretsによるKeeperボルトからKubernetesへのシークレット同期

  • 全ポッドからKeeperボルトのシークレットへのリアルタイムアクセス

要件

本ページでは、KeeperシークレットマネージャーとKubernetes External Secrets Operatorの連携について取り扱います。本連携を利用するには、以下が必要です。

  • Keeperシークレットマネージャーへのアクセス(クイックスタートガイドをご参照ください)

    • Keeperのサブスクリプションでシークレットマネージャーアドオンが有効になっていること

    • シークレットマネージャーポリシーが有効なロールに所属していること

  • シークレットが共有されているKeeperシークレットマネージャーアプリケーション

    • アプリケーションの作成手順については、クイックスタートガイドをご参照ください

    • シークレットの読み書きができるよう、デバイスに適切な権限を付与すること

  • 以下のコマンドがインストールされていること

    • helm(Kubernetes向けパッケージマネージャー)

    • kubectl(Kubernetes向けコマンドラインツール)

設定

Helmで External Secrets をインストール

Helm で External Secrets をインストールするには、以下のコマンドを実行します。

Base64 KSM構成を格納する Kubernetes シークレットの作成

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

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

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

pencil-line

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

SecretStore の作成

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

以下のコマンドを実行すると、SecretStoreが作成されます。

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

ClusterSecretStore の場合は、作成したシークレットの名前空間を SecretAccessKeyRefnamespace に指定してください

pencil-line

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

ExternalSecret の作成

次に、ExternalSecret を作成します。

以下のコード例ではExternalSecretを作成し、指定レコードのログインおよびパスワードフィールドの値をKubernetesシークレットに格納します。これらのフィールドは target.template.data セクションで定義されます(本例では refreshInterval は12時間)。利用可能なフィールドの一覧はこちらをご参照ください。

上記コード例では、"[RECORD UID]" を対象レコードUIDに置き換えてください

namephonebankAccount など単一の文字列値に対応しない複雑なタイプでは、External Secrets は完全な JSON 文字列を返します。JSON テンプレート関数でデコードしてください

pencil-line

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

動作

  • レコードと ExternalSecret の対応関係

    • remoteRef.key はレコード ID に対応

    • remoteRef.property は以下のいずれかに対応

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

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

      • 未指定の場合、レコード全体が JSON 形式で返される

    • remoteRef.version は現時点では未対応

  • dataFrom

    • find.path は現時点では未対応

    • find.name.regexp は以下のいずれかに対応

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

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

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

    • find.tags は現時点では未対応

制限事項

本プロバイダの利用には、以下の制限があります。

  • KSM はレガシーの非型付きレコードでは動作しない

  • KSM では find.tags によるタグ指定は利用できない

  • 現時点では find.path は利用できない

プッシュシークレット

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

動作

  • selector

  • secret.name: プッシュ対象の Kubernetes シークレット名

  • data.match

  • secretKey: プッシュ対象となる選択済みシークレット内のキー

  • remoteRef.remoteKey: リモートプロバイダ上に作成するシークレットとキー

    • 形式: SecretName/SecretKey

PushSecret の作成

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

pencil-line

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

制限事項

  • 現時点では、シークレットあたり1キーのみプッシュ可能

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

セットアップの確認

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

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

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

上記の応答はエンコードされているため、デコードするには以下を実行します。

まとめ

本ページでは、Kubernetes External Secrets Operatorを介したKeeperシークレットマネージャーとKubernetesの連携手順を取り扱いました。手順に従うことで、Keeperボルトに保存したシークレットをKubernetes環境へ同期できます。シークレットの安全な管理に加え、全ポッドからのリアルタイムアクセスも可能になります。

External Secretsオペレータのセットアップ、Kubernetesシークレット・SecretStore・ExternalSecretの作成など、本連携の要点となる手順を取り扱いました。設定が完了すれば、記載のコマンドで連携を確認し、格納したシークレットを取得できます。

KeeperシークレットマネージャーとKubernetesの統合により、Kubernetes上で動作するアプリケーションのセキュリティ基盤が強化されます。シークレット管理の基盤となり、運用効率とセキュリティ体制の向上に役立ちます。

コマンド例のプレースホルダは、ご利用環境の情報に置き換えてください。KubernetesでExternal Secretsを設定・管理する際は、必要に応じて本ページをご参照ください。

最終更新