5.2.2. vaulttenantsa를 사용하기 위한 사전 요구 사항

  • OpenShift Data Foundation 클러스터는 Ready 상태입니다.
  • 외부 키 관리 시스템 (KMS)

    • 정책이 존재하고 Vault에서 키 값 백엔드 경로가 활성화되어 있는지 확인합니다. 자세한 내용은 Vault에서 키 값 및 정책 활성화를 참조하십시오.
    • Vault 서버에서 서명된 인증서를 사용하고 있는지 확인합니다.
  • 다음과 같이 테넌트 네임스페이스에 다음 serviceaccount를 생성합니다.

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
        name: ceph-csi-vault-sa
    EOF
  • OpenShift Data Foundation에서 인증하고 Vault를 사용하기 전에 Kubernetes 인증 방법을 구성해야 합니다. 아래 지침은 OpenShift Data Foundation이 Vault로 인증할 수 있도록 하는 데 필요한 serviceAccount,ClusterRoleClusterRoleBinding 을 생성 및 구성합니다.

    1. Openshift 클러스터에 다음 YAML을 적용합니다.

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: rbd-csi-vault-token-review
      ---
      kind: ClusterRole
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: rbd-csi-vault-token-review
      rules:
        - apiGroups: ["authentication.k8s.io"]
          resources: ["tokenreviews"]
          verbs: ["create", "get", "list"]
      
      ---
      kind: ClusterRoleBinding
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: rbd-csi-vault-token-review
      subjects:
        - kind: ServiceAccount
          name: rbd-csi-vault-token-review
          namespace: openshift-storage
      roleRef:
        kind: ClusterRole
        name: rbd-csi-vault-token-review
        apiGroup: rbac.authorization.k8s.io
    2. 위에서 만든 serviceaccount(SA)와 관련된 시크릿 이름을 확인합니다.

      $ oc -n openshift-storage get sa rbd-csi-vault-token-review -o jsonpath="{.secrets[*]['name']}"
    3. 시크릿에서 토큰 및 CA 인증서를 가져옵니다.

      $ oc get secret <secret associated with SA> -o jsonpath="{.data['token']}" | base64 --decode; echo
      $ oc get secret <secret associated with SA> -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo
    4. OCP 클러스터 끝점을 검색합니다.

      $ oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}"
    5. 다음과 같이 Vault에서 kubernetes 인증 방법을 설정하려면 위 단계에서 수집된 정보를 사용합니다.

      $ vault auth enable kubernetes
      $ vault write auth/kubernetes/config token_reviewer_jwt=<SA token> kubernetes_host=<OCP cluster endpoint> kubernetes_ca_cert=<SA CA certificate>
    6. 테넌트 네임스페이스에 대한 Vault에서 역할을 생성합니다.

      $ vault write "auth/kubernetes/role/csi-kubernetes" bound_service_account_names="ceph-csi-vault-sa" bound_service_account_namespaces=<tenant_namespace> policies=<policy_name_in_vault>

      CSI-kubernetes 는 OpenShift Data Foundation에서 Vault를 찾는 기본 역할 이름입니다. Openshift Data Foundation 클러스터의 테넌트 네임스페이스의 기본 서비스 계정 이름은 ceph-csi-vault-sa 입니다. 이러한 기본값은 테넌트 네임스페이스에 ConfigMap을 생성하여 덮어쓸 수 있습니다.

      기본 이름을 재정의하는 방법에 대한 자세한 내용은 테넌트 ConfigMap을 사용하여 Vault 연결 세부 정보를 참조하십시오.

  • PV encrytpion에 대해 vaulttenantsa 방법을 사용하는 스토리지 클래스를 생성하려면 기존 ConfigMap을 편집하거나 Vault와의 연결을 설정하는 데 필요한 모든 정보를 보유하는 csi-kms-connection-details 라는 ConfigMap을 생성해야 합니다.

    아래 제공된 샘플 yaml을 사용하여 csi-kms-connection-detail ConfigMap을 업데이트하거나 생성할 수 있습니다.

    apiVersion: v1
    data:
      vault-tenant-sa: |-
        {
          "encryptionKMSType": "vaulttenantsa",
          "vaultAddress": "<https://hostname_or_ip_of_vault_server:port>",
          "vaultTLSServerName": "<vault TLS server name>",
          "vaultAuthPath": "/v1/auth/kubernetes/login",
          "vaultAuthNamespace": "<vault auth namespace name>"
          "vaultNamespace": "<vault namespace name>",
          "vaultBackendPath": "<vault backend path name>",
          "vaultCAFromSecret": "<secret containing CA cert>",
          "vaultClientCertFromSecret": "<secret containing client cert>",
          "vaultClientCertKeyFromSecret": "<secret containing client private key>",
          "tenantSAName": "<service account name in the tenant namespace>"
        }
    metadata:
      name: csi-kms-connection-details
    • EncryptionKMSType: 자격 증명 모음 인증에 서비스 계정을 사용하도록 vaulttenantsa 로 설정해야 합니다.
    • vaultAddress: 포트 번호를 사용하여 자격 증명 모음 서버의 호스트 이름 또는 IP 주소입니다.
    • vaultTLSServerName: (선택 사항) 자격 증명 모음 TLS 서버 이름
    • vaultAuthPath: (선택 사항) Vault에서 kubernetes auth 메서드가 활성화된 경로입니다. 기본 경로는 kubernetes 입니다. kubernetes 이외의 다른 경로에서 auth 메서드를 활성화하면 이 변수를 "/v1/auth/<path>/login" 으로 설정해야 합니다.
    • vaultAuthNamespace: (선택 사항) kubernetes auth 메서드가 활성화된 Vault 네임스페이스입니다.
    • vaultNamespace: (선택 사항) 키를 저장하는 데 사용되는 백엔드 경로가 존재하는 Vault 네임스페이스
    • vaultBackendPath: 암호화 키가 저장되는 Vault의 백엔드 경로입니다.
    • vaultCAFromSecret: Vault의 CA 인증서를 포함하는 OpenShift Data Foundation 클러스터의 시크릿
    • vaultClientCertFromSecret: Vault의 클라이언트 인증서를 포함하는 OpenShift Data Foundation 클러스터의 시크릿
    • vaultClientCertKeyFromSecret: Vault의 클라이언트 개인 키를 포함하는 OpenShift Data Foundation 클러스터의 시크릿
    • tenantSAName: (선택 사항) 테넌트 네임스페이스의 서비스 계정 이름입니다. 기본값은 ceph-csi-vault-sa 입니다. 다른 이름을 사용해야 하는 경우 이 변수를 적절하게 설정해야 합니다.

다음으로 5.2.3절. “PV 암호화용 스토리지 클래스 생성 절차” 의 단계를 따르십시오.