2.3. Kubernetes 인증 방법을 사용하여 KMS로 클러스터 전체 암호화 활성화

KMS(Key Management System)를 사용하여 클러스터 전체 암호화에 대한 Kubernetes 인증 방법을 활성화할 수 있습니다.

사전 요구 사항

  • Vault에 대한 관리자 액세스.
  • 유효한 Red Hat OpenShift Data Foundation Advanced 서브스크립션. 자세한 내용은 OpenShift Data Foundation 서브스크립션에 대한 지식베이스 문서 를 참조하십시오.
  • OpenShift Data Foundation 운영자는 Operator Hub에서 설치해야 합니다.
  • 나중에 변경할 수 없으므로 이름 지정 규칙을 따르는 백엔드 경로로 고유한 경로 이름을 선택합니다.

    참고

    OpenShift Data Foundation 4.10에서 Kubernetes 인증 방법에서는 Vault 네임스페이스를 사용할 수 없습니다.

절차

  1. 서비스 계정을 생성합니다.

    $ oc -n openshift-storage create serviceaccount <serviceaccount_name>

    여기서 &lt ;serviceaccount_name& gt;은 서비스 계정의 이름을 지정합니다.

    예를 들어 다음과 같습니다.

    $ oc -n openshift-storage create serviceaccount odf-vault-auth
  2. clusterrolebindings 및 clusterroles를 생성합니다.

    $ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:_<serviceaccount_name>_

    예를 들어 다음과 같습니다.

    $ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-auth
  3. OpenShift Container Platform 버전에 따라 다음 중 하나를 수행합니다.

    • OpenShift Container Platform 4.10의 경우:

      • 위에서 생성한 serviceaccount(SA)와 연결된 시크릿 이름을 식별합니다.

        $ VAULT_SA_SECRET_NAME=$(oc -n openshift-storage get sa <SA_NAME> -o jsonpath="{.secrets[*]['name']}") | grep -o "[^[:space:]]*-token-[^[:space:]]*"

        예를 들어 다음과 같습니다.

        $ VAULT_SA_SECRET_NAME=$(oc -n openshift-storage get sa odf-vault-auth -o jsonpath="{.secrets[*]['name']}" | grep -o "[^[:space:]]*-token-[^[:space:]]*")
    • OpenShift Container Platform 4.11의 경우:

      • serviceaccount 토큰 및 CA 인증서에 대한 시크릿을 생성합니다.

        $ cat <<EOF | oc create -f -
        apiVersion: v1
        kind: Secret
        metadata:
          name: odf-vault-auth-token
          namespace: openshift-storage
          annotations:
            kubernetes.io/service-account.name: <serviceaccount_name>
        type: kubernetes.io/service-account-token
        data: {}
        EOF

        여기서 & lt;serviceaccount_name& gt;은 이전 단계에서 생성한 서비스 계정입니다.

        $ VAULT_SA_SECRET_NAME=odf-vault-auth-token
  4. 시크릿에서 토큰 및 CA 인증서를 가져옵니다.

    $ SA_JWT_TOKEN=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -o jsonpath="{.data.token}" | base64 --decode; echo)
    $ SA_CA_CRT=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)
  5. OCP 클러스터 끝점을 검색합니다.

    $ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
  6. 서비스 계정 발행자를 가져옵니다.

    $ oc proxy &
    $ proxy_pid=$!
    $ issuer="$( curl --silent http://127.0.0.1:8001/.well-known/openid-configuration | jq -r .issuer)"
    $ kill $proxy_pid
  7. 위의 단계에서 수집된 정보를 사용하여 다음과 같이 Vault에서 Kubernetes 인증 방법을 설정합니다.

    $ vault auth enable kubernetes
    $ vault write auth/kubernetes/config \
              token_reviewer_jwt="$SA_JWT_TOKEN" \
              kubernetes_host="$OCP_HOST" \
              kubernetes_ca_cert="$SA_CA_CRT" \
              issuer="$issuer"
    중요

    issuer가 비어 있을 때 Vault에서 Kubernetes 인증 방법을 구성하려면 다음을 수행합니다.

    $ vault write auth/kubernetes/config \
              token_reviewer_jwt="$SA_JWT_TOKEN" \
              kubernetes_host="$OCP_HOST" \
              kubernetes_ca_cert="$SA_CA_CRT"
  8. Vault에서 KV(키/값) 백엔드 경로를 활성화합니다.

    Vault KV 시크릿 엔진 API의 경우 버전 1입니다.

    $ vault secrets enable -path=odf kv

    Vault KV 시크릿 엔진 API의 경우 버전 2입니다.

    $ vault secrets enable -path=odf kv-v2
  9. 시크릿에서 쓰기 또는 삭제 작업을 수행하도록 사용자를 제한하는 정책을 생성합니다.

    echo '
    path "odf/*" {
      capabilities = ["create", "read", "update", "delete", "list"]
    }
    path "sys/mounts" {
    capabilities = ["read"]
    }'| vault policy write odf -
  10. 역할을 생성합니다.

    $ vault write auth/kubernetes/role/odf-rook-ceph-op \
            bound_service_account_names=rook-ceph-system,rook-ceph-osd,noobaa \
            bound_service_account_namespaces=openshift-storage \
            policies=odf \
            ttl=1440h

    스토리지 시스템을 생성하는 동안 KMS 연결 세부 정보를 구성하는 동안 odf-rook-ceph-op 역할이 사용됩니다.

    $ vault write auth/kubernetes/role/odf-rook-ceph-osd \
            bound_service_account_names=rook-ceph-osd \
            bound_service_account_namespaces=openshift-storage \
            policies=odf \
            ttl=1440h