Federação de identidades de carga de trabalho¶
Este documento é destinado aos seguintes públicos:
Desenvolvedores de serviços de nuvem internos.
Administradores que gerenciam integrações com serviços internos e externos.
Desenvolvedores de aplicativos SaaS multilocatários que desejam emitir tokens de ID de Federação OpenID Connect (OIDC) para cargas de trabalho individuais em execução em sua plataforma, para que cada carga de trabalho do cliente possa se autenticar no Snowflake como um usuário dedicado.
A federação de identidades de carga de trabalho (Workload Identity Federation, WIF) é um método de autenticação entre serviços que permite que cargas de trabalho, como aplicativos, serviços ou contêineres, autentiquem-se no Snowflake usando o sistema de identidade nativo do provedor de nuvem deles, como funções AWS Identity and Access Management (AWS IAM), Microsoft Entra ID e contas de serviço Google Cloud, para obter um atestado que o Snowflake pode usar e validar.
A WIF elimina a necessidade de gerenciar e armazenar credenciais de longa duração, como senhas, chaves de API, pares de chaves e tokens de acesso programático, para autenticação no Snowflake. A WIF também reduz a complexidade envolvida na obtenção de credenciais, já que outros métodos, como OAuth externo, podem exigir mais esforço para configuração. Aplicativos, serviços e contêineres que utilizam conectores Snowflake obtêm automaticamente credenciais de curta duração do provedor de identidade (IdP) de sua plataforma por meio dos mecanismos nativos de cada plataforma.
Benefícios¶
Esta seção descreve as vantagens de usar a WIF para autenticação:
Custo-benefício: Usar IdPs existentes para gerenciar identidades de serviço reduz a necessidade de ferramentas ou licenças adicionais, o que pode ser econômico.
Interoperabilidade: Serviços populares de provedor de nuvem, como AWS IAM, Entra ID e Google Cloud, oferecem suporte e incentivam a WIF como método de autenticação para cargas de trabalho externas.
Auditoria e monitoramento convenientes:
Os administradores podem usar serviços de provedores de nuvem existentes, como o AWS CloudTrail e o Azure Monitor, para registrar e monitorar atividades.
Os administradores do Snowflake podem consultar as exibições LOGIN_HISTORY e CREDENTIALS no esquema ACCOUNT_USAGE para monitorar e fazer auditoria dos serviços que usam a WIF.
Fluxo de trabalho para implementar a federação de identidades de carga de trabalho¶
Você pode usar a WIF para autenticar uma variedade de cargas de trabalho usando IdPs diferentes, mas o fluxo de trabalho básico, conforme mostrado nas etapas a seguir, permanece o mesmo:
Como administrador de carga de trabalho, configure seu serviço para usar um provedor de identidade nativo para que o provedor possa emitir um atestado da identidade da sua carga de trabalho. Esse atestado geralmente é, mas nem sempre, um token da Web JSON (JWT).
Como administrador do Snowflake, crie um usuário de serviço Snowflake para sua carga de trabalho. Você define as propriedades desse usuário com os valores encontrados no atestado enviado pelo provedor. Por exemplo, uma propriedade de usuário pode especificar o nome de uma função IAM ou o URL do emissor do provedor.
Como desenvolvedor de carga de trabalho, configure sua carga de trabalho para usar um driver Snowflake. Os drivers enviam o atestado ao Snowflake para verificação.
Para ver exemplos completos desse fluxo de trabalho para diferentes tipos de cargas de trabalho e IdPs, consulte Casos de uso.
Requisitos de controle de acesso¶
Para configurar a WIF para um usuário de serviço Snowflake, ou seja, um usuário com a propriedade TYPE definida como SERVICE, você deve conceder às suas funções ativadas um dos seguintes privilégios:
OWNERSHIP no usuário do serviço.
MODIFY PROGRAMMATIC AUTHENTICATION METHODS no usuário do serviço.
Drivers Snowflake compatíveis¶
Uma carga de trabalho usa um driver Snowflake para enviar um atestado ao se conectar ao Snowflake. Os seguintes drivers oferecem suporte à federação de identidades de carga de trabalho:
Driver |
Versão mínima |
|---|---|
v1.16.0 |
|
v3.26.0 |
|
v4.8.0 |
|
v2.2.0 |
|
v3.11.0 |
|
v3.17.0 |
Minimizando o número de identidades do Snowflake¶
A criação de um usuário dedicado do Snowflake para cada carga de trabalho WIF pode ser um desafio conforme a escala. Muitas vezes, é melhor consolidar para que várias cargas de trabalho sejam autenticadas com um número bem definido e limitado de usuários de serviço Snowflake. Essa abordagem reduz a expansão de identidades no Snowflake, simplifica o gerenciamento do ciclo de vida do usuário e permite padrões de acesso consistentes sem vincular estreitamente os usuários do Snowflake a cargas de trabalho individuais ou infraestrutura.
Criar um único usuário para várias cargas de trabalho¶
Alguns provedores de nuvem permitem que a identidade anexada a uma carga de trabalho represente outra identidade. Por exemplo, suponha que uma carga de trabalho no Google Cloud esteja anexada à conta de serviço A. Você pode usar a representação de conta de serviço para que a conta de serviço A se autentique como a conta de serviço B. Ou seja, conta de serviço A representa a conta de serviço B de modo que a carga de trabalho possa ser autenticada no Snowflake como o usuário B.
A representação é especialmente útil em um ambiente que tem muitas cargas de trabalho, porque a criação de um mapeamento individual entre cada carga de trabalho e um usuário do serviço Snowflake é cara e difícil de gerenciar em termos operacionais. Ao permitir que várias cargas de trabalho representem uma identidade compartilhada do Snowflake, as equipes podem centralizar o acesso ao Snowflake em um pequeno conjunto de usuários de serviço e, ao mesmo tempo, aplicar controles de acesso usando o IAM do provedor de nuvem.
Pré-requisito
Para usar a representação de modo que várias cargas de trabalho sejam autenticadas com uma única identidade do Snowflake, a carga de trabalho deve estar no Google Cloud ou na AWS. Atualmente, o Microsoft Azure não oferece suporte à representação.
Fluxo de trabalho
Como administrador de carga de trabalho, configure as cargas de trabalho para que suas identidades anexadas representem outra identidade.
Como administrador do Snowflake, crie um usuário de serviço que corresponda à identidade do provedor de nuvem que está se autenticando no Snowflake. Por exemplo, se as cargas de trabalho usam a conta de serviço
Dpara se autenticarem, crie um usuário de serviço e defina o parâmetro SUBJECT dele com o identificador exclusivo da conta de serviçoD.Como desenvolvedor de carga de trabalho, use um parâmetro de conexão do driver para definir a cadeia de identidade das cargas de trabalho que usam a representação. O parâmetro é definido como uma lista de cadeias de caracteres, em que cada uma delas é a identidade do provedor de nuvem (por exemplo, o ID da conta de serviço).
O driver segue a cadeia de identidade definida na lista para obter o token necessário para autorizar a próxima identidade do provedor de nuvem. Cada identidade na cadeia precisa de permissões para representar apenas a próxima identidade. A identidade final na lista obtém o token de conexão do Snowflake que é usado para se conectar ao Snowflake.
Para obter a sintaxe do parâmetro de conexão referente ao seu driver, consulte a documentação do driver.
Exemplo
Suponha que uma carga de trabalho do Google Cloud esteja anexada à conta de serviço A, mas representa a conta de serviço B que, por sua vez, representa a conta de serviço D. Para configurar o driver Python para que a carga de trabalho seja autenticada com WIF usando a identidade da conta de serviço D, defina o parâmetro de conexão da seguinte forma:
workload_identity_impersonation_path=['service_account_a@my-project.iam.gserviceaccount.com',
'service_account_b@my-project.iam.gserviceaccount.com',
'service_account_d@my-project.iam.gserviceaccount.com']
O usuário do serviço Snowflake criado para a carga de trabalho deve conter o identificador da identidade final na cadeia de identidade. Considerando o exemplo acima, crie o usuário do serviço com o seguinte comando:
CREATE USER <username>
WORKLOAD_IDENTITY = (
TYPE = GCP
SUBJECT = 'service_account_d@my-project.iam.gserviceaccount.com'
)
TYPE = SERVICE
DEFAULT_ROLE = PUBLIC;
Criar um único usuário para vários ambientes GitHub ou GitLab¶
Se você usa ações GitHub ou projetos GitLab, pode usar o provedor OIDC da ferramenta para usar a WIF para se autenticar no Snowflake. Por padrão, o token OIDC de cada ação GitHub ou projeto GitLab pode ter uma entidade diferente na declaração sub, o que exigiria que você tivesse vários usuários de serviço Snowflake, um para cada entidade.
Entretanto, o GitHub e o GitLab permitem que você personalize a declaração sub dos tokens OIDC. Isso permite que você configure a ferramenta de modo que a entidade dos tokens OIDC seja a mesma para todos os seus ambientes. Ao criar um usuário de serviço Snowflake, você especifica a entidade dos tokens OIDC que ele receberá do GitHub ou do GitLab. Como a entidade nos tokens sempre será a mesma (ou seja, o valor personalizado), você só precisa de um usuário de serviço para todos os seus ambientes.
Para saber mais sobre a personalização da declaração sub de um token OIDC do GitHub ou do GitLab, consulte os seguintes recursos:
GitHub: Para personalizar a declaração de entidade para uma organização ou um repositório, consulte a documentação do GitHub.
GitLab: Para usar a API Project para personalizar a declaração
subdo token OIDC do GitLab, consulte a documentação do GitLab. Atualmente, a declaração é personalizada com o atributoci_id_token_sub_claim_components.
Depois de definir uma declaração sub personalizada que seja a mesma para todos os seus ambientes GitHub ou GitLab, configure o parâmetro SUBJECT do seu usuário do serviço Snowflake para corresponder à declaração sub personalizada.
Fortalecimento de sua postura de segurança¶
Você pode usar uma política de autenticação para controlar quais usuários de serviço Snowflake podem se autenticar com a WIF. Você também pode criar e definir a política de autenticação para que uma carga de trabalho possa se autenticar somente se usar um provedor de identidade especificado ou uma conta dentro desse provedor.
Por exemplo, a seguinte política de autenticação permite que uma carga de trabalho seja autenticada somente se usar Microsoft Entra ID como seu provedor e o emissor do atestado for um locatário Microsoft Entra ID com o ID de locatário https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0:
CREATE AUTHENTICATION POLICY workload_policy WORKLOAD_IDENTITY_POLICY=( ALLOWED_PROVIDERS = (AZURE) ALLOWED_AZURE_ISSUERS = ( 'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0') );
Para obter mais informações sobre o parâmetro WORKLOAD_IDENTITY_POLICY, consulte CREATE AUTHENTICATION POLICY.
Para obter mais informações sobre como definir uma política de autenticação para que ela seja aplicada, consulte Configuração de uma política de autenticação em uma conta ou usuário.
Casos de uso¶
Os casos de uso a seguir são exemplos de implementação da WIF para uma carga de trabalho:
Autenticar usando funções do IAM na AWS e um driver Snowflake para Python¶
Conclua as tarefas a seguir para usar a WIF para se autenticar no Snowflake do seu serviço AWS:
Configuração de AWS¶
Para configurar seu serviço AWS para usar o AWS IAM como seu provedor de identidade, anexe uma função do IAM. Para obter mais informações, consulte a documentação da AWS correspondente à sua carga de trabalho.
Para o Amazon EC2, consulte Anexar uma função do IAM a uma instância.
Para o AWS Lambda, consulte Definição de permissões de função do Lambda com uma função de execução.
Configurar o Snowflake¶
Para configurar o Snowflake, crie um usuário de serviço Snowflake, ou seja, um usuário do tipo SERVICE, que use a WIF para se autenticar no Snowflake.
Antes de começar
Para configurar o Snowflake com sucesso, você precisa ter o identificador de recurso da Amazon (ARN) que identifica exclusivamente a função ou o usuário AWS associado à instância que está sendo autenticada no Snowflake. Para obter o ARN de uma função do IAM, conclua as seguintes etapas:
Faça login no Console da AWS e navegue até o Painel do IAM.
Na navegação à esquerda, selecione Roles.
Selecione o nome da função que você anexou à sua instância da AWS.
Na seção Summary, localize o ARN e selecione o ícone Copy.
O Snowflake aceita os seguintes formatos de identificadores do IAM:
arn:aws:iam::account:user/user_name_with_path
arn:aws:iam::account:role/role_name_with_path
arn:aws:sts::account:assumed-role/role_name/role_session_name
Para criar um usuário de serviço para sua carga de trabalho:
Faça login na Snowsight.
Para abrir a lista de planilhas, no menu de navegação, selecione Projects » Worksheets.
Para abrir uma nova planilha SQL, selecione +.
Para criar um usuário de serviço que use a WIF para se autenticar no Snowflake, execute uma instrução CREATE USER na planilha:
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = AWS ARN = '<amazon_resource_identifier>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
Em que
ARNé o valor obtido antes de iniciar essas etapas.
Configurar sua carga de trabalho para usar um driver Snowflake¶
Nota
É possível configurar a carga de trabalho para usar qualquer driver Snowflake compatível com a WIF. Para a lista completa, consulte Drivers Snowflake compatíveis.
Se sua carga de trabalho precisar de um driver Python, conclua as seguintes etapas:
No código do aplicativo Python, adicione o seguinte código-fonte:
import os import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='AWS' )
Execute o aplicativo Python. Ele se autentica no Snowflake usando a WIF.
Autenticar usando Microsoft Entra ID e um driver Snowflake para Python¶
Conclua as etapas em cada seção listada abaixo para usar a WIF para se autenticar no Snowflake do Microsoft Entra ID:
Configuração de Microsoft Entra ID¶
Um administrador de locatário do Microsoft Entra ID deve concluir as etapas a seguir para permitir o uso da identidade de carga de trabalho do Snowflake. Essas etapas precisam ser executadas apenas uma vez por locatário do Microsoft Entra ID:
Efetue login no portal do Microsoft Azure.
Certifique-se de ter privilégios de administrador de locatário do Azure.
Conceda permissão para instalar o aplicativo Snowflake EntraID multilocatário acessando o URI de consentimento.
O aplicativo Snowflake EntraID multilocatário é verificado pelo editor e representa o Snowflake como um recurso. O aplicativo é usado como o destinatário do token de acesso durante a autenticação no Snowflake. Esse aplicativo requer apenas permissões básicas e não tem privilégios.
Selecione Accept para conceder permissões ao aplicativo Snowflake EntraID.
Configuração de Microsoft Azure¶
Conclua as etapas a seguir para configurar o serviço Microsoft Azure para usar a WIF:
Efetue login no portal do Microsoft Azure.
Selecione sua carga de trabalho, como uma máquina virtual ou um serviço de aplicativo.
Na barra lateral, navegue até Security » Identity.
Habilite uma identidade gerenciada para uma VM do Azure ou uma função do Azure.
Salve o Object (Principal) ID para uma etapa posterior.
Configurar o Snowflake¶
Para configurar o Snowflake, crie um usuário de serviço Snowflake, ou seja, um usuário do tipo SERVICE, que use a WIF para se autenticar no Snowflake.
Antes de começar
Para configurar o Snowflake com sucesso, você precisa das seguintes informações:
O ID do objeto (ID principal) com distinção entre maiúsculas e minúsculas da identidade gerenciada que você habilitou na etapa anterior. É possível usar o Portal do Azure para copiar esse identificador da página Identity da sua VM ou função do Azure.
Seu locatário do Microsoft Entra ID. Use esse valor para construir o URL de autoridade.
Para obter o ID do locatário usando o console do Microsoft Entra, consulte Como encontrar seu locatário do Microsoft Entra ID.
Para obter o ID do locatário usando o PowerShell, execute os seguintes comandos:
Connect-AzAccount Get-AzTenant
Para criar um usuário de serviço para sua carga de trabalho:
Faça login na Snowsight.
Para abrir a lista de planilhas, no menu de navegação, selecione Projects » Worksheets.
Para abrir uma nova planilha SQL, selecione +.
Para criar um usuário de serviço que use a WIF para se autenticar no Snowflake, execute uma instrução CREATE USER na planilha:
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = AZURE ISSUER = 'https://login.microsoftonline.com/<tenant_id>/v2.0' SUBJECT = '<managed_identity_object_id>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
Em que
ISSUEReSUBJECTsão os valores obtidos antes de iniciar essas etapas.
Configurar sua carga de trabalho para usar um driver Snowflake¶
Nota
É possível configurar a carga de trabalho para usar qualquer driver Snowflake compatível com a WIF. Para a lista completa, consulte Drivers Snowflake compatíveis.
Se sua carga de trabalho precisar de um driver Python, conclua as seguintes etapas:
No código do aplicativo Python, adicione o seguinte código-fonte:
import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='AZURE' )
Execute o aplicativo Python. Ele se autentica no Snowflake usando a WIF.
Nota
Como desenvolvedor da carga de trabalho, talvez seja necessário definir uma variável de ambiente relacionada à identidade gerenciada que o administrador da carga de trabalho habilitou. Se o administrador habilitou uma identidade gerenciada atribuída pelo usuário em vez de uma atribuída pelo sistema, você deverá definir a variável de ambiente MANAGED_IDENTITY_CLIENT_ID para o ID do cliente da identidade gerenciada que deseja usar para autenticação no Snowflake.
Autenticar usando contas de serviço do Google Cloud e um driver Snowflake para Python¶
Conclua as tarefas a seguir para usar a WIF para se autenticar no Snowflake do seu serviço Google Cloud:
Configuração de Google Cloud¶
Para configurar seu serviço para usar o Google Cloud como seu provedor de identidade, anexe uma conta de serviço à sua instância do GCE ou do Cloud Run.
Configurar o Snowflake¶
Para configurar o Snowflake, crie um usuário de serviço Snowflake, ou seja, um usuário do tipo SERVICE, que use a WIF para se autenticar no Snowflake.
Antes de começar
Para configurar o Snowflake com sucesso, você precisa ter o valor da propriedade uniqueId da conta de serviço. Para obter esse ID exclusivo, use o Google Cloud CLI para executar o seguinte comando:
gcloud iam service-accounts describe "<SERVICE_ACCOUNT_EMAIL_ADDRESS>" --format="value(uniqueId)"
Para criar um usuário de serviço para sua carga de trabalho:
Faça login na Snowsight.
Para abrir a lista de planilhas, no menu de navegação, selecione Projects » Worksheets.
Para abrir uma nova planilha SQL, selecione +.
Para criar um usuário de serviço que use a WIF para se autenticar no Snowflake, execute uma instrução CREATE USER na planilha:
CREATE USER <username> WORKLOAD_IDENTITY = ( TYPE = GCP SUBJECT = '<unique_id_of_service_account>' ) TYPE = SERVICE DEFAULT_ROLE = PUBLIC;
Em que
SUBJECTé o valor obtido antes de iniciar essas etapas.
Configurar sua carga de trabalho para usar um driver Snowflake¶
Nota
É possível configurar a carga de trabalho para usar qualquer driver Snowflake compatível com a WIF. Para a lista completa, consulte Drivers Snowflake compatíveis.
Se sua carga de trabalho precisar de um driver Python, conclua as seguintes etapas:
No código do aplicativo Python, adicione o seguinte código-fonte:
import snowflake.connector conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='GCP' )
Execute o aplicativo Python. Ele se autentica no Snowflake usando a WIF.
Autenticar usando um emissor OpenID Connect (OIDC) do Elastic Kubernetes Service (EKS)¶
Conclua as etapas em cada seção listada abaixo para usar a WIF para se autenticar no Snowflake do Elastic Kubernetes Service (EKS):
Configuração de EKS¶
Configure o EKS para emitir tokens de ID compatíveis com o Snowflake.
Configure o YAML de implantação do pod para incluir um volume de token ServiceAccount projetado.
Configure os tokens de ID para conter uma declaração de público com
snowflakecomputing.com.A seguir, um exemplo de configuração de YAML com o público adequado:
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.com
Configurar o Snowflake¶
Para configurar o Snowflake, crie um usuário de serviço Snowflake, ou seja, um usuário do tipo SERVICE, que use a WIF para se autenticar no Snowflake.
Antes de começar
Para configurar o Snowflake com sucesso, você precisa das seguintes informações:
O URL do emissor do provedor OIDC que está gerando o token de ID para a conta de serviço do Kubernetes. Para obter o URL desse emissor, você pode executar uma das seguintes tarefas:
Navegue até a guia Overview do seu cluster e copie o valor no campo OpenID Connect provider URL.
Execute o seguinte comando com acesso ao ponto de extremidade do servidor de API:
aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
O namespace e o nome da conta de serviço do Kubernetes. Use essas informações para construir o assunto do token de ID emitido pelo provedor OIDC.
Para criar um usuário de serviço para sua carga de trabalho:
Faça login na Snowsight.
Para abrir a lista de planilhas, no menu de navegação, selecione Projects » Worksheets.
Para abrir uma nova planilha SQL, selecione +.
Para criar um usuário de serviço que use a WIF para se autenticar no Snowflake, execute uma instrução CREATE USER na planilha:
CREATE USER my_eks_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://oidc.eks.<region>.amazonaws.com/id/<issuer_id>' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
Em que
ISSUEReSUBJECTsão os valores obtidos antes de iniciar essas etapas.
Configurar sua carga de trabalho para usar um driver Snowflake¶
Nota
É possível configurar a carga de trabalho para usar qualquer driver Snowflake compatível com a WIF. Para a lista completa, consulte Drivers Snowflake compatíveis.
Se sua carga de trabalho precisar de um driver Python, conclua as seguintes etapas:
No código do aplicativo Python, adicione o seguinte código-fonte:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
Em que
service_account_token_pathé o token criado na etapa Configuração de EKS. Com base no exemplo do YAML dessa etapa, o caminho do token seria/var/run/secrets/tokens/snowflake-token.Execute o aplicativo Python. Ele se autentica no Snowflake usando a WIF.
Autenticar usando um emissor OpenID Connect (OIDC) do Azure Kubernetes Service (AKS)¶
Conclua as etapas em cada seção listada abaixo para usar a WIF para se autenticar no Snowflake do Azure Kubernetes Service (AKS):
Configuração de AKS¶
Configure o AKS para emitir tokens de ID compatíveis com o Snowflake:
Configure o AKS para emitir tokens de ID compatíveis com o Snowflake.
Configure o YAML de implantação do pod para incluir um volume de token ServiceAccount projetado.
Configure os tokens de ID para conter uma declaração de público com
snowflakecomputing.com.A seguir, um exemplo de configuração de YAML com o público adequado:
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.com
Configurar o Snowflake¶
Para configurar o Snowflake, crie um usuário de serviço Snowflake, ou seja, um usuário do tipo SERVICE, que use a WIF para se autenticar no Snowflake.
Antes de começar
Para configurar o Snowflake com sucesso, você precisa das seguintes informações:
O URL do emissor do provedor OIDC que está gerando o token de ID para a conta de serviço do Kubernetes. Para obter o URL desse emissor, consulte a documentação da Microsoft
O namespace e o nome da conta de serviço do Kubernetes. Use essas informações para construir o assunto do token de ID emitido pelo provedor OIDC.
Para criar um usuário de serviço para sua carga de trabalho:
Faça login na Snowsight.
Para abrir a lista de planilhas, no menu de navegação, selecione Projects » Worksheets.
Para abrir uma nova planilha SQL, selecione +.
Para criar um usuário de serviço que use a WIF para se autenticar no Snowflake, execute uma instrução CREATE USER na planilha:
CREATE USER my_aks_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://<region>.oic.prod-aks.azure.com/<tenant_id>/<uuid>/' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
Em que
ISSUEReSUBJECTsão os valores obtidos antes de iniciar essas etapas.
Configurar sua carga de trabalho para usar um driver Snowflake¶
Nota
É possível configurar a carga de trabalho para usar qualquer driver Snowflake compatível com a WIF. Para a lista completa, consulte Drivers Snowflake compatíveis.
Se sua carga de trabalho precisar de um driver Python, conclua as seguintes etapas:
No código do aplicativo Python, adicione o seguinte código-fonte:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
Em que
service_account_token_pathé o token criado na etapa Configuração de AKS. Com base no exemplo do YAML dessa etapa, o caminho do token seria/var/run/secrets/tokens/snowflake-token.Execute o aplicativo Python. Ele se autentica no Snowflake usando a WIF.
Autenticar usando um emissor OpenID Connect (OIDC) do Google Kubernetes Engine (GKE)¶
Conclua as etapas em cada seção listada abaixo para usar a WIF para se autenticar no Snowflake do Google Kubernetes Engine (GKE):
Configuração de GKE¶
Configure o GKE para emitir tokens de ID compatíveis com o Snowflake.
Configure o YAML de implantação do pod para incluir um volume de token ServiceAccount projetado.
Configure os tokens de ID para conter uma declaração de público com
snowflakecomputing.com.A seguir, um exemplo de configuração de YAML com o público adequado:
kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - mountPath: /var/run/secrets/tokens name: snowflake-token serviceAccountName: build-robot volumes: - name: snowflake-token projected: sources: - serviceAccountToken: path: snowflake-token expirationSeconds: 7200 audience: snowflakecomputing.com
Configurar o Snowflake¶
Para configurar o Snowflake, crie um usuário de serviço Snowflake, ou seja, um usuário do tipo SERVICE, que use a WIF para se autenticar no Snowflake.
Antes de começar
Para configurar o Snowflake com sucesso, você precisa das seguintes informações:
O ID do projeto do Google Cloud, a região do cluster e o nome do cluster. Use essas informações para construir o emissor do OIDC.
O namespace e o nome da conta de serviço do Kubernetes. Use essas informações para construir o assunto do token de ID emitido pelo provedor OIDC.
Para criar um usuário de serviço para sua carga de trabalho:
Faça login na Snowsight.
Para abrir a lista de planilhas, no menu de navegação, selecione Projects » Worksheets.
Para abrir uma nova planilha SQL, selecione +.
Para criar um usuário de serviço que use a WIF para se autenticar no Snowflake, execute uma instrução CREATE USER na planilha:
CREATE USER my_gke_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://container.googleapis.com/v1/projects/<project_id>/locations/<region>/clusters/<cluster_name>' SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>' ) TYPE = SERVICE;
Em que
ISSUEReSUBJECTsão os valores obtidos antes de iniciar essas etapas.
Configurar sua carga de trabalho para usar um driver Snowflake¶
Nota
É possível configurar a carga de trabalho para usar qualquer driver Snowflake compatível com a WIF. Para a lista completa, consulte Drivers Snowflake compatíveis.
Se sua carga de trabalho precisar de um driver Python, conclua as seguintes etapas:
No código do aplicativo Python, adicione o seguinte código-fonte:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token_file_path='<service_account_token_path>' )
Em que
service_account_token_pathé o token criado na etapa Configuração de GKE. Com base no exemplo do YAML dessa etapa, o caminho do token seria/var/run/secrets/tokens/snowflake-token.Execute o aplicativo Python. Ele se autentica no Snowflake usando a WIF.
Autenticar usando um provedor OpenID Connect (OIDC) personalizado¶
Conclua as etapas em cada seção listada abaixo para usar a WIF para se autenticar no Snowflake de um provedor OIDC personalizado:
Configurar seu provedor OIDC¶
Certifique-se de que seu provedor OIDC seja compatível com a configuração do OpenID, conforme especificado na especificação do Discovery. Tanto a configuração quanto o ponto de extremidade
jwks_urida configuração devem ser acessíveis publicamente.Configure seu provedor OpenID para emitir tokens de ID com uma declaração de público definida como
snowflakecomputing.comou uma lista personalizada não vazia. Se você definir uma lista personalizada não vazia, precisará especificá-la ao criar um usuário de serviço no Snowflake.
Configurar o Snowflake¶
Para configurar o Snowflake, crie um usuário de serviço Snowflake, ou seja, um usuário do tipo SERVICE, que use a WIF para se autenticar no Snowflake.
Antes de começar
Para configurar o Snowflake com sucesso, você precisa das seguintes informações:
O URL do emissor do seu provedor OIDC.
A declaração de assunto associada à sua carga de trabalho.
Você pode obter ambos os valores analisando as declarações iss e sub de um token de ID emitido para sua carga de trabalho. Por exemplo, se você tiver acesso a um ambiente semelhante ao Unix com jq, cat e echo, poderá salvar seu token de ID em um arquivo e executar os comandos a seguir.
ID_TOKEN_PATH=<id_token_path>
JWS_PAYLOAD=$(cat $ID_TOKEN_PATH | jq -R 'split(".") | .[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson')
echo "ISSUER = '$(echo $JWS_PAYLOAD | jq -r .iss)'"
echo "SUBJECT = '$(echo $JWS_PAYLOAD | jq -r .sub)'"
Para saber como obter um token de ID, consulte a documentação do seu provedor OIDC.
Para criar um usuário de serviço para sua carga de trabalho:
Faça login na Snowsight.
Para abrir a lista de planilhas, no menu de navegação, selecione Projects » Worksheets.
Para abrir uma nova planilha SQL, selecione +.
Para criar um usuário de serviço que use a WIF para se autenticar no Snowflake, execute uma instrução CREATE USER na planilha:
CREATE USER my_custom_service WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = '<issuer>' SUBJECT = '<subject>' OIDC_AUDIENCE_LIST = ('<custom_audience>') ) TYPE = SERVICE;
Onde:
ISSUEReSUBJECTsão os valores que você obteve antes de iniciar estas etapas.OIDC_AUDIENCE_LISTé um superconjunto não vazio da declaração de público do token de ID definida em Configurar seu provedor OIDC. Você não precisa especificarOIDC_AUDIENCE_LISTse a declaração de público do token de ID forsnowflakecomputing.com.
Configurar sua carga de trabalho para usar um driver Snowflake¶
Nota
É possível configurar a carga de trabalho para usar qualquer driver Snowflake compatível com a WIF. Para a lista completa, consulte Drivers Snowflake compatíveis.
Se sua carga de trabalho precisar de um driver Python, conclua as seguintes etapas:
No código do aplicativo Python, adicione o seguinte código-fonte:
conn = snowflake.connector.connect( account='<snowflake_account>', authenticator='WORKLOAD_IDENTITY', workload_identity_provider='OIDC', token='<id_token>' )
Em que
id_tokené um token de ID não expirado recebido do seu provedor OIDC para sua carga de trabalho. Para saber como obter esse token, consulte a documentação do seu provedor OIDC.Execute o aplicativo Python. Ele se autentica no Snowflake usando a WIF.
Visualizar configurações do usuário do serviço¶
Execute o comando SHOW USER WORKLOAD IDENTITY AUTHENTICATION METHODS para visualizar os valores do parâmetro WORKLOAD_IDENTITY para o usuário do serviço. Por exemplo, para visualizar as configurações da WIF que o usuário do serviço my_custom_service usa para se autenticar no Snowflake, execute o seguinte comando:
SHOW USER WORKLOAD IDENTITY AUTHENTICATION METHODS FOR USER my_custom_service;
Limitações e considerações¶
As cargas de trabalho do Azure não podem ser localizadas em nuvens soberanas do Azure, como Azure China e Azure US Gov. Essa limitação não está relacionada à região Snowflake da sua conta.