Armazenar chaves de contas de serviço em segredos do Kubernetes

Armazenar segredos da conta de serviço em segredos do Kubernetes

Esta página descreve como armazenar chaves de conta do serviço híbrido do Apigee em segredos do Kubernetes. O armazenamento de chaves de contas de serviço em segredos do Kubernetes melhora a segurança e simplifica a gestão no seu ambiente do Kubernetes. Com as chaves armazenadas em Secrets, não precisa de as armazenar no sistema de ficheiros.

Contas de serviço

O Hybrid usa as seguintes contas de serviço:

Produção

Não prod

  • apigee-non-prod

Antes de começar

Este procedimento usa duas variáveis de ambiente opcionais: $APIGEE_HELM_CHARTS_HOME e $PROJECT_ID. Se não definir estas variáveis, substitua o valor adequado para cada variável nos exemplos de código.

  1. Crie um diretório para as chaves da conta de serviço no diretório $APIGEE_HELM_CHARTS_HOME:
    mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
  2. Confirme se consegue executar a ferramenta create-service-account. Se transferiu recentemente os gráficos, o ficheiro create-service-account pode não estar num modo executável. No diretório $APIGEE_HELM_CHARTS_HOME, execute o seguinte comando:
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
    --help

    Se o resultado indicar um erro de autorização recusada, torne o ficheiro executável. Por exemplo, use chmod no Linux, macOS ou UNIX:

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

Crie chaves de contas de serviço

Crie ou atualize as contas de serviço e transfira os ficheiros de chaves com a ferramenta create-service-account. Esta ação transfere um ficheiro JSON para cada conta de serviço.

Os nomes dos ficheiros das chaves das contas de serviço têm o seguinte formato: $PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json

Produção

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

Não prod

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

Crie segredos do Kubernetes

Crie os segredos do Kubernetes para armazenar as chaves da conta de serviço.

O comando kubectl create secret nos seguintes exemplos de código tem a estrutura:

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

Produção

Crie os segredos com os seguintes comandos:

  • apigee-cassandra (se agendar cópias de segurança no 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 (se estiver a usar a rentabilização para o 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

Não prod

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

Referencie chaves de contas de serviço na configuração

Depois de armazenar as chaves da conta de serviço como segredos do Kubernetes, atualize o ficheiro overrides.yaml do Hybrid para referenciar estes segredos em vez de caminhos de ficheiros diretos. Modifique as propriedades serviceAccountPath relevantes para usar serviceAccountSecretRef.

Use as seguintes configurações de serviceAccountSecretRefs e serviceAccountRef nas secções adequadas do seuoverrides.yaml:

Produção

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

Não prod

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

Aplique alterações de configuração

Aplique as alterações aos gráficos apigee-telemetry, apigee-org e apigee-env com os seguintes comandos:

  1. Atualize a telemetria do Apigee:
    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  2. Atualize a organização do Apigee:
    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  3. Atualize o ambiente.

    Especifique o ambiente com --set env=ENV_NAME. Repita este comando para cada ambiente.

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

O que se segue?