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-logger
apigee-mart
apigee-metrics
apigee-mint-task-scheduler
(se você estiver usando a Monetização para Apigee híbrida)apigee-runtime
apigee-synchronizer
apigee-udca
apigee-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-account
pode 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
chmod
no 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-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 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-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
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.