Opção 2: Configuração de uma função AWS IAM para acessar o Amazon S3 — Obsoleto

Nota

Você pode encontrar um erro assumeRole ao usar o método de autenticação obsoleto.

Esta seção descreve como configurar um bucket S3, função IAM e políticas para que o Snowflake acesse um estágio externo de forma segura em nome de um ou mais usuários individuais em sua conta Snowflake.

Como prática recomendada, limite o acesso do bucket S3 a uma função IAM específica com as permissões mínimas exigidas. A função IAM é criada em sua conta AWS junto com as permissões de acesso a seu bucket S3 e a política de confiança para permitir que o Snowflake assuma a função IAM.

Trust policies allowing IAM user access to S3 bucket
  1. Um usuário AWS IAM criado para sua conta Snowflake está associado a uma função IAM que você configura por meio de uma relação de confiança.

  2. A função recebe acesso limitado a um bucket S3 por meio das políticas IAM que você configura.

Nota

Para completar as instruções neste tópico é necessário o acesso administrativo à AWS. Se você não for um administrador AWS, peça a seu administrador AWS que complete estas tarefas.

Neste tópico:

Etapa 1: Configurar permissões de acesso ao bucket S3

Requisitos de controle de acesso da AWS

O Snowflake requer as seguintes permissões em uma pasta e bucket S3 para poder acessar os arquivos na pasta (e em qualquer subpasta):

  • s3:GetBucketLocation

  • s3:GetObject

  • s3:GetObjectVersion

  • s3:ListBucket

Nota

As seguintes permissões adicionais são necessárias para realizar ações SQL adicionais:

Permissão

Ação SQL

s3:PutObject

Descarregue os arquivos no bucket.

s3:DeleteObject

Ou purgue automaticamente os arquivos do estágio após um carregamento bem-sucedido ou execute instruções REMOVE para remover os arquivos manualmente.

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

Criação de uma política IAM

As seguintes instruções passo a passo descrevem como configurar as permissões de acesso ao Snowflake em seu Console de gerenciamento AWS para que você possa usar um bucket S3 para carregar e descarregar dados:

  1. Faça login no Console de gerenciamento AWS.

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

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

  4. Expanda a lista Security Token Service Regions, encontre a região AWS correspondente à região onde sua conta está localizada e escolha Activate se o status for Inactive.

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

  6. Clique em Create Policy:

    Create Policy button on Policies page
  7. Clique na guia JSON.

  8. Adicione um documento de política que permitirá ao Snowflake acessar o bucket S3 e a pasta.

    A seguinte política (em formato JSON) fornece ao Snowflake as permissões necessárias para carregar ou descarregar dados usando um único bucket e caminho de pasta. Você também pode purgar arquivos de dados usando a opção de cópia PURGE.

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

    Nota

    Certifique-se de substituir bucket e prefix pelo nome real do bucket e prefixo do caminho da pasta.

    {
        "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

    Nota

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

    Observe que as políticas AWS oferecem suporte a uma variedade de diferentes casos de uso de segurança.

    A política a seguir fornece ao Snowflake as permissões necessárias para carregar dados de um único bucket somente leitura e caminho de pasta. A política inclui as permissões s3:GetBucketLocation, s3:GetObject, s3:GetObjectVersion, e s3:ListBucket:

    Política alternativa: Carregamento a partir de um bucket S3 somente leitura

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
                ],
                "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. Clique em Review policy.

  10. Digite o nome da política (por exemplo, snowflake_access) e uma descrição opcional. Em seguida, clique em Create policy para criar a política.

    Create Policy button in Review Policy page

Etapa 2: Criar uma função AWS IAM

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

  1. Faça login no Console de gerenciamento AWS.

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

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

  4. Clique no botão Create role.

    Select Trusted Entity Page in AWS Management Console
  5. Selecione Another AWS account como o tipo de entidade confiável.

  6. No campo Account ID, digite sua própria ID de conta AWS. Mais tarde, você modificará a relação de confiança e concederá acesso ao Snowflake. É necessário uma ID externa para conceder acesso a seus recursos AWS (ou seja, S3) a um terceiro (ou seja, Snowflake, neste caso) mais tarde nestas instruções.

  7. Selecione a opção Require external ID. Insira uma ID fictícia, como 0000. Mais tarde, você modificará a relação de confiança e especificará a ID externa para seu estágio do Snowflake.

  8. Clique no botão Next.

  9. Localize a política que você criou em Etapa 1: Configurar permissões de acesso ao bucket S3 (neste tópico) e selecione essa política.

  10. Clique no botão Next.

    Review Page in AWS Management Console
  11. Digite um nome e descrição para a função e clique no botão 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. Registre o valor Role ARN localizado na página de resumo de funções. Na próxima etapa, você criará um estágio do Snowflake que faz referência a essa função como as credenciais de segurança.

    IAM Role

Nota

O Snowflake armazena em cache as credenciais temporárias por um período que não pode exceder o tempo de expiração de 60 minutos. Se você revogar o acesso do Snowflake, os usuários podem ser capazes de listar arquivos e carregar dados a partir do local de armazenamento em nuvem até que o cache expire.

Etapa 3: Criar um estágio externo

Crie um estágio externo (ou seja, S3) que faça referência à função AWS que você criou.

  1. Crie um estágio externo usando o comando CREATE STAGE ou você pode optar por alterar um estágio externo existente e definir a opção CREDENTIALS.

    Nota

    • As credenciais são tratadas separadamente de outros parâmetros de estágio, tais como ENCRYPTION e FILE_FORMAT. O suporte para esses outros parâmetros é o mesmo independentemente das credenciais utilizadas para acessar seu bucket S3 externo:

    • Coloque uma barra (/) no valor do URL para filtrar o caminho de pasta especificado. Se a barra for omitida, todos os arquivos e pastas começando com o prefixo para o caminho especificado serão incluídos.

      Note que a barra é obrigatória para acessar e recuperar arquivos de dados não estruturados no estágio.

    Por exemplo, defina mydb.public como o esquema e banco de dados atual para a sessão do usuário e depois crie um estágio chamado my_S3_stage. Neste exemplo, o estágio faz referência ao bucket S3 e ao caminho mybucket/load/files. Os arquivos no bucket S3 são criptografados com criptografia do lado do servidor (AWS_SSE_KMS):

    USE SCHEMA mydb.public;
    
    CREATE STAGE my_s3_stage
      URL='s3://mybucket/load/files'
      CREDENTIALS = (AWS_ROLE = 'arn:aws:iam::001234567890:role/mysnowflakerole')
      ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');
    
    Copy
  2. Execute o comando DESCRIBE STAGE para visualizar as propriedades do estágio:

    DESC STAGE my_S3_stage;
    
    +--------------------+--------------------------------+---------------+----------------------------------------------------------------+------------------+
    | parent_property    | property                       | property_type | property_value                                                 | property_default |
    |--------------------+--------------------------------+---------------+----------------------------------------------------------------+------------------|
    ...
    | STAGE_CREDENTIALS  | AWS_ROLE                       | String        | arn:aws:iam::001234567890:role/mysnowflakerole                 |                  |
    | STAGE_CREDENTIALS  | AWS_EXTERNAL_ID                | String        | MYACCOUNT_SFCRole=2_jYfRf+gT0xSH7G2q0RAODp00Cqw=               |                  |
    | STAGE_CREDENTIALS  | SNOWFLAKE_IAM_USER             | String        | arn:aws:iam::123456789001:user/vj4g-a-abcd1234                 |                  |
    +--------------------+--------------------------------+---------------+----------------------------------------------------------------+------------------+
    
    Copy
  3. Registre os valores para as propriedades SNOWFLAKE_IAM_USER e AWS_EXTERNAL_ID, onde:

    SNOWFLAKE_IAM_USER

    Um usuário AWS IAM criado para sua conta Snowflake. Este usuário é o mesmo para cada estágio externo S3 criado em sua conta.

    AWS_EXTERNAL_ID

    Uma ID única atribuída ao estágio específico. A ID tem o seguinte formato:

    snowflakeAccount_SFCRole=snowflakeRoleId_randomId

    Observe que os valores AWS_ROLE, AWS_EXTERNAL_ID e SNOWFLAKE_IAM_USER utilizados neste exemplo são apenas para fins ilustrativos.

    Na próxima etapa, você configurará sua função AWS IAM para conceder acesso ao usuário IAM do Snowflake usando a ID externa da AWS gerada.

Etapa 4: Configurar a função AWS IAM para permitir o acesso ao estágio

No Console de gerenciamento da AWS, configure a função IAM usando as propriedades de estágio que você registrou em Etapa 3: Criar um estágio externo (neste tópico):

  1. Faça login no Console de gerenciamento AWS.

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

    Identity & Access Management in AWS Management Console
  3. Escolha Roles no painel de navegação à esquerda e clique na função que você criou em Etapa 2: Criar uma função AWS IAM (neste tópico).

  4. Clique na guia Trust relationships e clique no botão Edit trust relationship.

  5. No campo Policy Document, atualize a política com os valores de propriedade para o estágio:

    • AWS: Digite o ARN para a propriedade do estágio SNOWFLAKE_IAM_USER, ou seja, arn:aws:iam::123456789001:user/vj4g-a-abcd1234 neste exemplo.

    • sts:ExternalId: Insira a ID externa gerada, ou seja, MYACCOUNT_SFCRole=2_jYfRf+gT0xSH7G2q0RAODp00Cqw= neste exemplo.

      {
          "Version": "2012-10-17",
          "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::123456789001:user/vj4g-a-abcd1234"
                    ]
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "sts:ExternalId": "MYACCOUNT_SFCRole=2_jYfRf+gT0xSH7G2q0RAODp00Cqw="
                    }
                }
            }
          ]
      }
      
      Copy

      Nota

      A política de confiança acima permite que um único estágio externo em sua conta Snowflake assuma sua função IAM. É a política de confiança mais restritiva e é, portanto, a mais segura.

      A permissão para assumir a função IAM está associada com a ID externa. Uma ID externa tem o seguinte formato:

      snowflake_account_SFCRole=snowflake_role_id_random_id

      Onde:

      • snowflake_account é o nome atribuído à sua conta Snowflake.

      • snowflake_role_id é uma ID atribuída à função do Snowflake que criou o estágio em Etapa 3: Criar um estágio externo (neste tópico).

        No exemplo atual, o valor de snowflake_role_id é 2. Esta ID está associada a uma única função em sua conta Snowflake. O objetivo dessa ID está limitado às políticas de confiança para estágios externos; como tal, um mapeamento das funções papéis do Snowflake para IDs não está disponível. A ID para uma determinada função só é exposta no valor AWS_EXTERNAL_ID na saída DESCRIBE STAGE. Como prática recomendada, restrinja a capacidade de criar estágios S3 externos para uma única função do Snowflake.

        Observe que a função que cria um estágio não é necessariamente a mesmo que o proprietário do estágio (ou seja, a função que tem o privilégio OWNERSHIP para o estágio). A propriedade do estágio pode ser transferida posteriormente para uma função diferente, sem que seja necessária uma mudança correspondente na política de confiança.

      Por razões de segurança, se você criar uma nova integração de armazenamento (ou recriar uma integração de armazenamento existente usando a sintaxe CREATE OR REPLACE STORAGE INTEGRATION), a integração resultante terá uma ID externa diferente e, portanto, não poderá assumir a função IAM a menos que a política de confiança seja modificada.

      Se você precisar de uma política de confiança com um conjunto de restrições menos seguro (ou seja, uma política que suporte todos os estágios externos em sua conta), substitua random_id na ID externa por um caractere curinga (*):

      snowflake_account_SFCRole=snowflake_role_id_* por exemplo, MYACCOUNT_SFCRole=2_* no exemplo atual.

      Esta forma de ID externa permite que qualquer estágio S3 externo criado por um usuário em sua conta com a mesma função do Snowflake (ou seja, SYSADMIN) assuma a função IAM e, por sua vez, qualquer bucket S3 ao qual a função IAM tenha acesso. Observe que, se você implementar este tipo menos seguro de política de confiança, deve alterar Condition de StringEquals para StringLike.

  6. Clique no botão Update Trust Policy.

Agora você completou a configuração única para acessar seu bucket S3 usando uma função AWS.

Próximo: Criptografia de arquivo de dados da AWS