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


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

사전 요구 사항

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

절차

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

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

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

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

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

    $ 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. 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 >은 이전 단계에서 생성된 서비스 계정입니다.

  4. 시크릿에서 토큰 및 CA 인증서를 가져옵니다.

    $ SA_JWT_TOKEN=$(oc -n openshift-storage get secret odf-vault-auth-token -o jsonpath="{.data['token']}" | base64 --decode; echo)
    $ SA_CA_CRT=$(oc -n openshift-storage get secret odf-vault-auth-token -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"
    중요

    발행자가 비어 있을 때 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(Key/Value) 백엔드 경로를 활성화합니다.

    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

2.4.1. KMS를 사용할 때 키 교체 활성화 및 비활성화

보안 일반적인 사례에서는 키 교체를 정기적으로 암호화해야 합니다. KMS를 사용할 때 키 교체를 활성화하거나 비활성화할 수 있습니다.

2.4.1.1. 키 교체 활성화

키 교체를 활성화하려면 주석 keyrotation.csiaddons.openshift.io/schedule: <value>를 PersistentVolumeClaims ,Namespace 또는 StorageClass 에 추가합니다.

<value >는 @hourly,@daily,@weekly,@monthly 또는 @yearly 일 수 있습니다. & lt;value& gt;가 비어 있으면 기본값은 @weekly 입니다. 아래 예제에서는 @weekly 를 사용합니다.

중요

키 교체는 RBD 지원 볼륨에서만 지원됩니다.

네임스페이스에 주석 달기

$ oc get namespace default
NAME      STATUS   AGE
default   Active   5d2h
$ oc annotate namespace default "keyrotation.csiaddons.openshift.io/schedule=@weekly"
namespace/default annotated

StorageClass에 주석을 달 수 있습니다.

$ oc get storageclass rbd-sc
NAME       PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rbd-sc     rbd.csi.ceph.com   Delete          Immediate           true                   5d2h
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
storageclass.storage.k8s.io/rbd-sc annotated

Annotating PersistentVolumeClaims

$ oc get pvc data-pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
data-pvc  Bound    pvc-f37b8582-4b04-4676-88dd-e1b95c6abf74   1Gi        RWO            default           20h
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
persistentvolumeclaim/data-pvc annotated
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME                    SCHEDULE    SUSPEND   ACTIVE   LASTSCHEDULE   AGE
data-pvc-1642663516   @weekly                                     3s
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=*/1 * * * *" --overwrite=true
persistentvolumeclaim/data-pvc annotated
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME                  SCHEDULE    SUSPEND   ACTIVE   LASTSCHEDULE   AGE
data-pvc-1642664617   */1 * * * *                                   3s

2.4.1.2. 키 교체 비활성화

다음에 대해 키 교체를 비활성화할 수 있습니다.

  • 스토리지 클래스의 모든 PVC(영구 볼륨 클레임)
  • 특정 PVC

스토리지 클래스의 모든 PVC에 대한 키 교체 비활성화

모든 PVC에 대한 키 교체를 비활성화하려면 스토리지 클래스의 주석을 업데이트합니다.

$ oc get storageclass rbd-sc
NAME       PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rbd-sc     rbd.csi.ceph.com   Delete          Immediate           true                   5d2h
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/enable: false"
storageclass.storage.k8s.io/rbd-sc annotated

특정 영구 볼륨 클레임의 키 교체 비활성화

  1. 키 교체를 비활성화하려는 PVC의 EncryptionKeyRotationCronJob CR을 확인합니다.

    $ oc get encryptionkeyrotationcronjob -o jsonpath='{range .items[?(@.spec.jobTemplate.spec.target.persistentVolumeClaim=="<PVC_NAME>")]}{.metadata.name}{"\n"}{end}'

    여기서 <PVC_NAME >은 비활성화하려는 PVC의 이름입니다.

  2. 이전 단계의 EncryptionKeyRotationCronJob CR에 다음을 적용하여 키 교체를 비활성화합니다.

    1. csiaddons.openshift.io/state 주석을 managed 에서 unmanaged 로 업데이트합니다.

      $ oc annotate encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> "csiaddons.openshift.io/state=unmanaged" --overwrite=true

      여기서 <encryptionkeyrotationcronjob_name>은 EncryptionKeyRotationCronJob CR의 이름입니다.

    2. spec 필드에 suspend: true 를 추가합니다.

      $ oc patch encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> -p '{"spec": {"suspend": true}}' --type=merge.
  3. 저장 및 종료합니다. PVC에 대해 키 교체가 비활성화됩니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.