Documentation Index

Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt

Use this file to discover all available pages before exploring further.

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のアルファバージョンで提供されており、使用する前に公式ガイドをご参照ください。