Configuração de servidores de autorização personalizados para External OAuth¶
Este tópico descreve como criar uma integração de segurança externa OAuth no Snowflake para que os clientes possam acessar os dados do Snowflake autenticando-se com um servidor de autorização personalizado.
Se seu servidor de autorização for um provedor de identidade suportado (IdP) em vez de um provedor personalizado, consulte o tópico focado na configuração desse IdP específico.
Neste tópico:
Requisitos de carga útil de token do External OAuth¶
O token de acesso que os servidores de autenticação personalizados enviam ao Snowflake deve conter as seguintes informações de carga útil. Para obter mais informações sobre a coluna Claims, consulte Declarações JWT.
Declarações |
Descrição |
---|---|
scp |
Escopos. Uma lista de escopos no token de acesso. |
escopo |
Escopos. Uma sequência de escopos separados por vírgula no token de acesso. O Snowflake oferece suporte à especificação de qualquer caractere único para o delimitador, tal como um espaço (ou seja, Contate o suporte Snowflake para ativar esta propriedade em sua conta Snowflake. |
aud |
Público. Identifica os destinatários aos quais o token de acesso é destinado como um URI de cadeia de caracteres. |
exp |
Tempo de expiração. Identifica o tempo de expiração em ou após o qual o token de acesso não deve ser aceito para processamento. |
iss |
Emissor. Identifica o principal que emitiu o token de acesso como um URI de cadeia de caracteres. |
iat |
Emitido em. Obrigatório. Identifica o momento em que o JWT foi emitido. |
Nota
O Snowflake suporta a declaração nbf
(não antes), que identifica o tempo antes do qual o token de acesso não deve ser aceito para processamento.
Se seu servidor de autorização personalizado oferecer suporte à declaração nbf
(não antes), você pode incluir opcionalmente a declaração nbf
no token de acesso.
Para verificar se seu token contém as informações necessárias, você pode testar o token neste site de Tokens JSON da Web.
Como um exemplo representativo, a interface PAYLOAD: DATA exibe a carga útil do token da seguinte forma.
{
"aud": "<audience_url>",
"iat": 1576705500,
"exp": 1576709100,
"iss": "<issuer_url>",
"scp": [
"session:role:analyst"
]
}
Procedimento de configuração¶
As etapas seguintes consideram que seu servidor de autorização personalizado e ambiente podem ser configurados para obter os valores necessários para criar a integração de segurança do Snowflake.
Importante
As etapas neste tópico são um exemplo representativo de como configurar servidores de autorização personalizados.
Você pode configurar seu ambiente para qualquer estado desejado e usar qualquer fluxo do OAuth externo desejado desde que possa obter as informações necessárias para a integração de segurança do OAuth externo.
Observe que os passos seguintes servem como um guia para obter as informações necessárias para criar a integração de segurança do OAuth externo no Snowflake.
Consulte suas políticas internas de segurança antes de configurar um servidor de autorização personalizado para garantir que sua organização atenda a todos os regulamentos e requisitos de conformidade.
Obter valores de ambiente chave para usar External OAuth¶
Ao configurar seu IdP e servidor de autorização, você deve coletar os seguintes valores para definir uma integração de segurança do OAuth externo:
- URL do emissor:
Inclua esta URL com o parâmetro
external_oauth_issuer
.- Chave pública RSA:
Inclua este valor com o parâmetro
external_oauth_rsa_public_key
.- URLs de público:
Se for necessário mais de uma URL de público, separe cada URL com uma vírgula no parâmetro
external_oauth_audience_list
.- Atributo de escopo:
Você pode definir esse valor como
scp
ouscope
. Por padrão, esse valor éscp
.Você pode definir o valor do parâmetro
external_oauth_scope_mapping_attribute
como esse valor.Se você não usar o valor padrão,
scp
, defina o valor do parâmetroexternal_oauth_scope_mapping_attribute
comoscope
.Para obter mais informações, consulte Requisitos de carga útil de token do External OAuth.
- Atributo de usuário:
Este atributo se refere ao atributo para identificar usuários em seu IdP. Inclua este valor de atributo no parâmetro
external_oauth_user_mapping_claim
.- Atributo de usuário do Snowflake:
O atributo no Snowflake para identificar os usuários. Inclua este valor no parâmetro
external_oauth_snowflake_user_mapping_attribute
.
Criação de uma integração de segurança de External OAuth no Snowflake¶
Esta etapa cria uma integração de segurança externa OAuth no Snowflake. A integração de segurança do OAuth externo garante que o Snowflake possa se comunicar com segurança e validar os tokens de acesso a partir de seu servidor de autorização personalizado, e fornece aos usuários acesso aos dados do Snowflake com base em sua função de usuário associada ao token de acesso. Para obter mais informações, consulte CREATE SECURITY INTEGRATION.
Importante
Somente administradores de conta ou uma função com o privilégio global CREATE INTEGRATION podem executar este comando SQL.
Os valores dos parâmetros de integração de segurança do OAuth externo diferenciam maiúsculas e minúsculas, e os valores que você coloca na integração de segurança do OAuth externo devem corresponder aos valores em seu ambiente. Caso um valor não seja correspondente, é possível que o token de acesso não seja validado, resultando em uma falha da tentativa de autenticação.
Criação de uma integração de segurança de External OAuth no Snowflake
create security integration external_oauth_custom type = external_oauth enabled = true external_oauth_type = custom external_oauth_issuer = '<authorization_server_url>' external_oauth_rsa_public_key = '<public_key_value>' external_oauth_audience_list = ('<audience_url_1>', '<audience_url_2>') external_oauth_token_user_mapping_claim = 'upn' external_oauth_snowflake_user_mapping_attribute = 'login_name';Copy
Modificação de sua integração de segurança External OAuth¶
Você pode atualizar sua integração de segurança External OAuth executando uma instrução ALTER para a integração de segurança.
Para obter mais informações, consulte ALTER SECURITY INTEGRATION (OAuth externo).
Uso da função ANY com External OAuth¶
Na etapa de configuração para criar uma integração de segurança no Snowflake, o token de acesso OAuth inclui a definição do escopo. Portanto, no tempo de execução, usar a integração de segurança External OAuth não permite nem ao cliente OAuth nem ao usuário usar uma função indefinida no token de acesso OAuth.
Após validar o token de acesso e criar uma sessão, a função ANY pode permitir que o cliente OAuth e o usuário decidam sua função. Se necessário, o cliente ou o usuário pode mudar para uma função que seja diferente da função definida no token de acesso OAuth.
Para configurar a função ANY, defina o escopo como SESSION:ROLE-ANY
e configure a integração de segurança com o parâmetro external_oauth_any_role_mode
. Este parâmetro pode ter três valores de cadeia de caracteres possíveis:
DISABLE
não permite que o cliente OAuth ou usuário troque de função (ou seja,use role <função>;
). Padrão.ENABLE
permite que o cliente OAuth ou usuário troque de função.ENABLE_FOR_PRIVILEGE
permite que o cliente OAuth ou usuário troque de função somente para um cliente ou usuário com o privilégioUSE_ANY_ROLE
. Este privilégio pode ser concedido e revogado para uma ou mais funções disponíveis para o usuário. Por exemplo:grant USE_ANY_ROLE on integration external_oauth_1 to role1;
Copyrevoke USE_ANY_ROLE on integration external_oauth_1 from role1;
Copy
Defina a integração de segurança da seguinte forma:
create security integration external_oauth_1
type = external_oauth
enabled = true
external_oauth_any_role_mode = 'ENABLE'
...
Uso de funções secundárias com External OAuth¶
O escopo desejado para a função primária é passado no token externo: ou a função padrão para o usuário (session:role-any
) ou uma função específica que foi concedida ao usuário (session:role:<nome_da_função>
).
Por padrão, o Snowflake não ativa as funções secundárias padrão para um usuário (ou seja, DEFAULT_SECONDARY_ROLES) na sessão.
Para ativar as funções secundárias padrão para um usuário em uma sessão e permitir a execução do comando USE SECONDARY ROLES enquanto utiliza External OAuth, complete as seguintes etapas:
Configure a integração de segurança para a conexão. Defina o valor do parâmetro EXTERNAL_OAUTH_ANY_ROLE_MODE como ENABLE ou ENABLE_FOR_PRIVILEGE quando criar a integração de segurança (usando CREATE SECURITY INTEGRATION) ou mais tarde (usando ALTER SECURITY INTEGRATION).
Configure o servidor de autorização para passar o valor estático de
session:role-any
no atributo de escopo do token. Para obter mais informações sobre o parâmetro de escopo, consulte Visão geral de External OAuth.
Uso do redirecionamento do cliente com External OAuth¶
O Snowflake oferece suporte para o uso do redirecionamento do cliente com OAuth externo, incluindo o uso do redirecionamento do cliente e OAuth externo com clientes Snowflake com suporte.
Para obter mais informações, consulte Redirecionamento de conexões do cliente.
Uso de políticas de rede com External OAuth¶
Atualmente, políticas de rede não podem ser adicionadas à sua integração de segurança External OAuth. Entretanto, você ainda pode implementar políticas de rede que se aplicam amplamente a toda a conta Snowflake.
Se seu caso de uso exigir uma política de redes que seja específica para a integração de segurança OAuth, use Snowflake OAuth. Esta abordagem permite que a política de redes OAuth do Snowflake seja distinta de outras políticas de rede que possam se aplicar à conta Snowflake.
Para obter mais informações, consulte Políticas de redes.
Uso da replicação com External OAuth¶
O Snowflake oferece suporte à replicação e failover/failback da integração de segurança OAuth externo a partir da conta de origem para a conta de destino.
Para obter mais detalhes, consulte Replicação de integrações de segurança e políticas de redes em múltiplas contas.
Procedimento de teste¶
Para testar a configuração de um servidor de autorização personalizado:
Verificar se o usuário do teste existe em seu IdP e se tem uma senha.
Verificar se o usuário do teste existe no Snowflake com seu valor de atributo
login_name
definido para a declaração<declaração_mapeamento_usuário_token_external_oauth>
.Registro de um cliente OAuth 2.0
Permitir ao cliente OAuth 2.0 fazer uma solicitação POST ao ponto de extremidade do token personalizado, como segue:
Tipo de concessão definida para proprietário de recursos
Cabeçalho HTTP de autorização básica contendo clientID e segredo
Dados FORM contendo o nome de usuário e senha
Incluir escopos
O comando de exemplo solicita a função ANALYST
personalizada e isso considera que session:role:analyst
foi definido em seu servidor de autorização personalizado.
Aqui está um exemplo para obter um token de acesso usando cURL.
curl -X POST -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \
--user <OAUTH_CLIENT_ID>:<OAUTH_CLIENT_SECRET> \
--data-urlencode "username=<IdP_USER_USERNAME>" \
--data-urlencode "password=<IdP_USER_PASSWORD>" \
--data-urlencode "grant_type=password" \
--data-urlencode "scope=session:role:analyst" \
<IdP_TOKEN_ENDPOINT>
Conexão ao Snowflake com External OAuth¶
Após configurar sua integração de segurança e obter seu token de acesso, você pode se conectar ao Snowflake usando uma das seguintes opções:
Observe o seguinte:
É necessário definir o parâmetro
authenticator
comooauth
e o parâmetrotoken
comoexternal_oauth_access_token
.Ao passar o valor
token
como um parâmetro de consulta de URL, é necessário codificar o valortoken
para a URL.Ao passar o valor
token
para um objeto Properties (por exemplo, driver JDBC), nenhuma modificação é necessária.
Por exemplo, se estiver usando o Conector Python, defina a cadeia de conexão como mostrado abaixo.
ctx = snowflake.connector.connect(
user="<username>",
host="<hostname>",
account="<account_identifier>",
authenticator="oauth",
token="<external_oauth_access_token>",
warehouse="test_warehouse",
database="test_db",
schema="test_schema"
)
Agora você pode usar o External OAuth para se conectar ao Snowflake de forma segura.