Secret Manager連携

Prev Next

VPC環境で利用できます。

Ncloud Kubernetes Serviceでは Secret Managerに保存された Secretを連携して使用できます。この機能は Kubernetesで提供する Screts Store CSI Driverと Ncloud Kubernetes Serviceで提供する secrets-store-csi-drvier-provider-ncpを通じて提供します。

制限事項

  • Secret Managerは、韓国と日本リージョンでのみ提供します。

システム要件

  • Secret Managerを使用している必要があります。
  • サブアカウントの場合、Secret Managerを照会するために NCP_SECRETMANAGER_USER権限が必要です。

機能

  • Secret Managerに保存された Secretを Podにボリュームとしてマウントして使用できます。
  • Secret Managerに保存された Secretロテーションが発生する場合、Podにマウントされた Secretも自動的にロテーションできます。
  • Secret Managerに保存された Secretを Kubernetesの Secretと同期できます。

インストール

Secret Manager連携のために secrets-store-csi-driverと secrets-store-csi-driver-provider-ncpをインストールします。

  1. 以下のコマンドを通じて secrets-store-csi-driverをインストールします。

    • Secretロテーション機能を使用するには、--set enableSecretRotation=true設定を追加します。
    • Kubernetes Secret同期化機能を使用するには、--set syncSecret.enabled=true設定を追加します。
    $ helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
    $ helm install csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver --namespace kube-system
    
  2. Secret Manager API呼び出しのために認証情報を作成します。

    • ncloud_access_key_id: Ncloud AcessKey
    • ncloud_secret_access_key: Ncloud SecretKey
    • secretmanager_api_url
      • 韓国: https://ocapi-kr.ncloud.com/secretmanager/api/v1
      • 日本: https://ocapi-jp.ncloud.com/secretmanager/api/v1
    $ vi configure
    ncloud_access_key_id=<ACCESS_KEY_ID>
    ncloud_secret_access_key=<SECRET_ACESS_KEY>
    secretmanager_api_url=<SecretManager API URL>
    
  3. 以下のコマンドを通じて認証情報を Kubernetes Secretで作成します。

    $ kubectl -n kube-system create secret generic ncp-secrets-store-credentials --from-file=./configure
    
  4. 以下のコマンドを通じて該当するリージョンの secrets-store-csi-driver-provider-ncpをインストールします。

    # 韓国リージョン
    $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/secrets-store-csi-driver-provider-ncp/pub/kr/v0.1.0/provider-ncp.yaml
    
    # 日本リージョン
    $ kubectl --kubeconfig=$KUBE_CONFIG apply -f https://kr.object.ncloudstorage.com/nks-download/secrets-store-csi-driver-provider-ncp/pub/jp/v0.1.0/provider-ncp.yaml
    
    
  5. 以下のコマンドを通じてインストールされた Podが正常に動作するか確認します。

$ kubectl -n kube-system get po -l app.kubernetes.io/instance=csi-secrets-store
$ kubectl -n kube-system get po -l app=secrets-store-csi-driver-provider-ncp

使用

SecretProviderClassの定義

SecretProviderClassを定義して Secret Managerと連携された Secretを使用できます。

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: my-secret
  namespace: my-namespace
spec:
  provider: ncp
  parameters:
    objects: |
      - objectName: "my-secret"
        objectType: "secretmanager"
        path: "my-secret.txt"
      - objectName: "my-secret"
        objectType: "secretmanager"
        secretKey: "id"
        path: "id.txt"
      - objectName: "my-secret"
        objectType: "secretmanager"
        secretKey: "password"
        path: "password.txt"
  secretObjects:
  - secretName: my-secret
    type: Opaque
    data:
    - objectName: my-secret.txt
      key: my-key
  • provider: ncp
  • Objects: ファイルとしてマウントする Secretを定義します。
    • objectName: SecretManagerに作成した Secret名
    • objectType: secretmanager
    • path: Podにマウントされるファイル名
    • secretKey(任意項目): SecretManagerに保存された Secretの中から、その Keyの Valueのみ使用。定義しないとその Secretに保存されたすべての Key/Valueを JSON形式で使用
  • secretObjects(任意項目): Kubernetes Secretと同期する場合に設定
    • secretName: 作成される Kubernetes Secret
    • data.objectName: Podにマウントされているファイル名(path)
    • data.key: 作成された Secret dataの key名

Podマウント設定

Podの volumesに secretProviderClassを設定して使用できます。

  volumes:
  - name: my-secret
    csi:
      driver: secrets-store.csi.k8s.io
      readOnly: true
      volumeAttributes:
        secretProviderClass: "my-secret"

Secretマウントステータスの確認

SecretProviderClassPodStatusを照会して現在 Podにマウントされている Secretのステータスを確認できます。

$ kubectl get secretproviderclasspodstatuses <pod_name>-<namespace>-<secretproviderclass_name> -o yaml
...
status:
  mounted: true
  objects:
  - id: secretmanager/my-secret
    version: "1"
  podName: my-pod
  secretProviderClassName: my-secret
  targetPath: /var/lib/kubelet/pods/1d401b1a-9a16-4335-b015-59e11e87b349/volumes/kubernetes.io~csi/my-secret/mount

Secretロテーション機能の使用

Secret Managerの Secretロテーション設定を参照して Secretロテーションを実行できます。Secret Managerの Secretをロテーションすると、その Secretにマウントされたファイルも自動的に同期します。この機能は secrets-store-csi-driverのアルファバージョンで提供されており、使用する前に公式ガイドをご参照ください。