2.3. Kubernetes 인증 방법을 사용하여 KMS로 클러스터 전체 암호화 활성화
KMS(Key Management System)를 사용하여 클러스터 전체 암호화를 위해 Kubernetes 인증 방법을 활성화할 수 있습니다.
사전 요구 사항
- Vault에 대한 관리자 액세스 권한이 있어야 합니다.
- 유효한 Red Hat OpenShift Data Foundation Advanced 서브스크립션. 자세한 내용은 OpenShift Data Foundation 서브스크립션에 대한 지식베이스 문서를 참조하십시오.
- OpenShift Data Foundation Operator는 Operator Hub에서 설치해야 합니다.
이름 지정 규칙을 따르는 백엔드
경로로
고유한 경로 이름을 선택합니다. 이 경로 이름은 나중에 변경할 수 없습니다.참고OpenShift Data Foundation 4.11의 Kubernetes 인증 방법은 Vault 네임스페이스 사용이 지원되지 않습니다.
절차
서비스 계정을 생성합니다.
oc -n openshift-storage create serviceaccount <serviceaccount_name>
$ oc -n openshift-storage create serviceaccount <serviceaccount_name>
Copy to Clipboard Copied! 여기서 &
lt;serviceaccount_name&
gt;은 서비스 계정의 이름을 지정합니다.예를 들면 다음과 같습니다.
oc -n openshift-storage create serviceaccount odf-vault-auth
$ oc -n openshift-storage create serviceaccount odf-vault-auth
Copy to Clipboard Copied! 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:_<serviceaccount_name>_
Copy to Clipboard Copied! 예를 들면 다음과 같습니다.
oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-auth
$ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-auth
Copy to Clipboard Copied! 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
$ 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
Copy to Clipboard Copied! 여기서 &
lt;serviceaccount_name
>은 이전 단계에서 생성한 서비스 계정입니다.보안에서 토큰 및 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)
$ 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)
Copy to Clipboard Copied! OCP 클러스터 끝점을 검색합니다.
OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
$ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
Copy to Clipboard Copied! 서비스 계정 발행자를 가져옵니다.
oc proxy & proxy_pid=$! issuer="$( curl --silent http://127.0.0.1:8001/.well-known/openid-configuration | jq -r .issuer)" kill $proxy_pid
$ oc proxy & $ proxy_pid=$! $ issuer="$( curl --silent http://127.0.0.1:8001/.well-known/openid-configuration | jq -r .issuer)" $ kill $proxy_pid
Copy to Clipboard Copied! 이전 단계에서 수집한 정보를 사용하여 Vault에서 Kubernetes 인증 방법을 설정합니다.
vault auth enable kubernetes
$ vault auth enable kubernetes
Copy to Clipboard Copied! vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT" \ issuer="$issuer"
$ vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT" \ issuer="$issuer"
Copy to Clipboard Copied! 중요발행자가 비어 있을 때 Vault에서 Kubernetes 인증 방법을 구성하려면 다음을 수행합니다.
vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"
$ vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"
Copy to Clipboard Copied! Vault에서 KV(Key/Value) 백엔드 경로를 활성화합니다.
Vault KV 시크릿 엔진 API의 경우 버전 1:
vault secrets enable -path=odf kv
$ vault secrets enable -path=odf kv
Copy to Clipboard Copied! Vault KV 시크릿 엔진 API의 경우 버전 2:
vault secrets enable -path=odf kv-v2
$ vault secrets enable -path=odf kv-v2
Copy to Clipboard Copied! 시크릿에서
쓰기
또는삭제
작업을 수행하도록 사용자를 제한하는 정책을 생성합니다.echo ' path "odf/*" { capabilities = ["create", "read", "update", "delete", "list"] } path "sys/mounts" { capabilities = ["read"] }'| vault policy write odf -
echo ' path "odf/*" { capabilities = ["create", "read", "update", "delete", "list"] } path "sys/mounts" { capabilities = ["read"] }'| vault policy write odf -
Copy to Clipboard Copied! 역할을 생성합니다.
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
$ 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
Copy to Clipboard Copied! 스토리지 시스템 생성 중에 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
$ 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
Copy to Clipboard Copied!