Provisionar automaticamente uma nova instância do Looker

Se preferir, na inicialização de uma nova instância hospedada pelo cliente do Looker, é possível provisionar automaticamente a instância com uma chave de licença, um URL do host e uma conta de usuário inicial.

Como provisionar automaticamente uma nova instância com um usuário de e-mail

Na inicialização inicial, o Looker procura um arquivo chamado provision.yml no diretório looker, onde o arquivo JAR está localizado. O formato desse arquivo é o seguinte:

license_key: "1234-5678-ABCD-EFGH-IJKL"
host_url: "https://looker.mycompany.com"
user:
  first_name: "Ariel"
  last_name: "Q"
  email: "arielq@altostrat.com"
  password: "password123"

Se a instância do Looker for nova e ainda não tiver sido configurada, ela vai ser provisionada com a chave de licença e uma conta de usuário com as informações enviadas.

Se o Looker já tiver sido provisionado, os valores da chave de licença e do URL do host substituirão a chave de licença e o URL do host definidos no momento. As informações do usuário serão ignoradas. Isso é útil para atualizar uma instância de teste do Looker com uma nova cópia do banco de dados interno de uma instância de produção e, ao mesmo tempo, manter uma chave de licença e um URL separados para o servidor de teste.

Provisionamento automático de uma nova instância com um usuário da API

Na inicialização de uma nova instância do Looker, é possível provisionar um usuário inicial da API de maneira programática. É possível provisionar um usuário da API OU um usuário de e-mail, mas o Looker não oferece suporte ao provisionamento de um usuário da API e um usuário de e-mail ao mesmo tempo.

Como gerar credenciais de API

Para provisionar um usuário da API, gere um ID e uma chave secreta do cliente que o Looker vai ler e salvar no banco de dados. Os requisitos dessas credenciais são os seguintes:

  • O ID do cliente precisa ter 20 caracteres.
  • A chave secreta do cliente precisa ter 24 caracteres.
  • As duas strings precisam ser incluídas no corpo de uma solicitação POST. Portanto, é recomendável usar apenas caracteres alfanuméricos.

Por exemplo, o Looker usa o seguinte código para gerar essas credenciais de maneira programática:

require 'securerandom'

TOKEN_SYMBOLS = "bcdfghjkmnpqrstvwxyzBCDFGHJKMNPQRSTVWXYZ23456789".freeze

def generate_token(size)
  Array.new(size).map { TOKEN_SYMBOLS[SecureRandom.random_number(TOKEN_SYMBOLS.size)] }.join
end

O código acima evita caracteres ambíguos para tornar as strings menos propensas a erros.

Também é possível gerar strings adequadas usando o comando openssl:

openssl rand -hex 10

O número no final do comando openssl é o número de bytes na string. Portanto, use 10 para o ID do cliente e 12 para a chave secreta do cliente.

Provisionamento do usuário da API

Para provisionar um usuário da API na inicialização, verifique se você tem um arquivo provision.yml que inclui a chave de licença e o URL do host no diretório looker. Exemplo:

license_key: "1234-5678-ABCD-EFGH-IJKL"
host_url: "https://looker.mycompany.com"

Crie um arquivo chamado api-provision.yml com as permissões 0600 no diretório looker que inclua as informações do usuário da API. Exemplo:

user:
  first_name: "Ariel"
  last_name: "Q"
  client_id: "M9hZb8vRh9bSZzdPxw42"
  client_secret: "NMnqBVbHqPsPzTvbZk6xZfV3"

Recomendamos que você armazene essas credenciais em um gerenciador de secrets fora desse arquivo, porque ele será removido na inicialização depois que a instância do Looker processar e criar o usuário no banco de dados.

Na inicialização, se a instância estiver vazia e não houver usuários presentes, o Looker vai criar um usuário da API Admin do Looker com essas credenciais e remover o arquivo api-provision.yml do disco.

Você terá 30 minutos para usar essas credenciais e fazer um provisionamento adicional antes que elas sejam removidas do banco de dados interno e não possam mais ser usadas. A remoção dessas credenciais iniciais evita a criação de um backdoor de longa duração no aplicativo e mantém o caso de uso pretendido estritamente para provisionamento.