プライベートクラスター(AKS)からKey Vaultに登録しているDB資格情報を取得したい

12G-2230 0 評価のポイント
2026-01-14T01:12:39.85+00:00

AKS(プライベートクラスター)のPod上で稼働しているJavaアプリケーションから、Key Vaultに登録されているDB資格情報(シークレット)を取得したいです。

どのような方法を実施すれば上記が実現できるのでしょうか。

Azure Kubernetes Service
Azure Kubernetes Service

サーバーレスの Kubernetes、統合された継続的インテグレーションと継続的なデリバリー エクスペリエンス、エンタープライズ レベルのセキュリティとガバナンスを提供する Azure サービス。


1 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2026-01-14T01:43:45.28+00:00

    こんにちは。 @12G-2230

    こんにちは。 プライベートAKSクラスター上で実行されているJavaアプリケーションからAzure Key Vaultに保存されているデータベース認証情報を取得しようとしているようですね。 その方法を以下に示します。 AKS PodsからKey Vaultシークレットにアクセスする手順:

    マネージドIDの設定:

    Azureでユーザー割り当てマネージドIDを作成します。 このIDは、アプリケーションがKey Vaultにアクセスするために使用されます。

    このマネージドIDに、Key Vault内のシークレットにアクセスするための適切なロール(例:Key Vaultリーダー)を割り当ててください。

    マネージドIDを使用したAKSの構成:

    AKSクラスターは、このマネージドIDを使用するように構成する必要があります。 これは、AKSクラスターの作成時、または既存のクラスターを更新する際に行うことができます。

    Secrets Store CSIドライバーのインストール:

    AKSクラスターにSecrets Store CSIドライバーをデプロイします。 このドライバーを使用すると、Azure Key VaultのシークレットをPodのボリュームとしてマウントできます。

    こちらのインストール手順に従ってください。

    SecretProviderClassの作成:

    Key Vaultへのアクセス方法と取得するシークレットを指定するSecretProviderClassリソースを定義します。 簡単な例を以下に示します。

    apiVersion: secrets-store.csi.k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: my-secret-provider
    spec:
      provider: azure
      secretObjects:                             
        - secretName: my-db-secret               
          type: Opaque
          data:                                 
            - key: username
              objectName: db-username
            - key: password
              objectName: db-password
      parameters:
        usePodIdentity: "true" 
        keyvaultName: "<YOUR-KEY-VAULT-NAME>"
        cloud: "AzurePublicCloud"
        tenantId: "<YOUR-TENANT-ID>"
    
    
    

    Pod にシークレットをマウントする:

    Pod の仕様で SecretProviderClass を参照することで、シークレットを環境変数またはファイルとしてコンテナにマウントできます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-java-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-java-app
      template:
        metadata:
          labels:
            app: my-java-app
        spec:
          containers:
          - name: app
            image: <YOUR-JAVA-APP-IMAGE>
            volumeMounts:
            - name: secrets-store
              mountPath: /mnt/secrets
          volumes:
          - name: secrets-store
            csi:
              driver: secrets-store.csi.k8s.io
              volumeAttributes:
                secretProviderClass: my-secret-provider
    

    アプリケーションでシークレットにアクセスする方法:

    Javaアプリケーションでは、マウントされたパス(例:/mnt/secrets/db-username および /mnt/secrets/db-password)からシークレットを読み取ることができます。

    ドキュメントとリソース:

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません

お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "推奨" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。