Como usar secrets para armazenar dados confidenciais

Use um Secret para armazenar informações confidenciais de configuração, como senhas e chaves de acesso, no seu cluster GKE. Nesta página, descrevemos como o Config Connector usa valores de secret ao configurar seus 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.

Resolver 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 vários projetos

Como o Kubernetes não permite acesso a secrets nos Namespaces, se você estiver usando o Config Connector para gerenciar vários projetos, aplique secrets em todos os Namespaces que mapeiam para um projeto.

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 Resource Manager para ativar as APIs de serviço. Para executar essas etapas, você precisa ativar a API Resource Manager. É possível ativar essa API com o seguinte comando "gcloud".
    gcloud services enable cloudresourcemanager.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 gcloud, 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 com gcloud.

    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 com gcloud.

    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