Kubernetes 보안 비밀에 데이터 저장

이 주제에서는 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 보안 비밀을 만드는 방법을 설명합니다.

  1. Kubernetes 보안 비밀에 저장하려는 파일을 만듭니다. 파일은 Kubernetes 보안 비밀에 저장할 수 있는 데이터 종류에 나열된 파일 확장자를 가진 지원되는 형식 중 하나여야 합니다.
  2. 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
    
  3. 생성 후 변경사항이 모든 클러스터에 반영되는 데 최대 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 속성 파일에 저장된 키의 이름입니다.

이 예시에서 메시지 할당 정책은 apikeyOrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z를 검색하고 흐름 변수 my-apikey에 저장합니다.

보안 비밀 업데이트

kubectl은 Kubernetes 보안 비밀 업데이트를 지원하지 않으므로 먼저 기존 보안 비밀을 삭제하고 Kubernetes 보안 비밀 만들기의 단계에 따라 다시 만들어야 합니다.