O armazenamento de objetos do dispositivo com isolamento físico do Google Distributed Cloud (GDC) é fornecido pelo OTS (ONTAP Select). O OTS tem o próprio sistema de gerenciamento de usuários de armazenamento de objetos. Cada credencial de usuário de armazenamento de objetos OTS
é armazenada como um secret nos clusters.
Este documento descreve as etapas para fazer a rotação das credenciais de usuário do armazenamento de objetos OTS
. Alterne as credenciais de usuário do armazenamento de objetos nas seguintes situações:
- rotação de chaves programada regularmente para girar todas as chaves de usuário.
- mitigando a principal exposição. Faça a rotação da chave de usuário exposta assim que possível.
Antes de começar
Siga estas etapas:
- Verifique se você atende aos pré-requisitos de laptop.
- Verifique se é possível fazer login no cluster do OTS e executar comandos da CLI
vserver object-store-server
. - Verifique se é possível fazer login como administrador no cluster de infraestrutura e no cluster de gerenciamento usando
kubectl
.
UID de tradução
Cada usuário de armazenamento de objetos tem uma chave de acesso e uma chave secreta armazenadas como um secret do Kubernetes e usadas por cargas de trabalho do Kubernetes para acessar o armazenamento de objetos de back-end. A rotação das chaves de usuário inclui a atualização de todos os secrets.
Para conferir uma lista de usuários do armazenamento de objetos, faça login em um dos três nós usando:
vserver object-store-server user show
A saída é uma lista de UIDs e deve ser semelhante a esta:
[
"root",
"k8ssa_gpc-system_inventory-export-images",
"k8ssa_gpc-system_inventory-export-hardware",
"k8su_test-user@example.com"
]
Há três tipos de usuários:
UID | Tipo de usuário | Nome da chave secreta | Namespace do secret |
---|---|---|---|
root | Administrador do sistema | objectstorage-tenant-bucket-controller-standard-system-s3-sa | gpc-system |
objectstorage-tenant-bucket-controller-standard-user-s3-sa | |||
objectstorage-tenant-bucket-controller-nearline-user-s3-sa | |||
k8ssa_<namespace>_<sa> | Conta de serviço do Kubernetes | object-storage-key-std-sa-<encoded-sa> | <namespace> |
k8su_<username> | Usuário do Kubernetes | object-storage-key-std-user-<encoded-username> | object-storage-access-keys |
O usuário root
tem três segredos idênticos, espelhando a estrutura do Data Center, que abrange várias classes de armazenamento e categorias de locatário. Por outro lado, o Appliance tem apenas um nível de armazenamento de objetos. Todos os três
secrets associados ao usuário raiz precisam ser alternados simultaneamente.
A identificação do usuário (UID), excluindo o usuário root
, precisa seguir o formato k8ssa_<namespace>_<sa>
ou k8su_<username>
. Consiga o
<encoded-sa>
ou o <encoded-username>
:
echo -n 'UID_SUFFIX' | shasum -a 256 | cut -d " " -f 1 | xxd -r -p | base32 | awk '{print tolower($0)}' | sed 's/=*$//g'
Substitua UID_SUFFIX
por <sa>
no UID para receber <encoded-sa>
.
Substitua UID_SUFFIX
por <username>
no UID para receber <encoded-username>
.
Alternar chave de usuário
Faça login no cluster do OTS.
Receba uma lista de UIDs de usuários do armazenamento de objetos.
vserver object-store-server user show
O resultado é uma lista de UIDs. Confira exemplos em Traduzir UID. Repita as etapas a seguir para cada UID na lista.
Receba a chave de acesso e a chave secreta antigas do usuário de destino.
set -privilege advanced vserver object-store-server user show -user UID
Substitua
UID
pelo UID do usuário de destino.Gere uma nova chave de acesso e uma chave secreta para o usuário de destino no armazenamento de objetos. As chaves antiga e nova coexistem após esta etapa, e ambas podem ser usadas para acesso.
vserver object-store-server user regenerate-keys -vserver root-admin -user UID
Atualize o secret do Kubernetes com a nova chave de acesso e a chave secreta. Basta atualizar o secret no cluster de infraestrutura raiz ou de gerenciamento, e ele será propagado para outros clusters, se necessário.
kubectl --kubeconfig KUBECONFIG patch secret -n SECRET_NAMESPACE SECRET_NAME --type='json' -p='[{"op": "replace", "path": "/data/access-key-id", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}, {"op": "replace", "path": "/data/secret-access-key", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}]'
Substitua:
KUBECONFIG
: o caminho para o kubeconfig. O servidor da API precisa ser o servidor da API do plano de controle para o usuárioroot
. Caso contrário, ele precisa ser o servidor da API de gerenciamento.SECRET_NAME
: o nome secreto do usuário, que pode ser derivado da seção Traduzir UID. Se o usuário tiver vários secrets do Kubernetes (ou seja,root
), substitua pelo nome de cada secret e execute o comando.SECRET_NAMESPACE
: o namespace secreto do usuário, que pode ser derivado da seção Traduzir UID.ACCESS_KEY
: a nova chave de acesso gerada na etapa anterior.SECRET_KEY
: a nova chave secreta gerada na etapa anterior.
A carga de trabalho que consome o secret precisa ser implementada para ser atualizada automaticamente. Caso contrário, reinicie a carga de trabalho para refletir a mudança no secret.
Por exemplo, para o usuário
root
, é necessário reiniciar as seguintes cargas de trabalho no cluster de infraestrutura:kubectl --kubeconfig KUBECONFIG rollout restart deployment obj-bucket-cm-backend-controller -n obj-system
Validação
Siga as instruções de armazenamento de objetos criar bucket e fazer upload e download de objetos para criar um bucket e conceder acesso usando o RBAC. A rotação da chave de armazenamento de objetos será concluída se o bucket for criado com sucesso e o assunto tiver as permissões necessárias para acessá-lo.