Permissões para acessar outros recursos da AWS
Para mover dados entre o cluster e outro recurso da AWS, como Amazon S3, Amazon DynamoDB, Amazon EMR, ou Amazon EC2, o cluster deve ter permissão para acessar o recurso e realizar as ações necessárias. Por exemplo, para carregar dados do Amazon S3, COPY deve ter acesso LIST ao bucket e acesso GET para os objetos de bucket. Para obter informações sobre permissões mínimas, consulte Permissões do IAM para COPY, UNLOAD e CREATE LIBRARY.
Para obter autorização a fim de acessar o recurso, o cluster deve ser autenticado. Você pode escolher qualquer um dos seguintes métodos de autenticação:
-
Controle de acesso com base em função – Para controle de acesso baseado na função, você especifica uma função do AWS Identity and Access Management (IAM) usada pelo cluster na autenticação e na autorização. Para resguardar as credenciais da AWS e os dados sigilosos, é altamente recomendável usar a autenticação baseada na função.
-
Controle de acesso com base em chave – Para controle de acesso baseado em chave, você fornece as credenciais de acesso da AWS (ID da chave de acesso e chave de acesso secreta) para um usuário como texto sem formatação.
Controle de acesso com base em função
Com controle de acesso baseado na função, o cluster pressupõe temporariamente uma função do IAM em seu nome. Então, com base nas autorizações concedidas para a função, seu cluster pode acessar os recursos da AWS necessários.
Criar um perfil do IAM é semelhante a conceder permissões a um usuário no sentido de ser uma identidade da AWS com políticas de permissão que determinam o que a identidade pode e não pode fazer na AWS. No entanto, em vez de ser exclusivamente associada a um usuário, uma função pode ser assumida por qualquer entidade que precise dela. Além disso, uma função não tem credenciais (uma senha ou chaves de acesso) associadas. Em vez disso, se uma função estiver associada a um cluster, as chaves de acesso serão criadas dinamicamente e fornecidas para o cluster.
Recomendamos o uso do controle de acesso baseado em função, pois ele fornece um controle refinado e mais seguro do acesso aos recursos da AWS e dados sigilosos do usuário, além de proteger suas credenciais da AWS.
A autenticação com base na função oferece os seguintes benefícios:
-
Você pode usar as ferramentas do IAM padrão da AWS para definir uma função do IAM e associar a função a vários clusters. Quando você modifica a política de acesso de uma função, as alterações são aplicadas automaticamente a todos os clusters que usam a função.
-
Você pode definir políticas do IAM refinadas que concedem permissões para clusters específicos e usuários de banco de dados acessarem recursos e ações específicos da AWS.
-
O cluster obtém credenciais de sessão temporária em tempo de execução e atualiza as credenciais conforme necessário até a operação ser concluída. Se você usar credenciais temporárias baseadas na chave, a operação falhará se as credenciais temporárias expirarem antes de serem concluídas.
-
O ID de chave de acesso e o ID de chave de acesso secreta não são armazenados nem transmitidos no código SQL.
Para usar o controle de acesso com base em função, você primeiro deve criar uma função do IAM usando o tipo de função de serviço do Amazon Redshift e, em seguida, anexar a função ao seu cluster. A função deve ter, pelo menos, as permissões listadas em Permissões do IAM para COPY, UNLOAD e CREATE LIBRARY. Para conhecer as etapas de criação de um perfil do IAM e anexá-lo ao cluster, consulte “Autorizar o Amazon Redshift a acessar outros serviços da AWS em seu nome” no Guia de gerenciamento de clusters do Amazon Redshift.
Você pode adicionar uma função a um cluster ou visualizar as funções associadas a um cluster usando o Console de Gerenciamento do Amazon Redshift, a CLI ou a API. Para obter mais informações, consulte “Autorizar operações COPY, UNLOAD, CREATE EXTERNAL FUNCTION e CREATE EXTERNAL SCHEMA usando funções do IAM” no Guia de gerenciamento de clusters do Amazon Redshift.
Quando você cria uma função do IAM, o IAM retorna um nome de recurso da Amazon (ARN) para a função. Para especificar uma função do IAM, forneça ao ARN da função o parâmetro IAM_ROLE ou o parâmetro CREDENTIALS.
Por exemplo, suponhamos que a função a seguir esteja anexada ao cluster.
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
O exemplo de comando COPY a seguir usa o parâmetro IAM_ROLE com o ARN no exemplo anterior para autenticação e acesso ao Amazon S3.
copy customer from 's3://amzn-s3-demo-bucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
O exemplo de comando COPY a seguir usa o parâmetro CREDENTIALS para especificar a função do IAM.
copy customer from 's3://amzn-s3-demo-bucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
Além disso, um superusuário pode conceder o privilégio ASSUMEROLE aos usuários e grupos do banco de dados para fornecer acesso a uma função para operações COPY. Para ter mais informações, consulte GRANT.
Controle de acesso com base em chave
Com controle de acesso baseado em chave, você fornece o ID da chave de acesso e a chave de acesso secreta de um usuário do IAM autorizado a acessar os recursos da AWS que contêm os dados. Você pode usar os parâmetros ACCESS_KEY_ID and SECRET_ACCESS_KEY juntos ou o parâmetro CREDENTIALS.
nota
É altamente recomendável usar uma função do IAM para autenticação em vez de fornecer um ID da chave de acesso de texto simples e uma chave de acesso secreta. Se você escolher o controle de acesso com base em chave, nunca use as credenciais de sua conta da AWS (raiz). Sempre crie um usuário do IAM e forneça o ID da chave de acesso e a chave de acesso secreta desse usuário. Para obter as etapas para criar um usuário do IAM, consulte Criação de um usuário do IAM em sua conta da AWS.
Para se autenticar usando ACCESS_KEY_ID e SECRET_ACCESS_KEY, substitua <access-key-id>
e <secret-access-key>
por um ID de chave de acesso do usuário autorizado e uma chave de acesso secreta completa conforme mostrado a seguir.
ACCESS_KEY_ID '
<access-key-id>
' SECRET_ACCESS_KEY '<secret-access-key>
';
Para se autenticar usando o parâmetro CREDENTIALS, substitua <access-key-id>
e <secret-access-key>
por um ID de chave de acesso do usuário autorizado e uma chave de acesso secreta completa conforme mostrado a seguir.
CREDENTIALS 'aws_access_key_id=
<access-key-id>
;aws_secret_access_key=<secret-access-key>
';
O usuário do IAM deve ter, pelo menos, as permissões listadas em Permissões do IAM para COPY, UNLOAD e CREATE LIBRARY.
Credenciais de segurança temporárias
Se estiver usando o controle de acesso baseado na chave, você poderá limitar ainda o acesso que usuários têm aos dados usando credenciais de segurança temporárias. A autenticação baseada na função usa automaticamente credenciais temporárias.
nota
É altamente recomendável usar role-based access control, em vez de criar credenciais temporárias e fornecer o ID de chave de acesso e a chave de acesso secreta como texto sem formatação. O controle de acesso baseado em perfil usa automaticamente credenciais temporárias.
As credenciais de segurança temporárias fornecem segurança avançada, pois possuem vidas úteis curtas e não podem ser reutilizadas depois que expiram. A ID da chave de acesso e a chave de acesso secreta geradas com o token não podem ser usadas sem o token, e um usuário que tiver essas credenciais de segurança temporárias poderá acessar os recursos somente até as credenciais expirarem.
Para conceder a usuários acesso temporário aos recursos, você chama operações da API do AWS Security Token Service (AWS STS). As operações da API do AWS STS retornam credenciais de segurança temporárias que consistem em um token de segurança, um ID de chave de acesso e uma chave de acesso secreta. Você emite as credenciais de segurança temporárias para os usuários que precisam de acesso temporário aos recursos. Esses usuários podem ser usuários do IAM existentes ou podem não ser usuários da AWS. Para obter mais informações sobre como criar credenciais de segurança temporárias, consulte Usar credenciais de segurança temporárias no Manual do usuário do IAM.
É possível usar os parâmetros ACCESS_KEY_ID and SECRET_ACCESS_KEY com o parâmetro SESSION_TOKEN ou o parâmetro CREDENTIALS. Você também deve fornecer o ID de chave de acesso e a chave de acesso secreta que acompanhavam o token.
Para se autenticar usando ACCESS_KEY_ID, SECRET_ACCESS_KEY e SESSION_TOKEN, substitua <temporary-access-key-id>
, <temporary-secret-access-key>
e <temporary-token>
conforme mostrado a seguir.
ACCESS_KEY_ID '
<temporary-access-key-id>
' SECRET_ACCESS_KEY '<temporary-secret-access-key>
' SESSION_TOKEN '<temporary-token>
';
Para se autenticar usando CREDENTIALS, inclua session_token=
na string de credenciais conforme mostrado a seguir. <temporary-token>
CREDENTIALS 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
';
O exemplo a seguir mostra um comando COPY com credenciais de segurança temporárias.
copy table-name from 's3://objectpath' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
';
O exemplo a seguir carrega a tabela LISTING com credenciais temporárias e criptografia de arquivos.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' access_key_id '
<temporary-access-key-id>
' secret_access_key '<temporary-secret-access-key>
' session_token '<temporary-token>
' master_symmetric_key '<root-key>
' encrypted;
O exemplo a seguir carrega a tabela LISTING usando o parâmetro CREDENTIALS com credenciais temporárias e criptografia de arquivos.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' credentials 'aws_access_key_id=
<temporary-access-key-id>
;aws_secret_access_key=<temporary-secret-access-key>
;session_token=<temporary-token>
;master_symmetric_key=<root-key>
' encrypted;
Importante
As credenciais de segurança temporárias devem ser válidas durante toda a duração da operação de COPY ou UNLOAD. Se as credenciais de segurança temporárias expirarem durante a operação, o comando falhará e a transação será revertida. Por exemplo, se as credenciais de segurança temporárias expirarem depois de 15 minutos e a operação COPY exigir uma hora, a operação COPY falhará antes de ser concluída. Se você usar acesso baseado na função, as credenciais de segurança temporárias serão atualizadas automaticamente até a operação ser concluída.
Permissões do IAM para COPY, UNLOAD e CREATE LIBRARY
O usuário ou perfil do IAM referenciado pelo parâmetro CREDENTIALS deve ter, pelo menos, as seguintes permissões:
-
Para COPY no Amazon S3, a permissão para LIST o bucket do Amazon S3 e GET os objetos do Amazon S3 do carregados, além do arquivo manifesto, se algum for usado.
-
Para COPY do Amazon S3, Amazon EMR e hosts remotos (SSH) com dados formatados em JSON, permissão para LIST e GET o arquivo JSONPaths no Amazon S3, se algum for usado.
-
Para COPY no DynamoDB, permissão para SCAN e DESCRIBE a tabela do DynamoDB que está sendo carregada.
-
Para COPY a partir de um cluster do Amazon EMR, permissão para a ação
ListInstances
no cluster do Amazon EMR. -
Para UNLOAD no Amazon S3, as permissões para GET, LIST e PUT para o bucket do Amazon S3 no qual os arquivos de dados estão sendo descarregados.
-
Para CREATE LIBARY do Amazon S3, permissão para LIST o bucket do Amazon S3 e GET os objetos do Amazon S3 a serem importados
nota
Se você receber a mensagem de erro S3ServiceException: Access
Denied
ao executar um comando COPY, UNLOAD ou CREATE LIBRARY, significa que o cluster não tem permissões de acesso apropriadas para o Amazon S3.
É possível gerenciar permissões do IAM anexando uma política do IAM a um perfil do IAM anexado ao cluster, ao usuário ou ao grupo ao qual o usuário pertence. Por exemplo, a política gerenciada AmazonS3ReadOnlyAccess
concede permissões LIST e GET a recursos do Amazon S3. Para obter mais informações sobre o gerenciamento de políticas, consulte Gerenciando políticas do IAM no Manual do usuário do IAM.