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

    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
    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, 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 feitas executando os comandos a seguir. É possível girar as chaves de um componente por vez, ou você pode girar 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: alterna 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 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 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 apenas o plano de controle nós
Geração de registros/monitoramento Não
Registro do Connect Não
Medição de uso 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/