Usar segredos para armazenar dados confidenciais


Pode usar um segredo para armazenar informações de configuração confidenciais, como palavras-passe e chaves de acesso, no seu cluster do GKE. Esta página descreve como o Config Connector usa valores secretos ao configurar os seus Google Cloud recursos.

Vista geral

Esta secção apresenta uma vista geral da utilização de segredos com o Config Connector.

Usar um Secret ao criar um recurso

Pode usar os dados num segredo quando cria um recurso. Em Transmitir um segredo a um recurso, cria um segredo que contém uma palavra-passe e, em seguida, faz referência ao segredo para um utilizador numa base de dados do Cloud SQL.

Atualizar segredos

Quando aplica uma atualização a um segredo, o Config Connector atualiza o recurso quando reconcilia o estado pretendido. Por exemplo, se atualizar o segredo que é referenciado como a palavra-passe para um SQLUser, o Config Connector atualiza a palavra-passe do utilizador.

Eliminar segredos

Se eliminar um segredo que está a ser usado por um recurso, o Config Connector não remove a referência do recurso ao segredo. Por exemplo, se criar um SQLUser com uma palavra-passe que faça referência a um segredo e, em seguida, eliminar o segredo, a palavra-passe permanece no SQLUser.

Resolução de problemas

Se criar um recurso que faça referência a um segredo que não existe, o Config Connector cria um DependencyNotFound ou um DependencyInvalid Evento.

Informações secretas e espaços de nomes do Kubernetes

Uma vez que o Kubernetes não permite o acesso a segredos em todos os espaços de nomes, se estiver a usar o mesmo valor secreto para recursos de diferentes espaços de nomes, tem de aplicar segredos em todos os espaços de nomes.

Transmitir um Secret a um recurso

Nesta secção, vai criar um servidor do Cloud SQL e definir a palavra-passe do utilizador predefinido com um segredo.

Antes de começar

Para concluir estes passos, precisa do seguinte:

  • Config Connector instalado num cluster do Kubernetes
  • A API Admin do Cloud SQL 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., tem de ativar a API. Pode ativar a API com o Config Connector e a API Resource Manager, ou um gcloud comando.

API Service Usage

  1. O Config Connector usa a API Service Usage para ativar as APIs de serviços. Para realizar estes passos, tem de ativar a API Service Usage. Pode ativar esta API através da Google Cloud CLI:
    gcloud services enable serviceusage.googleapis.com
  2. Copie o seguinte YAML para um ficheiro com o nome enable-sql.yaml

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

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

    Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

gcloud

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

gcloud services enable sqladmin.googleapis.com

Criar um servidor do Cloud SQL

  1. Copie o YAML abaixo para um ficheiro com o nome sql-server-example.yaml. Isto cria um servidor do Cloud SQL denominado sqlserver-1 e um utilizador denominado sqluser-sample. A palavra-passe para sqluser-sample é definida por uma referência de recurso para um segredo denominado 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 ficheiro com o nome example-secret.yaml. Edite o valor de password antes de guardar. Isto declara secret-1, referenciado na secçã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 espaço de nomes a partir do qual o Config Connector gere os recursos.

    O Config Connector cria a instância do Cloud SQL e um utilizador com a palavra-passe que especificou. Pode demorar alguns minutos.

  4. Aguarde vários minutos e confirme se a instância está disponível:

    gcloud sql instances list --filter="name=sqlserver-1"

    A saída deve incluir um servidor com um STATUS de RUNNABLE.

  5. Confirme se consegue estabelecer ligação à instância do SQL:

    gcloud sql connect sqlserver-1 --user=sqluser-sample

    É-lhe pedida a sua palavra-passe.

Limpar

Se não quiser manter a instância, elimine a instância, o utilizador e o segredo do Cloud SQL com o comando kubectl.

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

Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

O que se segue?