サーバーレスの Kubernetes、統合された継続的インテグレーションと継続的なデリバリー エクスペリエンス、エンタープライズ レベルのセキュリティとガバナンスを提供する Azure サービス。
こんにちは。 @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)からシークレットを読み取ることができます。
ドキュメントとリソース: