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
apigee-cassandra
(necessário para a cópia de segurança e o restauro do Cassandra no Google Cloud Storage)apigee-logger
apigee-mart
apigee-metrics
apigee-mint-task-scheduler
(se estiver a usar a rentabilização para o Apigee Hybrid)apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
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.
- 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
- Confirme se consegue executar a ferramenta
create-service-account
. Se transferiu recentemente os gráficos, o ficheirocreate-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:
-
Atualize a telemetria do Apigee:
helm upgrade telemetry apigee-telemetry/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
Atualize a organização do Apigee:
helm upgrade ORG_NAME apigee-org/ \ --install \ --namespace APIGEE_NAMESPACE \ -f OVERRIDES_FILE
-
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?
- Saiba mais sobre as funções e as contas de serviço híbridas.
- Consulte a secção Criar contas de serviço do guia de instalação híbrida.