Como usar secrets para armazenar dados confidenciais


Use um Secret para armazenar informações sensíveis de configuração, 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.

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 acesso a secrets nos namespaces, estão usando o mesmo valor de secret para recursos de namespaces diferentes, precisa 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.com
    

    Se 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 comando gcloud.

API Service Usage

  1. 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
  2. Copie o seguinte YAML em um arquivo chamado enable-sql.yaml

    apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
    kind: Service
    metadata:
      name: sqladmin.googleapis.com
    
  3. Aplique enable-sql.yaml ao cluster com kubectl:

    kubectl apply -f enable-sql.yaml --namespace CC_NAMESPACE
    

    Substitua CC_NAMESPACE pelo namespace em que o Config Connector gerencia recursos.

gcloud

Para ativar a API SQL Admin com a CLI do Google Cloud, execute o seguinte comando:

gcloud services enable sqladmin.googleapis.com

Como criar um servidor do Cloud SQL

  1. Copie o YAML abaixo para um arquivo chamado sql-server-example.yaml. Isso cria um servidor do Cloud SQL chamado sqlserver-1 e um usuário chamado sqluser-sample. A senha de sqluser-sample é definida por uma referência de recurso para um secret chamado secret-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 extracted
    
  2. Copie o YAML abaixo para um arquivo chamado example-secret.yaml. Edite o valor de password antes de salvar. Isso declara secret-1, mencionado na seção anterior.

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: PASSWORD
    
  3. Aplique as configurações ao cluster.

    kubectl apply -n CC_NAMESPACE -f example-secret.yaml
    kubectl apply -n CC_NAMESPACE -f sql-server-example.yaml
    

    Substitua CC_NAMESPACE pelo 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.

  4. 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 STATUS de RUNNABLE.

  5. 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