Configuração de um volume externo para tabelas Iceberg

Este tópico fornece informações para ajudar você a configurar um volume externo para tabelas Iceberg.

Você pode criar um volume externo para os seguintes serviços de armazenamento em nuvem:

Configuração de um volume externo para Amazon S3

Esta seção aborda como conceder acesso restrito do Snowflake ao seu próprio bucket S3 do Amazon usando um volume externo.

Um administrador da sua organização concede permissões de usuário IAM na sua conta Amazon Web Services (AWS).

Nota

  • O Snowflake não oferece suporte a volumes externos com nomes de bucket que contenham pontos (por exemplo, my.s3.bucket). Snowflake usa caminhos de estilo de hospedagem virtual e HTTPS para acessar dados em S3. No entanto, S3 não oferece suporte a SSL para buckets de estilo de hospedagem virtual com pontos no nome.

  • Para completar as instruções nesta seção, você deve ter permissões na AWS para criar e gerenciar políticas e funções IAM. Se você não for um administrador AWS, peça a seu administrador AWS que complete estas tarefas.

  • Para oferecer suporte à recuperação de dados, ative o controle de versão para seu local de armazenamento em nuvem externo.

Etapa 1: configurar permissões de acesso para o bucket S3

Requisitos de controle de acesso do AWS

Para acessar os arquivos na pasta e nas subpastas, o Snowflake exige as seguintes permissões em um bucket S3 e na pasta:

  • s3:DeleteObject

  • s3:DeleteObjectVersion

  • s3:GetBucketLocation

  • s3:GetObject

  • s3:GetObjectVersion

  • s3:ListBucket

  • s3:PutObject

Nota

A permissão s3:PutObject concede acesso de gravação ao local do volume externo. Para configurar completamente o acesso de gravação, o parâmetro ALLOW_WRITES do volume externo deve ser definido como TRUE (o valor padrão).

Como prática recomendada, o Snowflake recomenda que você crie uma política de IAM designada que conceda ao Snowflake acesso ao bucket S3. Você pode então anexar a política a uma função e usar as credenciais de segurança geradas pela AWS para aquela função para acessar os arquivos no bucket.

Criação de uma política de IAM

Para configurar permissões de acesso para Snowflake no AWS Management Console, faça o seguinte:

  1. Faça login no AWS Management Console.

  2. No painel inicial, selecione Identity & Access Management (IAM):

    Identity & Access Management in AWS Management Console
  3. Selecione Account settings no painel de navegação à esquerda.

  4. Na lista Security Token Service Regions, encontre a região do Snowflake onde sua conta está localizada. Se o status for Inactive, selecione Activate.

  5. Selecione Policies no painel de navegação à esquerda.

  6. Selecione Create Policy:

    Create Policy button on Policies page
  7. Selecione a guia JSON.

  8. Adicione uma política que conceda do Snowflake ao bucket S3 e à pasta.

    As políticas AWS oferecem suporte a uma variedade de diferentes casos de uso de segurança. A seguinte política (em formato JSON) fornece ao Snowflake as permissões necessárias para ler ou gravar dados usando um único bucket e caminho de pasta.

    Copie e cole o texto no editor de políticas:

    Nota

    • Substitua bucket e prefix pelo nome real do bucket e prefixo do caminho da pasta.

    • Os Nomes de recurso da Amazon (ARN) para buckets em regiões governamentais têm um prefixo arn:aws-us-gov:s3:::.

    • Definir a condição "s3:prefix": como ["*"] ou ["prefix/*"] concede acesso a todos os prefixos no bucket ou caminho no bucket especificado, respectivamente.

    {
       "Version": "2012-10-17",
       "Statement": [
             {
                "Effect": "Allow",
                "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:GetObjectVersion",
                   "s3:DeleteObject",
                   "s3:DeleteObjectVersion"
                ],
                "Resource": "arn:aws:s3:::<bucket>/<prefix>/*"
             },
             {
                "Effect": "Allow",
                "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
                ],
                "Resource": "arn:aws:s3:::<bucket>",
                "Condition": {
                   "StringLike": {
                         "s3:prefix": [
                            "<prefix>/*"
                         ]
                   }
                }
             }
       ]
    }
    
    Copy
  9. Selecione Review policy.

  10. Insira um Name de política (por exemplo, snowflake_access) e uma Description opcional.

    Create Policy button in Review Policy page
  11. Selecione Create policy.

Etapa 2: criar uma função IAM no AWS

No Console de gerenciamento AWS, crie uma função AWS IAM para conceder privilégios para o bucket S3 que contém seus arquivos de dados.

  1. Faça login no AWS Management Console.

  2. No painel inicial, selecione Identity & Access Management (IAM):

    Identity & Access Management in AWS Management Console
  3. Selecione Roles no painel de navegação à esquerda.

  4. Selecione Create role.

    Select Trusted Entity Page in AWS Management Console
  5. Para o tipo de entidade de confiança, selecione Another AWS account.

  6. No campo Account ID, digite sua própria ID de conta AWS. Em uma etapa posterior, você modifica a relação de confiança e concede acesso ao Snowflake.

  7. Selecione a opção Require external ID. Insira um ID de espaço reservado como 0000. Em uma etapa posterior, você modifica a relação de confiança e especifica o ID externo para seu volume externo. Um ID externo é necessário para conceder acesso aos seus recursos AWS (como buckets S3) a terceiros, como o Snowflake.

  8. Selecione Next.

  9. Localize a política que você criou em Etapa 1: configurar permissões de acesso para o bucket S3 e selecione-a.

  10. Selecione Next.

    Review Page in AWS Management Console
  11. Digite um nome e descrição para a função e selecione Create role. Agora você criou uma política IAM para um bucket, criou uma função IAM e anexou a política à função.

  12. Na página de resumo da função, localize e registre o valor Role ARN. Você usa esse valor na próxima etapa para criar um volume externo do Snowflake que faça referência a essa função.

    IAM Role

Etapa 3: conceder privilégios necessários para criptografia SSE-KMS à função IAM (opcional)

Para carregar um objeto criptografado com uma chave AWS KMS para o Amazon S3, a função IAM que você criou em Etapa 2: criar uma função IAM no AWS precisa de permissões kms:GenerateDataKey na chave. Para baixar um objeto criptografado com uma chave AWS KMS, a função IAM precisa de permissões kms:Decrypt na chave.

Se você quiser usar uma chave KMS para criptografia no lado do servidor, siga estas etapas para criar uma chave e referenciá-la.

  1. No AWS Management Console, acesse o serviço KMS. Na navegação esquerda, selecione Customer managed keys e selecione Create key. Você deve criar uma chave na mesma região do seu bucket.

  2. Crie um tipo de chave simétrica. Para o uso da chave, selecione Encrypt and decrypt. Selecione Next.

  3. Na caixa Alias, crie um nome para a chave e selecione Next.

  4. Se necessário, forneça um administrador para a chave e selecione Next.

  5. Na etapa Define key usage permissions, insira o nome da sua função IAM. Marque a caixa de seleção ao lado da função e selecione Next.

  6. Selecione Finish para criar a chave.

  7. Encontre a chave na lista de chaves gerenciadas pelo cliente, selecione-a e registre seu ARN. A seguir está um exemplo de ARN para uma chave: arn:aws:kms:us-west-2:111111122222:key/1a1a11aa-aa1a-aaa1a-a1a1-000000000000.

    Ao criar seu volume externo, defina o valor KMS_KEY_ID como ARN da sua chave.

Etapa 4: criar um volume externo no Snowflake

Crie um volume externo usando o comando CREATE EXTERNAL VOLUME.

Nota

Somente administradores de conta (usuários com a função ACCOUNTADMIN) podem executar este comando SQL.

O exemplo a seguir cria um volume externo que define um local de armazenamento do Amazon S3 com criptografia:

CREATE OR REPLACE EXTERNAL VOLUME exvol
   STORAGE_LOCATIONS =
      (
         (
            NAME = 'my-s3-us-west-2'
            STORAGE_PROVIDER = 'S3'
            STORAGE_BASE_URL = 's3://MY_EXAMPLE_BUCKET/'
            STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole'
            ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID='arn:aws:kms:us-west-2:111111122222:key/1a1a11aa-aa1a-aaa1a-a1a1-000000000000')
         )
      );
Copy

Etapa 5: recuperar o usuário AWS IAM para sua conta Snowflake

  1. Para recuperar o ARN do usuário AWS IAM que foi criado automaticamente para sua conta Snowflake, use o comando DESCRIBE EXTERNAL VOLUME. Especifique o nome do volume externo criado anteriormente.

    Por exemplo:

    DESC EXTERNAL VOLUME exvol;
    
    Copy
  2. Registre os valores para as seguintes propriedades:

    Propriedade

    Descrição

    STORAGE_AWS_IAM_USER_ARN

    O usuário AWS IAM criado para sua conta Snowflake; por exemplo, arn:aws:iam::123456789001:user/abc1-b-self1234. O Snowflake fornece um único usuário IAM para toda a sua conta Snowflake. Todos os volumes externos S3 da sua conta usam esse usuário IAM.

    STORAGE_AWS_EXTERNAL_ID

    A ID externa que é necessária para estabelecer uma relação de confiança.

    Você fornece esses valores na próxima etapa.

Etapa 6: conceder ao usuário IAM permissões para acessar objetos de bucket

Nesta etapa, você configura permissões que permitem que o usuário IAM da sua conta Snowflake acesse objetos no seu bucket S3.

  1. Faça login no AWS Management Console.

  2. Selecione Identity & Access Management (IAM):

    Identity & Access Management in AWS Management Console
  3. Selecione Roles no painel de navegação à esquerda.

  4. Selecione a função que você criou em Etapa 2: criar uma função IAM no AWS.

  5. Selecione a guia Trust relationships.

  6. Selecione Edit trust relationship.

  7. Modifique o documento de política com os valores de saída registrados em Etapa 5: recuperar o usuário AWS IAM para sua conta Snowflake:

    Documento de política da função IAM

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "AWS": "<snowflake_user_arn>"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "<snowflake_external_id>"
            }
          }
        }
      ]
    }
    
    Copy

    Onde:

    • snowflake_user_arn é o valor STORAGE_AWS_IAM_USER_ARN que você registrou.

    • snowflake_external_id é o valor STORAGE_AWS_EXTERNAL_ID que você registrou.

    Nota

    Você deverá atualizar este documento de política se criar um novo volume externo (ou recriar um volume externo existente usando a sintaxe CREATE OR REPLACE EXTERNAL VOLUME). Por motivos de segurança, um volume externo novo ou recriado tem um ID externo diferente e não pode resolver a relação de confiança, a menos que você atualize esta política de confiança.

  8. Selecione Update Trust Policy. As alterações são salvas.

Nota

Para verificar se suas permissões estão configuradas corretamente, crie uma tabela Iceberg usando este volume externo. O Snowflake não verifica se suas permissões estão definidas corretamente até que a primeira tabela Iceberg que faz referência a esse volume externo seja criada.

Configuração de um volume externo para o Google Cloud Storage

Esta seção aborda como conceder acesso restrito do Snowflake a um bucket do Google Cloud Storage (GCS) usando um volume externo.

Um administrador da sua organização concede permissões de usuário IAM na sua conta do Google Cloud.

Nota

  • Para concluir as instruções nesta seção, você precisa ter permissões no Google Cloud para criar e gerenciar políticas e funções IAM. Se você não for administrador do Google Cloud, peça ao administrador do Google Cloud para realizar essas tarefas.

  • Para oferecer suporte à recuperação de dados, ative o controle de versão para seu local de armazenamento em nuvem externo.

Etapa 1: criar um volume externo no Snowflake

Crie um volume externo usando o comando CREATE EXTERNAL VOLUME.

Nota

Somente administradores de conta (usuários com a função ACCOUNTADMIN) podem executar este comando SQL.

O exemplo a seguir cria um volume externo que define um local de armazenamento GCS com criptografia:

CREATE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-us-east-1'
        STORAGE_PROVIDER = 'GCS'
        STORAGE_BASE_URL = 'gcs://mybucket1/path1/'
        ENCRYPTION=(TYPE='GCS_SSE_KMS' KMS_KEY_ID = '1234abcd-12ab-34cd-56ef-1234567890ab')
      )
    );
Copy

Etapa 2: recuperar a conta de serviço de armazenamento em nuvem para sua conta Snowflake

Para recuperar o ID para a conta de serviço de armazenamento em nuvem que foi criada automaticamente para sua conta Snowflake, use o comando DESCRIBE EXTERNAL VOLUME. Especifique o nome do volume externo criado anteriormente.

Por exemplo:

DESC EXTERNAL VOLUME exvol;
Copy

Registre o valor da propriedade STORAGE_GCP_SERVICE_ACCOUNT na saída (por exemplo, service-account-id@project1-123456.iam.gserviceaccount.com).

O Snowflake fornece uma única conta de serviço de armazenamento em nuvem para toda a sua conta Snowflake. Todos os volumes externos do Google Cloud Storage usam essa conta de serviço.

Etapa 3: conceder as permissões da conta de serviço para acessar os objetos do bucket

Nesta etapa, você configura as permissões de acesso IAM para Snowflake no console do Google Cloud Platform.

Criação de uma função IAM personalizada

Crie uma função personalizada que tenha as permissões necessárias para acessar o bucket e obter objetos.

  1. Entre no console do Google Cloud Platform como editor de projeto.

  2. No painel inicial, selecione IAM & admin » Roles.

  3. Selecione Create Role.

  4. Digite um nome e uma descrição para a função personalizada.

  5. Selecione Add Permissions.

  6. Filtre a lista de permissões e adicione o seguinte da lista:

    • storage.buckets.get

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

  7. Selecione Create.

Atribuição da função personalizada à conta de serviço de armazenamento em nuvem

  1. Entre no console do Google Cloud Platform como editor de projeto.

  2. No painel inicial, selecione Storage » Browser:

    Bucket List in Google Cloud Platform Console
  3. Selecione um bucket a ser configurado para acesso.

  4. Selecione SHOW INFO PANEL no canto superior direito. O painel de informações do bucket é exibido.

  5. No campo Add members, procure pelo nome da conta de serviço da saída em Etapa 2: recuperar a conta de serviço de armazenamento em nuvem para sua conta Snowflake.

    Bucket Information Panel in Google Cloud Platform Console
  6. No menu suspenso Select a role, selecione Storage » Custom » <função>. A <função> é a função personalizada do Cloud Storage que você criou em Criação de uma função IAM personalizada.

  7. Selecione Add. O nome da conta de serviço é adicionado ao menu suspenso da função Storage Object Viewer no painel de informações.

    Storage Object Viewer role list in Google Cloud Platform Console

Nota

Para verificar se suas permissões estão configuradas corretamente, crie uma tabela Iceberg usando este volume externo. O Snowflake não verifica se suas permissões estão definidas corretamente até que a primeira tabela Iceberg que faz referência a esse volume externo seja criada.

Concessão de permissões de conta do serviço de armazenamento em nuvem para chaves criptográficas do Cloud Key Management Service

Nota

Esta etapa é necessária apenas se seu bucket GCS estiver criptografado usando uma chave armazenada no Google Cloud Key Management Service (Cloud KMS).

  1. Entre no console do Google Cloud Platform como editor de projeto.

  2. No painel inicial, selecione Security » Cryptographic keys.

  3. Selecione o chaveiro que é atribuído ao seu bucket GCS.

  4. No canto superior direito, selecione SHOW INFO PANEL. O painel de informações do chaveiro é exibido.

  5. No campo Add members, procure pelo nome da conta de serviço da saída DESCRIBE EXTERNAL VOLUME em Etapa 2: recuperar a conta de serviço de armazenamento em nuvem para sua conta Snowflake.

  6. A partir do menu suspenso Select a role, selecione a função Cloud KMS CryptoKey Encrypter/Decrypter.

  7. Selecione Add. O nome da conta de serviço é adicionado ao menu suspenso da função Cloud KMS CryptoKey Encrypter/Decrypter no painel de informações.

Configuração de um volume externo para o armazenamento Azure

Esta seção aborda como conceder acesso restrito do Snowflake ao seu próprio contêiner do Microsoft Azure (Azure) usando um volume externo. Snowflake oferece suporte aos seguintes serviços de armazenamento em nuvem do Azure para volumes externos:

  • Armazenamento de Blobs

  • Data Lake Storage Gen2

  • Uso geral v1

  • Uso geral v2

Um administrador da sua organização concede permissões de usuário IAM na sua conta do Azure.

Nota

Etapa 1: criar um volume externo no Snowflake

Crie um volume externo usando o comando CREATE EXTERNAL VOLUME.

Nota

Somente administradores de conta (usuários com a função ACCOUNTADMIN) podem executar este comando SQL.

O exemplo a seguir cria um volume externo que define um local de armazenamento do Azure com criptografia:

CREATE EXTERNAL VOLUME exvol
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-azure-northeurope'
        STORAGE_PROVIDER = 'AZURE'
        STORAGE_BASE_URL = 'azure://exampleacct.blob.core.windows.net/my_container_northeurope/'
        AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
      )
    );
Copy

Etapa 2: conceder ao Snowflake acesso aos locais de armazenamento

  1. Para recuperar um URL para a página de solicitação de permissões da Microsoft, use o comando DESCRIBE EXTERNAL VOLUME. Especifique o nome do volume externo criado anteriormente.

    DESC EXTERNAL VOLUME exvol;
    
    Copy

    Registre os valores para as seguintes propriedades:

    Propriedade

    Descrição

    AZURE_CONSENT_URL

    URL para a página de solicitação de permissões da Microsoft.

    AZURE_MULTI_TENANT_APP_NAME

    Nome do aplicativo cliente do Snowflake criado para sua conta. Em uma etapa posterior desta seção, você concede a este aplicativo a permissão para obter um token de acesso em seus locais de armazenamento permitidos.

    Você usa esses valores nas etapas a seguir.

  2. Em um navegador da Web, navegue até a página de solicitação de permissões da Microsoft (o AZURE_CONSENT_URL).

  3. Selecione Accept. Esta ação permite que a entidade de segurança do serviço Azure criada para sua conta Snowflake obtenha um token de acesso a qualquer recurso dentro de seu locatário. A obtenção de um token de acesso só tem sucesso se você conceder à entidade de segurança de serviço as permissões apropriadas sobre o contêiner (consulte a próxima etapa).

    A página de solicitações de permissão da Microsoft é redirecionada para o site corporativo da Snowflake (snowflake.com).

  4. Entre no portal do Microsoft Azure.

  5. Vá para Azure Services » Storage Accounts. Selecione o nome da conta de armazenamento à qual você deseja conceder acesso da entidade de segurança de serviço Snowflake.

    Nota

    Você deve definir as permissões IAM para um volume externo no nível da conta de armazenamento, não no nível do container.

  6. Selecione Access Control (IAM) » Add role assignment.

  7. Selecione a função Storage Blob Data Contributor para conceder acesso de leitura e gravação à entidade de segurança de serviço Snowflake.

    Nota

    A função Storage Blob Data Contributor concede acesso de gravação ao local do volume externo. Para configurar completamente o acesso de gravação, o parâmetro ALLOW_WRITES do volume externo deve ser definido como TRUE (o valor padrão).

  8. Pesquise a entidade de segurança do serviço Snowflake. Esta é a identidade na propriedade AZURE_MULTI_TENANT_APP_NAME na saída DESC EXTERNAL VOLUME (na Etapa 1). Pesquise a cadeia de cadeia de caracteres antes do sublinhado na propriedade AZURE_MULTI_TENANT_APP_NAME.

    Importante

    • Pode levar uma hora ou mais para que o Azure crie a entidade de segurança do serviço Snowflake solicitada por meio da página de solicitação da Microsoft nesta seção. Se a entidade de segurança de serviço não estiver disponível imediatamente, aguarde uma ou duas horas e depois procure novamente.

    • Se você excluir a entidade de segurança de serviço, o volume externo deixa de funcionar.

    Add role assignment in Azure Storage Console
  9. Selecione Review + assign.

    Nota

    Pode levar até 10 minutos para que as alterações entrem em vigor quando você atribui uma função. Para obter mais informações, consulte Sintoma – não estão sendo detectadas alterações de atribuição de função na documentação do Microsoft Azure.

Nota

Para verificar se suas permissões estão configuradas corretamente, crie uma tabela Iceberg usando este volume externo. O Snowflake não verifica se suas permissões estão definidas corretamente até que a primeira tabela Iceberg que faz referência a esse volume externo seja criada.

Ativação do controle de versão para seu armazenamento externo em nuvem

Os dados da tabela Iceberg são armazenados no armazenamento em nuvem externo que você gerencia. Se os dados estiverem em um repositório central de dados (ou data lake) operado por diversas ferramentas e serviços, poderá ocorrer exclusão acidental ou corrupção.

Para oferecer suporte à recuperação de objetos, você pode ativar o controle de versão para seu armazenamento externo em nuvem.

Local de armazenamento ativo

Durante o período de versão preliminar, cada volume externo oferece suporte a um único local de armazenamento ativo. A localização ativa permanece a mesma durante a vida útil do volume externo.

Se você especificar vários locais de armazenamento ao criar um volume externo, o Snowflake atribuirá um local como local ativo para o volume externo.

A atribuição ocorre quando a primeira tabela que utiliza o volume externo é criada. Snowflake usa a seguinte lógica para escolher um local ativo:

  • Se a lista STORAGE_LOCATIONS contiver um ou mais locais de armazenamento locais, o Snowflake usará o primeiro local de armazenamento local da lista. Um local de armazenamento local está no mesmo provedor de nuvem e na mesma região que sua conta Snowflake.

  • Se a lista STORAGE_LOCATIONS não contiver nenhum local de armazenamento local, o Snowflake selecionará o primeiro local da lista.

Nota

  • As tabelas Iceberg entre nuvens/regiões são suportadas somente quando você usa uma integração de catálogo. Para obter mais informações, consulte Suporte entre nuvens/entre regiões.

  • Os volumes externos criados antes da versão 7.44 do Snowflake podem ter usado uma lógica diferente para selecionar um local ativo.

Definição de um volume externo no nível da conta ou do objeto

Para definir qual volume externo existente usar para tabelas Iceberg, você pode definir o parâmetro EXTERNAL_VOLUME nos seguintes níveis:

Conta

Os administradores de conta podem usar o comando ALTER ACCOUNT para definir o parâmetro para a conta. Se o valor for definido para a conta, todas as tabelas Iceberg criadas na conta serão lidas e gravadas nesse volume externo por padrão.

Objeto

Os usuários podem executar o comando CREATE <objeto> ou ALTER <objeto> apropriado para substituir o valor do parâmetro EXTERNAL_VOLUME no nível do banco de dados, do esquema ou da tabela Iceberg. A declaração de escopo mais baixo é usada: tabela > esquema > banco de dados > conta.

Além dos privilégios mínimos necessários para modificar um objeto usando o comando ALTER <tipo_de_objeto_> apropriado, uma função deve ter o privilégio USAGE no volume externo.