Autenticação e autorização no Spanner Omni

Este documento descreve como as implantações seguras do Spanner Omni controlam o acesso por autenticação e autorização. Você cria e gerencia usuários e atribui a eles papéis que definem as permissões. Os usuários podem fazer a autenticação usando um dos seguintes métodos:

  • Autenticação de senha: usa o protocolo de senha OPAQUE. Esse protocolo melhora a segurança fornecendo tokens de acesso assinados para solicitações subsequentes.
  • Autenticação de certificado do cliente: usa certificados assinados pela mesma autoridade certificadora (CA) que assinou os certificados do servidor da API. O Common Name do certificado identifica o usuário.

A autorização no Spanner Omni usa nomes de papéis e permissões do Identity and Access Management (IAM), semelhantes ao Spanner. Você atribui papéis aos usuários que concedem permissões específicas. O IAM do Spanner Omni é diferente do IAM do Spanner. Por exemplo, ele não oferece suporte a papéis personalizados e inclui permissões específicas do Spanner Omni.

Usuários

Em uma implantação segura, o acesso às APIs do Spanner Omni exige um usuário. É possível criar, atualizar e excluir usuários usando a CLI do Spanner Omni. Cada implantação do Spanner Omni cria um único usuário admin por padrão com a senha admin.

Criar usuários

Crie novos usuários para atribuir papéis diferentes e auditar o uso. O comando a seguir atribui ao novo usuário o papel roles/spanner.databaseUser para que ele possa ler e gravar em um banco de dados do Spanner Omni.

spanner users create USER_NAME --roles=roles/spanner.databaseUser

Excluir usuários

Exclua usuários obsoletos do sistema:

spanner users delete USER_NAME

Atualizar usuários

Atualize o estado e os papéis de um usuário. Esse comando substitui o estado e os papéis atuais:

spanner users update USER_NAME --roles=NEW_ROLES --state=ACTIVE

Autenticação

Em uma implantação segura, os usuários precisam fazer login antes de acessar uma implantação do Spanner Omni.

O Spanner Omni oferece dois mecanismos para autenticar usuários:

Mecanismo Descrição
Senhas Os usuários inserem o nome de usuário e a senha.
Certificados do cliente Os clientes usam certificados assinados pela mesma autoridade certificadora (CA) que assinou os certificados do servidor da API.

Senhas

A autenticação de senha exige que você insira seu nome de usuário e senha. Ela só funciona quando o TLS está ativado no servidor.

spanner auth login USER_NAME

O Spanner Omni usa uma implementação do protocolo OPAQUE para evitar o envio de senhas ao servidor, o que protege o sistema contra ataques "man-in-the-middle". O Spanner Omni não armazena senhas no servidor, portanto, o acesso não intencional ao servidor não compromete as credenciais do usuário. Depois de fazer a autenticação, o Spanner Omni retorna um token de acesso assinado. Anexe o token de acesso a todas as solicitações futuras. A CLI do Spanner Omni armazena o token de acesso em ~/.config/spanner/access_token/token.txt. Para manter a segurança do sistema, não compartilhe esse token com outras pessoas.

Por padrão, o token de acesso tem um tempo de expiração de 60 minutos. Após 60 minutos, o servidor não aceita o token de acesso e você precisa fazer login novamente. O Spanner Omni assina o token de acesso para evitar adulterações.

Para evitar que as senhas apareçam em locais em que você possa visualizá-las, como variáveis de ambiente ou flags de linha de comando, os comandos da CLI do Spanner Omni aceitam senhas de duas maneiras:

  • Solicitações que mascaram sua entrada.
  • Strings em arquivos. O Spanner Omni verifica se as permissões de arquivo são 600, substitui os arquivos por dados aleatórios e os exclui após a leitura.

Para mais detalhes, execute spanner auth --help.

Certificados do cliente

A autenticação de certificado do cliente exige que os clientes usem certificados assinados pela mesma autoridade certificadora (CA) que assinou os certificados do servidor da API. Inclua o nome de usuário de um usuário válido e ativo no campo Common Name do certificado. Ao realizar a autorização, os papéis atribuídos determinam se você tem permissões para realizar a operação solicitada. Para anexar um certificado do cliente a uma solicitação, use as flags --ca-certificate-file e --client-certificate-directory. Confira a seguir um exemplo de listagem de bancos de dados:

spanner databases list --ca-certificate-file PATH_TO_CA_CERT --client-certificate-directory PATH_TO_CLIENT_CERT_DIR

Também é possível usar certificados do cliente para fazer login:

spanner auth login USER_NAME --ca-certificate-file PATH_TO_CA_CERT --client-certificate-directory PATH_TO_CLIENT_CERT_DIR

Autorização

O Spanner Omni usa a maioria dos mesmos nomes de papéis e permissões do IAM que o Spanner. Ao criar um usuário, é possível atribuir um ou mais papéis a ele. Cada papel contém uma ou mais permissões.

Para listar os papéis disponíveis no Spanner Omni, use o seguinte comando:

spanner roles list

Para saber mais sobre as permissões do IAM no Spanner Omni, consulte a Visão geral do IAM.