Como usar secrets para armazenar dados confidenciais
É possível usar um Secret para armazenar informações de configuração sensíveis, como senhas e chaves de acesso, no cluster do GKE. Nesta página, descrevemos como o Config Connector usa valores de Secret ao configurar os recursos do Google Cloud .
Visão geral
Nesta seção, apresentamos uma visão geral sobre o uso de Secrets com o Config Connector.
Segurança e criptografia de secrets em repouso
Como os Secrets do Kubernetes contêm credenciais e strings de conexão confidenciais, ative a criptografia de secrets da camada do aplicativo no cluster. O GKE criptografa Secrets em repouso por padrão. A criptografia de secrets da camada de aplicativo adiciona outra camada de segurança usando a criptografia de envelope do Cloud Key Management Service.
Além disso, use o controle de acesso baseado em papéis (RBAC) para restringir o acesso de leitura aos
Secrets apenas a administradores de cluster autorizados. Aplique a mesma restrição aos
recursos do Config Connector que armazenam valores sensíveis nos campos status,
como IAMServiceAccountKey.
Como usar um secret ao criar um recurso
É possível usar os dados dentro de um secret ao criar um recurso. Em Como passar um secret para um recurso, crie um secret que contenha uma senha e referencie o secret de um usuário em um banco de dados do Cloud SQL.
Como atualizar Secrets
Quando você aplica uma atualização a um Secret, o Config Connector atualiza o recurso na próxima
reconciliação do estado pretendido. Por exemplo, se você atualizar o secret
mencionado como a senha de um SQLUser, o Config Connector atualizará
a senha do usuário.
Como excluir Secrets
Se você excluir um secret que está sendo usado por um recurso, o Config Connector não removerá a referência do recurso do secret. Por exemplo, se você criar um SQLUser com uma senha que referencie um secret e, em seguida, excluir o secret, a senha permanecerá no SQLUser.
Solução de problemas
Se você criar um recurso que faça referência a um Secret inexistente o
Config Connector criará um Evento
DependencyNotFound ou DependencyInvalid.
Secrets e namespaces do Kubernetes
Como o Kubernetes não permite o acesso a secrets em namespaces, se você estiver usando o mesmo valor de secret para recursos de namespaces diferentes, precisará aplicar secrets em todos os namespaces.
Como passar um Secret para um recurso
Nesta seção, você criará um servidor Cloud SQL e definirá a senha do usuário padrão com um Secret.
Antes de começar
Para concluir essas etapas, você precisa do seguinte:
- Config Connector instalado em um cluster do Kubernetes
A API Cloud SQL Admin ativada no seu projeto. Para confirmar que a API está ativada, execute o seguinte comando
gcloud:gcloud services list --filter=sqladmin.googleapis.comSe o comando imprimir
Listed 0 items., você precisará ativar a API. É possível ativar a API com o Config Connector e a API Resource Manager, ou um comandogcloud.
API Service Usage
- O Config Connector usa a API Service Usage para ativar as APIs de serviço. Para executar
essas etapas, ative a
API
Service Usage. É possível ativar essa API usando a Google Cloud CLI:
gcloud services enable serviceusage.googleapis.com
Copie o seguinte YAML em um arquivo chamado
enable-sql.yamlapiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: sqladmin.googleapis.comAplique
enable-sql.yamlao cluster comkubectl:kubectl apply -f enable-sql.yaml --namespace CC_NAMESPACESubstitua
CC_NAMESPACEpelo namespace em que o Config Connector gerencia recursos.
gcloud
Para ativar a API SQL Admin com a Google Cloud CLI, execute o seguinte comando:
gcloud services enable sqladmin.googleapis.com
Como criar um servidor do Cloud SQL
Copie o YAML abaixo para um arquivo chamado
sql-server-example.yaml. Isso cria um servidor do Cloud SQL chamadosqlserver-1e um usuário chamadosqluser-sample. A senha desqluser-sampleé definida por uma referência de recurso para um secret chamadosecret-1.apiVersion: sql.cnrm.cloud.google.com/v1beta1 kind: SQLInstance metadata: labels: label-one: "sql-server-example" name: sqlserver-1 spec: region: us-central1 databaseVersion: MYSQL_5_7 settings: tier: db-g1-small --- apiVersion: sql.cnrm.cloud.google.com/v1beta1 kind: SQLUser metadata: name: sqluser-sample spec: instanceRef: name: sqlserver-1 host: "%" password: valueFrom: secretKeyRef: name: secret-1 # Name of the Secret object to extract a value from key: password # Key that identifies the value to be extractedCopie o YAML abaixo para um arquivo chamado
example-secret.yaml. Edite o valor depasswordantes de salvar. Isso declarasecret-1, mencionado na seção anterior.apiVersion: v1 kind: Secret metadata: name: secret-1 stringData: password: PASSWORDAplique as configurações ao cluster.
kubectl apply -n CC_NAMESPACE -f example-secret.yamlkubectl apply -n CC_NAMESPACE -f sql-server-example.yamlSubstitua
CC_NAMESPACEpelo namespace em que o Config Connector gerencia recursos.O Config Connector cria a instância do Cloud SQL e um usuário com a senha que você especificou. Isso pode levar alguns minutos.
Aguarde alguns minutos e confirme se a instância está disponível:
gcloud sql instances list --filter="name=sqlserver-1"
O resultado precisa incluir um servidor com
STATUSdeRUNNABLE.Confirme se é possível se conectar à instância SQL:
gcloud sql connect sqlserver-1 --user=sqluser-sample
Sua senha será solicitada.
Como limpar
Se você não quer manter a instância, exclua essa instância, o usuário e o
secret do Cloud SQL com kubectl.
kubectl delete -n CC_NAMESPACE -f sql-server-example.yaml
kubectl delete -n CC_NAMESPACE -f example-secret.yaml
Substitua CC_NAMESPACE pelo namespace em que o Config Connector gerencia recursos.
A seguir
Aprenda a especificar Referências de recursos entre os recursos do Config Connector.
Aprofunde-se nos Secrets do Kubernetes.