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-loggerapigee-martapigee-metricsapigee-mint-task-scheduler(se estiver a usar a rentabilização para o Apigee Hybrid)apigee-runtimeapigee-synchronizerapigee-udcaapigee-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-accountpode 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
chmodno 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-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 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-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
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.