Kubernetes外部シークレットオペレータ
KeeperシークレットマネージャーのシークレットをKubernetes外部シークレットオペレータと同期
概要
Kubernetes外部シークレットオペレータは、さまざまな外部APIからシークレットを同期することで、Kubernetesにシークレットを挿入します。本ページでは主に外部シークレットのセットアップに焦点を当て、KeeperボルトからKubernetesへのシークレットを同期します。
特徴
外部シークレットを介して、KeeperボルトからKubernetesへシークレットをシームレスに同期します。
Keeperボルトからすべてのポッドに渡ってシークレットにリアルタイムでアクセスできます。
要件
この統合を利用するには、以下が必要となります。
Keeperシークレットマネージャーへのアクセス (詳細についてはクイックスタートガイドのページをご参照ください)
Keeperアカウントでシークレットマネージャーのアドオンが有効である
シークレットマネージャー強制適用ポリシーが有効になっているロールのメンバーシップ
シークレットが共有されたKeeperシークレットマネージャーアプリケーション
アプリケーションの作成手順については、クイックスタートガイドをご参照ください。
シークレットを読み書きできるように、デバイスに適切な権限を追加してください。
初期化された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に置き換えます。
name
、phone
、bankAccount
などの複雑なタイプは単一の文字列値と一致しないため、外部シークレットは完全な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
に保存して、以下のコマンドを実行します。
KSMアプリケーションで、使用中のremote-secret-name
というタイトルの付いた記録は1つだけであるようにします。
制限事項
現時点では、シークレットごとに 1 つのキーのみプッシュできます。
選択した名前のレコードは存在するが、キーが存在しない場合は、レコードを更新できません。
セットアップの確認
Kubernetesシークレット、SecretStore、ExternalSecretを設定後、kubectl get secrets
コマンドでシークレットを抽出できます。
上記のコード例では、シークレットの名前はmy-external-secrets-valuesであり、以下のレコード値が保存されます。
ログインとパスワードの値を取得するには、以下のコマンドを呼び出します。
上記の応答はエンコードいるので、デコードするには以下を呼び出します。
結論
本ページでは、Kubernetes外部シークレットオペレータを介して KeeperシークレットマネージャーをKubernetesに統合するための手順を詳しく説明しました。上記の手順で、Keeperボルトに保存されているシークレットをKubernetes環境にシームレスに同期できるようになります。これにより、シークレットを安全に管理できるだけでなく、すべてのポッド間でリアルタイムのアクセスも容易になります。
概説したプロセス (外部シークレットオペレータの設定、Kubernetesシークレット、SecretStore、ExternalSecret の作成など) は、この統合の鍵となります。設定が成功すると、コマンドを使用して統合を確認し、保存されているシークレットを簡単に取得できるようになります。
KeeperシークレットマネージャーとKubernetesの統合により、Kubernetes環境で実行されるアプリケーションのセキュリティインフラストラクチャが強化されます。シークレットを管理するための強固な基盤となり、全体的な運用効率とセキュリティ体制が向上します。
コマンド例のすべてのプレースホルダ部分を実際の情報に置き換えるようにしましょう。Kubernetesで外部シークレットを設定または管理する必要があるときはいつでも、本ページをご参照ください。
最終更新