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
    Administrador 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 está usando um registro particular o secret private-registry-creds contém a chave para o acesso ao componente conta de serviço.
    • 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
    Administrador admin-cluster-creds kube-system
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt

    Geração de registros/monitoramento

    Cluster Secret Namespace
    Administrador 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
    Administrador admin-cluster-creds kube-system
    Administrador user-cluster-creds CLUSTER_NAME-gke-onprem-mgmt
    Administrador kube-apiserver CLUSTER_NAME

    Stackdriver

    Cluster Secret Namespace
    Administrador 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, encontre o campo componentAccessServiceAccountKeyPath, a seção gkeConnect, a seção stackdriver e a seção cloudAudigLogging. Nesses locais, substitua os caminhos para os arquivos de chave da conta de serviço.

  7. Salve as mudanças feitas executando os seguintes comandos:

    É possível girar as chaves de um componente por vez ou 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
      • stackdriver
      • sakeys: gira todas as chaves de 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 da conta de serviço podem levar mais tempo porque o nó a recriação seja necessária:

Conta de serviço É necessário recriar os nós
Acesso a componentes Se estiver usando o Artifact Registry: sim
Se estiver usando um registro particular: não
Registro de auditoria Cluster de administrador: sim, mas apenas nós do plano de controle
Cluster de usuário usando kubeception: não
Cluster de usuário usando Controlplane V2: sim, mas apenas nós do plano de controle
Geração de registros/monitoramento Não
Registro do Connect Não

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

O tempo de inatividade durante uma rotação de chaves é semelhante ao tempo de inatividade de uma para um upgrade no cluster. Para mais detalhes, consulte Inatividade durante os upgrades.

Como restaurar backups

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

kubectl apply -f backup/

Diferenças avançadas de cluster para rotação de chaves de conta de serviço

O comando gkectl update credentials é parcialmente compatível com clusters avançados. A tabela a seguir lista as variações de comando que são e não são compatíveis:

Comando Descrição Suporte
gkectl update credentials certificate-authorities rotate Rotacionar autoridades certificadoras Com suporte
gkectl update credentials certificate-authorities status (Prévia) Veja o status da rotação das autoridades certificadoras. Com suporte
gkectl update credentials certificate-authorities update-kubeconfig Baixe um arquivo kubeconfig com o certificado do cliente mais recente. Com suporte
gkectl update credentials cloudauditlogging Atualize as credenciais dos Registros de auditoria do Cloud. Incompatível
gkectl update credentials componentaccess Atualize as credenciais da chave da conta de serviço de acesso ao componente para clusters criados com o Google Distributed Cloud para VMware. Com suporte
gkectl update credentials f5bigip Atualize as credenciais do balanceador de carga F5 BIG-IP. Não é necessário
gkectl update credentials ksa-signing-key rotate Faça a rotação da chave de assinatura do token da conta de serviço do Kubernetes (KSA). Incompatível
gkectl update credentials ksa-signing-key status Confira o status de uma rotação de chaves de assinatura de token de KSA em andamento. Incompatível
gkectl update credentials Atualizar as credenciais do cluster Com suporte
gkectl update credentials privateregistry Atualize as credenciais do registro particular de um cluster. Com suporte
gkectl update credentials register Atualize as credenciais da chave da conta de serviço de registro. Com suporte
gkectl update credentials sakeys Atualiza as credenciais das chaves da conta de serviço de um cluster. Com suporte
gkectl update credentials stackdriver (Prévia) Atualize as credenciais do Google Cloud Observability. Com suporte
gkectl update credentials vsphere Atualize as credenciais do vSphere para um cluster. Com suporte

Para uma lista completa de recursos e capacidades do Google Distributed Cloud para VMware que são ou não compatíveis com clusters avançados, consulte Diferenças ao executar clusters avançados.