Quero acessar dados armazenados em buckets do Amazon Simple Storage Service (Amazon S3) na mesma conta da AWS do meu cluster Amazon Redshift. Também quero acessar os dados no Amazon Redshift Spectrum com o AWS Glue como meu catálogo de dados. Mas recebo erros de permissão.
Breve descrição
O perfil do AWS Identity and Access Management (AWS IAM) anexada ao cluster do Redshift deve ter permissões para o AWS Glue e o Amazon S3. Se o perfil do IAM não tiver as permissões corretas, você poderá receber uma mensagem de erro.
Ao criar um esquema externo, você pode receber a seguinte mensagem de erro:
“SQL Error [XX000]: ERROR: User: arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession is not authorized to perform: glue:CreateDatabase on resource: arn:aws:glue:eu-west-1:111111111111:catalog because no identity-based policy allows the glue:CreateDatabase action”
Ao consultar uma tabela do Redshift Spectrum, você pode receber a seguinte mensagem de erro:
“SQL Error [XX000]: ERROR: Spectrum Scan Error Detail: ----------------------------------------------- error: Spectrum Scan Error code: 15007 context: Forbidden: HTTP response error code: 403 Message: AccessDenied Access Denied”
Quando você consulta uma tabela do Redshift Spectrum e o bucket do S3 usa uma chave de criptografia do AWS Key Management Services (AWS KMS), você pode receber a seguinte mensagem de erro:
“SQL Error [XX000]: ERROR: Spectrum Scan Error Detail: ----------------------------------------------- error: Spectrum Scan Error code: 15007 context: Forbidden: HTTP response error code: 403 Message: AccessDenied The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access”
Para resolver esses erros, você deve anexar uma política do IAM com as permissões necessárias ao perfil do IAM usada pelo Amazon Redshift. Se você usou uma chave do AWS KMS para criptografar o bucket do S3, também deverá adicionar permissões para usar a chave.
Resolução
Crie uma política do IAM. Em seguida, anexe as seguintes políticas ao perfil do IAM que está anexada ao cluster do Redshift.
Anexe a política gerenciada pela AWS do AWSGlueConsoleFullAccess.
Use o exemplo de política a seguir que permite acesso de leitura ao bucket do S3 em que você armazena dados:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allows Redshift to Read S3 bucket specified",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket name/*",
"arn:aws:s3:::bucket name"
]
}
]
}
Observação: substitua o nome do bucket pelo nome do seu bucket do S3.
Para um bucket criptografado com chave do AWS KMS, anexe a seguinte política do IAM que fornece as permissões mínimas para permitir que o Redshift Spectrum descriptografe os dados criptografados no Amazon S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow Redshift to use the KMS key",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:region:AWS account ID:key/KMS key ID"
]
}
]
}
Observação: substitua a região pela região da AWS em que seu bucket do S3 está localizado. Além disso, substitua o ID da conta da AWS pelo ID da sua conta e o ID da chave KMS pela chave de criptografia KMS.
Informações relacionadas
Como posso criar acesso entre contas do Amazon Redshift Spectrum ao AWS Glue e ao Amazon S3?
Políticas de IAM para o Amazon Redshift Spectrum