Como armazenar secrets de conta de serviço em secrets do Kubernetes
Nesta página, descrevemos como armazenar chaves de conta de serviço da Apigee híbrida em secrets do Kubernetes. Armazenar chaves de conta de serviço em secrets do Kubernetes aumenta a segurança e simplifica o gerenciamento no ambiente do Kubernetes. Com as chaves armazenadas em secrets, não é necessário armazená-las no sistema de arquivos.
Contas de serviço
O modelo híbrido usa as seguintes contas de serviço:
Produção
apigee-cassandra(obrigatório para backup e restauração do Cassandra no Google Cloud Storage)apigee-loggerapigee-martapigee-metricsapigee-mint-task-scheduler(se você estiver usando a Monetização para Apigee híbrida)apigee-runtimeapigee-synchronizerapigee-udcaapigee-watcher
Sem produção
apigee-non-prod
Antes de começar
Este procedimento usa duas variáveis de ambiente opcionais: $APIGEE_HELM_CHARTS_HOME e $PROJECT_ID. Se você não definir essas variáveis, substitua o valor apropriado para cada uma nos exemplos de código.
- 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
- Verifique se é possível executar a ferramenta
create-service-account. Se você baixou os gráficos recentemente, o arquivocreate-service-accountpode não estar em um 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 a saída indicar um erro de permissão negada, torne o arquivo executável. Por exemplo, use
chmodno Linux, macOS ou UNIX:chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account
Crie chaves de conta de serviço.
Crie ou atualize as contas de serviço e faça o download dos arquivos de chave usando a
ferramenta create-service-account. Essa ação faz o download de um arquivo JSON para cada conta de serviço.
Os nomes dos arquivos de chave da conta de serviço terão 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
Sem produção
$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \ --env non-prod \ --dir $APIGEE_HELM_CHARTS_HOME/service-accounts
Criar secrets do Kubernetes
Crie os secrets do Kubernetes para armazenar as chaves da conta de serviço.
O comando kubectl create secret nas amostras de código a seguir 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 secrets com os seguintes comandos:
-
apigee-cassandra(se programar backups 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-loggerkubectl 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-martkubectl 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-metricskubectl 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 você estiver usando a Monetização para Apigee híbrida)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-runtimekubectl 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-synchronizerkubectl 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-udcakubectl 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-watcherkubectl 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
Sem produção
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
Referenciar chaves de conta de serviço na configuração
Depois de armazenar as chaves de conta de serviço como secrets do Kubernetes, atualize o arquivo overrides.yaml do Hybrid para referenciar esses secrets em vez de caminhos de arquivo diretos. Modifique as propriedades serviceAccountPath relevantes para usar serviceAccountSecretRef.
Use as seguintes configurações de serviceAccountSecretRefs e serviceAccountRef nas seções apropriadas do seu overrides.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
Sem produção
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
Aplicar mudanças de configuração
Aplique as mudanças aos gráficos apigee-telemetry, apigee-org e apigee-env com os seguintes comandos:
-
Faça upgrade da telemetria da Apigee:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
Faça upgrade da organização da Apigee:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
Faça upgrade do ambiente.
Especifique o ambiente com
--set env=ENV_NAME. Repita esse comando para cada ambiente.helm upgrade ENV_RELEASE_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ -f OVERRIDES_FILE
A seguir
- Saiba mais sobre contas de serviço e papéis híbridos.
- Consulte a seção Criar contas de serviço do guia de instalação híbrida.