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シークレットマネージャーアプリケーション
アプリケーションの作成手順については、クイックスタートガイドをご参照ください
シークレットの読み書きができるよう、デバイスに適切な権限を付与すること
初期化済みのKeeperシークレットマネージャー構成
設定
Helmで External Secrets をインストール
Helm で External Secrets をインストールするには、以下のコマンドを実行します。
Base64 KSM構成を格納する Kubernetes シークレットの作成
デバイス用のシークレットマネージャー構成を作成すると、接続トークン、暗号化キー、識別子、ドメイン情報を含むBase64 JSON文字列が得られます。これらはKeeperシークレットマネージャーAPIからのデータの認証と復号化に使用されます。
Base64 JSON 構成文字列は External Secrets によって設定され、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 を作成します。
以下のコード例ではExternalSecretを作成し、指定レコードのログインおよびパスワードフィールドの値をKubernetesシークレットに格納します。これらのフィールドは target.template.data セクションで定義されます(本例では refreshInterval は12時間)。利用可能なフィールドの一覧はこちらをご参照ください。
上記コード例では、"[RECORD UID]" を対象レコードUIDに置き換えてください
name、phone、bankAccount など単一の文字列値に対応しない複雑なタイプでは、External Secrets は完全な JSON 文字列を返します。JSON テンプレート関数でデコードしてください
上記コード例の2〜27行目はYAMLファイルに保存し、kubectl apply で適用できます。たとえば、2〜27行目を externalsecret.yaml に保存し、以下を実行します。
動作
レコードと ExternalSecret の対応関係
remoteRef.keyはレコード ID に対応remoteRef.propertyは以下のいずれかに対応フィールド: レコードのフィールドタイプ
CustomFields: レコードのフィールドラベル
Files: レコードのファイル名
未指定の場合、レコード全体が JSON 形式で返される
remoteRef.versionは現時点では未対応
dataFromfind.pathは現時点では未対応find.name.regexpは以下のいずれかに対応フィールド: レコードのフィールドタイプ
CustomFields: レコードのフィールドラベル
Files: レコードのファイル名
find.tagsは現時点では未対応
制限事項
本プロバイダの利用には、以下の制限があります。
KSM はレガシーの非型付きレコードでは動作しない
KSM では
find.tagsによるタグ指定は利用できない現時点では
find.pathは利用できない
プッシュシークレット
プッシュシークレットは、カスタム KeeperSecurity レコードタイプ ExternalSecrets でのみ動作します。
動作
selectorsecret.name: プッシュ対象の Kubernetes シークレット名data.matchsecretKey: プッシュ対象となる選択済みシークレット内のキーremoteRef.remoteKey: リモートプロバイダ上に作成するシークレットとキー形式: SecretName/SecretKey
PushSecret の作成
KubernetesからKeeper Securityのレコードを作成するには、Kind=PushSecret が必要です。
上記コード例の2〜19行目はYAMLファイルに保存し、kubectl apply で適用できます。たとえば、2〜19行目を pushsecret.yaml に保存し、以下を実行します。
使用中のKSMアプリケーション内に、タイトル remote-secret-name のレコードが1件のみ存在することを確認してください
制限事項
現時点では、シークレットあたり1キーのみプッシュ可能
選択した名前のレコードは存在するがキーが存在しない場合、レコードは更新できない
セットアップの確認
Kubernetes シークレット、SecretStore、ExternalSecretの設定後、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を設定・管理する際は、必要に応じて本ページをご参照ください。
最終更新

