이 주제에서는 Kubernetes 보안 비밀에 민감한 정보를 저장하고 API 프록시 흐름에 있는 흐름 변수에서 데이터를 검색하는 방법을 설명합니다.
소개
런타임 시 검색을 위해 데이터를 저장하고자 하는 경우가 있습니다. 이러한 데이터는 API 프록시 로직에서 하드 코딩해서는 안 되는 만료되지 않는 데이터입니다. 한 가지 옵션은 하이브리드 키-값 맵(KVM) 기능을 사용하는 것입니다. 이미 민감한 정보의 커스텀 Vault에 있는 보안 비밀 관리에 Kubernetes를 사용하고 있는 경우 이 주제에서 설명하는 Kubernetes 보안 비밀 기능을 사용하는 것이 좋습니다. KVM 데이터와 마찬가지로 API 프록시 흐름 변수에 있는 Kubernetes 보안 비밀 데이터에 액세스할 수 있습니다.
Kubernetes 보안 비밀에 저장할 수 있는 데이터의 종류
Apigee Hybrid는 Kubernetes 보안 비밀에 다음과 같은 종류의 데이터 파일을 저장하도록 제한합니다. 여기에는 다음이 포함됩니다.
파일 형식 | 지원되는 파일 확장자 |
---|---|
TLS 인증서 및 키 파일 | *.crt , *.key , *.pem |
속성 파일 | *.properties |
속성 파일은 키-값 쌍을 포함하는 파일입니다. 예:
username=admin password=1f2d1e2e7df
Kubernetes 보안 비밀 만들기
이 섹션에서는 클러스터에 민감한 정보를 저장하기 위해 Kubernetes 보안 비밀을 만드는 방법을 설명합니다.
- Kubernetes 보안 비밀에 저장하려는 파일을 만듭니다. 파일은 Kubernetes 보안 비밀에 저장할 수 있는 데이터 종류에 나열된 파일 확장자를 가진 지원되는 형식 중 하나여야 합니다.
kubectl create secret generic
명령어를 실행합니다. 예를 들면 다음과 같습니다.kubectl -n namespace create secret generic org-env-policy-secret \ --from-file=filepath/prop-file.properties \ --from-file=filepath/key-file.key \ --from-file="filepath/cert-file.pem
각 항목의 의미는 다음과 같습니다.
- namespace: 런타임 구성요소가 배포되는 Kubernetes 네임스페이스입니다.
- org: Apigee 조직 이름입니다.
- env: 조직의 환경 이름입니다.
- filepath: 보안 비밀에 포함할 파일의 경로입니다. 보안 비밀에 포함할 파일을 하나 이상 지정해야 합니다.
- prop-file: 보안 비밀에 포함할 속성 파일의 이름입니다.
- key-file: 보안 비밀에 포함할 TLS 키 파일의 이름입니다.
- cert-file: 보안 비밀에 포함할 TLS 인증서 파일의 이름입니다.
보안 비밀에 하나 이상의 파일을 포함할 수 있습니다. 예:
kubectl -n apigee create secret generic myorg-test-policy-secret \ --from-file="$policy_secrets_path"/credential.properties \ --from-file="$policy_secrets_path"/secrets.properties \ --from-file="$policy_secrets_path"/public.key \ --from-file="$policy_secrets_path"/fullchain.pem
생성 후 변경사항이 모든 클러스터에 반영되는 데 최대 90초가 걸릴 수 있습니다. 메시지 프로세서는 30초마다 보안 비밀 변경을 폴링합니다. 변경사항이 감지되면 캐시가 업데이트됩니다.
보안 비밀에서 데이터 검색
보안 비밀을 만들고 사용할 수 있게 되면(일반적으로 생성 후 약 90초) 보안 비밀이 저장된 조직/환경 내 API 프록시의 흐름 변수에 있는 보안 비밀 데이터에 액세스할 수 있습니다.
예를 들어 보안 비밀에 다음과 같이 API 키가 포함된 credentials.properties
라는 *.properties
파일이 있다고 가정합니다.
apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
그러면 메시지 할당과 같은 정책을 사용하여 흐름 변수에서 API 키를 검색할 수 있습니다. 예:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>my-apikey</Name> <Ref>private.secret.credential.properties.apikey</Ref> </AssignVariable> </AssignMessage>
Ref
요소 private.secret.credential.properties.apikey
에서 참조되는 변수 이름은 다음과 같은 부분으로 구성됩니다.
변수 이름 부분 | 설명 |
---|---|
private.secret |
변수의 고정된 네임스페이스입니다. 하이브리드 클러스터에 저장된 모든 Kubernetes 보안 비밀은 이 네임스페이스를 공유합니다. |
credential.properties |
Kubernetes 보안 비밀에 저장된 파일의 이름입니다. |
apikey |
속성 파일에 저장된 키의 이름입니다. |
이 예시에서 메시지 할당 정책은 apikey
값 OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
를 검색하고 흐름 변수 my-apikey
에 저장합니다.
보안 비밀 업데이트
kubectl
은 Kubernetes 보안 비밀 업데이트를 지원하지 않으므로 먼저 기존 보안 비밀을 삭제하고 Kubernetes 보안 비밀 만들기의 단계에 따라 다시 만들어야 합니다.