Como fazer a rotação de chaves de contas de serviço

Nesta página, descrevemos como fazer a rotação de chaves das seguintes contas de serviço:

Para alternar as chaves da conta de serviço:

  1. Crie um diretório para armazenar um backup dos seus secrets atuais:

    mkdir backup
  2. Observe as seguintes informações sobre a conta de serviço relevante:

    Acesso a componentes

    Cluster Secret Namespace
    Admin admin-cluster-creds kube-system
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    Administrador private-registry-creds kube-system
    Usuário private-registry-creds kube-system
    • Se você não estiver usando um registro particular, o Secret private-registry-creds vai conter a chave da conta de serviço de acesso a componentes.
    • Se você estiver usando um registro particular, o Secret private-registry-creds manterá as credenciais do registro particular, não a chave da conta de serviço de acesso ao componente.

    Registro do Connect

    Cluster Secret Namespace
    Admin admin-cluster-creds kube-system
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt

    Geração de registros/monitoramento

    Cluster Secret Namespace
    Admin admin-cluster-creds kube-system
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    Usuário google-cloud-credentials kube-system
    Usuário stackdriver-service-account-key knative-serving

    Registro de auditoria

    Cluster Secret Namespace
    Admin admin-cluster-creds kube-system
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    Administrador kube-apiserver CLUSTER_NAME

    Medição de uso

    Cluster Secret Namespace
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    Usuário usage-metering-bigquery-service-account-key kube-system

    Stackdriver

    Cluster Secret Namespace
    Admin admin-cluster-creds kube-system
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    Usuário google-cloud-credentials kube-system
    Usuário stackdriver-service-account-key knative-serving
  3. Crie um backup de cada secret usando o seguinte comando:

    kubectl get secret SECRET --namespace NAMESPACE \
        --kubeconfig KUBECONFIG -o json > backup/SECRET-NAMESPACE.json

    Substitua:

    • NAMESPACE: o namespace em que o secret está localizado. Por exemplo, kube-system.
    • KUBECONFIG: o caminho para o arquivo kubeconfig do cluster de administrador ou usuário.
    • SECRET: o nome do secret Por exemplo, admin-cluster-creds.

    Por exemplo, execute os seguintes comandos para a conta de serviço do registro de auditoria:

    kubectl get secret admin-cluster-creds --namespace kube-system \
            --kubeconfig KUBECONFIG -o json > backup/admin-cluster-creds-kube-system.json
    
    kubectl get secret user-cluster-creds --namespace NAMESPACE \
            --kubeconfig KUBECONFIG -o json > backup/user-cluster-creds-NAMESPACE.json
    
    kubectl get secret kube-apiserver --namespace NAMESPACE \
            --kubeconfig KUBECONFIG -o json > backup/kube-apiserver-NAMESPACE.json
  4. Para criar um novo arquivo de chave da conta de serviço, execute o seguinte comando:

    gcloud iam service-accounts keys create NEW_KEY_FILE --iam-account IAM_ACCOUNT

    Substitua:

    • NEW_KEY_FILE: o nome do novo arquivo de chave da conta de serviço.
    • IAM_ACCOUNT: o endereço de e-mail da conta de serviço.
  5. No arquivo de configuração do cluster de administrador, encontre o campo componentAccessServiceAccountKeyPath, a seção gkeConnect, a seção stackdriver e a seção cloudAuditLogging. Nesses locais, substitua os caminhos para os arquivos de chave da conta de serviço.

  6. No arquivo de configuração do cluster de usuário, localize o campo componentAccessServiceAccountKeyPath, a seção gkeConnect, a seção stackdriver, a seçãocloudAudigLogging e a seção usageMetering. Nesses locais, substitua os caminhos para os arquivos de chave da conta de serviço.

  7. Salve as alterações executando os comandos a seguir. É possível girar as chaves de um componente por vez ou de todas as chaves de uma só vez, definindo o componente como sakeys:

    gkectl update credentials COMPONENT \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config ADMIN_CLUSTER_CONFIG \
        --admin-cluster
    
    gkectl update credentials COMPONENT \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config USER_CLUSTER_CONFIG
    

    Substitua:

    • COMPONENT pode ser:

      • componentaccess
      • register
      • cloudauditlogging
      • usagemetering
      • stackdriver
      • sakeys (alterne as chaves para vários componentes).
    • ADMIN_CLUSTER_KUBECONFIG: o caminho para o arquivo kubeconfig do cluster do administrador.

    • ADMIN_CLUSTER_CONFIG: o caminho até o arquivo de configuração do cluster de administrador.

    • USER_CLUSTER_CONFIG: o caminho para o arquivo de configuração do cluster de usuário.

Recriação de nós

Algumas rotações de chaves de conta de serviço podem levar mais tempo porque a recriação dos nós é necessária:

Conta de serviço É necessário recriar os nós
Acesso a componentes Se estiver usando o Container Registry: sim
Se estiver usando um registro particular: não
Registro de auditoria Cluster de administrador: sim
Cluster de usuário com o Contrlplane V2 ativado: sim, mas somente nós do plano de controle
Geração de registros/monitoramento No
Registro do Connect No
Medição de uso No

Em uma rotação de chaves que requer a recriação de nós, os nós são substituídos em um processo de atualização gradual, ou seja, os nós são recriados um por um.

A inatividade possível durante uma rotação de chaves é semelhante à inatividade de um upgrade de cluster. Para mais detalhes, consulte Inatividade durante upgrades.

Como restaurar backups

Se você precisar restaurar os backups dos secrets criados anteriormente, execute o seguinte comando:

kubectl apply -f backup/