Kubernetes 보안 비밀에 서비스 계정 키 저장

Kubernetes 보안 비밀에 서비스 계정 보안 비밀 저장

이 페이지에서는 Apigee Hybrid 서비스 계정 키를 Kubernetes 보안 비밀에 저장하는 방법을 설명합니다. Kubernetes 보안 비밀에 서비스 계정 키를 저장하면 Kubernetes 환경 내에서 보안이 강화되고 관리가 간소화됩니다. 보안 비밀에 키를 저장하면 파일 시스템에 키를 저장할 필요가 없습니다.

서비스 계정

하이브리드는 다음 서비스 계정을 사용합니다.

프로덕션

비프로덕션

  • apigee-non-prod

시작하기 전에

이 절차에서는 $APIGEE_HELM_CHARTS_HOME$PROJECT_ID이라는 두 가지 선택적 환경 변수를 사용합니다. 이러한 변수를 정의하지 않은 경우 코드 샘플에서 각 변수에 대해 적절한 값을 대체합니다.

  1. $APIGEE_HELM_CHARTS_HOME 디렉터리에 서비스 계정 키를 위한 디렉터리를 만듭니다.
    mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
  2. create-service-account 도구를 실행할 수 있는지 확인합니다. 차트를 최근에 다운로드한 경우 create-service-account 파일이 실행 모드가 아닐 수 있습니다. $APIGEE_HELM_CHARTS_HOME 디렉터리에서 다음 명령어를 실행합니다.
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
    --help

    출력에 권한 거부 오류가 표시되면 파일을 실행 가능하게 만듭니다. 예를 들어 Linux, macOS 또는 UNIX에서 chmod를 사용합니다.

    chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account

서비스 계정 키 만들기

create-service-account 도구를 사용하여 서비스 계정을 만들거나 업데이트하고 키 파일을 다운로드합니다. 이 작업은 각 서비스 계정에 대해 하나의 JSON 파일을 다운로드합니다.

서비스 계정 키 파일 이름의 형식은 다음과 같습니다. $PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json

프로덕션

$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
  --env prod \
  --dir $APIGEE_HELM_CHARTS_HOME/service-accounts

비프로덕션

$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
  --env non-prod \
  --dir $APIGEE_HELM_CHARTS_HOME/service-accounts

Kubernetes 보안 비밀 만들기

서비스 계정 키를 저장할 Kubernetes 보안 비밀을 만듭니다.

다음 코드 샘플의 kubectl create secret 명령어는 다음과 같은 구조를 갖습니다.

kubectl create secret generic SECRET_NAME \
  --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \
  -n APIGEE_NAMESPACE

프로덕션

다음 명령어를 사용하여 비밀을 만듭니다.

  • apigee-cassandra (Cloud Storage에서 백업 예약하는 경우)
    kubectl create secret generic apigee-cassandra-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-cassandra.json" \
      -n APIGEE_NAMESPACE
  • apigee-logger
    kubectl create secret generic apigee-logger-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-logger.json" \
      -n APIGEE_NAMESPACE
  • apigee-mart
    kubectl create secret generic apigee-mart-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mart.json" \
      -n APIGEE_NAMESPACE
  • apigee-metrics
    kubectl create secret generic apigee-metrics-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-metrics.json" \
      -n APIGEE_NAMESPACE
  • apigee-mint-task-scheduler (Apigee Hybrid용 수익 창출을 사용하는 경우)
    kubectl create secret generic apigee-mint-task-scheduler-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mint-task-scheduler.json" \
      -n APIGEE_NAMESPACE
  • apigee-runtime
    kubectl create secret generic apigee-runtime-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-runtime.json" \
      -n APIGEE_NAMESPACE
  • apigee-synchronizer
    kubectl create secret generic apigee-synchronizer-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-synchronizer.json" \
      -n APIGEE_NAMESPACE
  • apigee-udca
    kubectl create secret generic apigee-udca-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-udca.json" \
      -n APIGEE_NAMESPACE
  • apigee-watcher
    kubectl create secret generic apigee-watcher-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-watcher.json" \
      -n APIGEE_NAMESPACE

비프로덕션

kubectl create secret generic apigee-non-prod-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-non-prod.json" \
  -n APIGEE_NAMESPACE

구성에서 서비스 계정 키 참조

서비스 계정 키를 Kubernetes 보안 비밀로 저장한 후 직접 파일 경로 대신 이러한 보안 비밀을 참조하도록 Hybrid overrides.yaml 파일을 업데이트합니다. serviceAccountSecretRef를 사용하도록 관련 serviceAccountPath 속성을 수정합니다.

overrides.yaml의 적절한 섹션에서 다음 serviceAccountSecretRefsserviceAccountRef 구성을 사용합니다.

프로덕션

envs:
- name: test
  serviceAccountSecretRefs:
    synchronizer: apigee-synchronizer-svc-account
    runtime: apigee-runtime-svc-account
    udca: apigee-udca-svc-account

mart:
  serviceAccountRef: apigee-mart-svc-account
  # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef

connectAgent:
  serviceAccountRef: apigee-mart-svc-account
  # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef

logger:
  serviceAccountRef: apigee-logger-svc-account

metrics:
  serviceAccountRef: apigee-metrics-svc-account

udca:
  serviceAccountRef: apigee-udca-svc-account

watcher:
  serviceAccountRef: apigee-watcher-svc-account

# If Scheduling backups in Cloud Storage
cassandra:
  backup:
    serviceAccountRef: apigee-cassandra-svc-account

# If using Monetization for Apigee hybrid
mintTaskScheduler:
  serviceAccountRef: apigee-mint-task-scheduler-svc-account

비프로덕션

envs:
- name: test-env
  serviceAccountSecretRefs:
    synchronizer: apigee-non-prod-svc-account
    runtime: apigee-non-prod-svc-account
    udca: apigee-non-prod-svc-account

mart:
  serviceAccountRef: apigee-non-prod-svc-account

connectAgent:
  serviceAccountRef: apigee-non-prod-svc-account

logger:
  serviceAccountRef: apigee-non-prod-svc-account

metrics:
  serviceAccountRef: apigee-non-prod-svc-account

udca:
  serviceAccountRef: apigee-non-prod-svc-account

watcher:
  serviceAccountRef: apigee-non-prod-svc-account

# If Scheduling backups in Cloud Storage
cassandra:
  backup:
    serviceAccountRef: apigee-non-prod-svc-account

# If using Monetization for Apigee hybrid
mintTaskScheduler:
  serviceAccountRef: apigee-non-prod-svc-account

구성 변경사항 적용

다음 명령어를 사용하여 apigee-telemetry, apigee-org, apigee-env 차트에 변경사항을 적용합니다.

  1. Apigee 원격 분석을 업그레이드합니다.
    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  2. Apigee 조직을 업그레이드합니다.
    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  3. 환경을 업그레이드합니다.

    --set env=ENV_NAME으로 환경을 지정합니다. 환경마다 이 명령어를 반복합니다.

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE
    

다음 단계