Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon Redshift Spectrum 的 IAM 策略

默认情况下,Amazon Redshift Spectrum 将使用 Amazon Athena 数据目录。您的群集需要授权才能访问您在 AWS Glue 或 Athena 中的外部数据目录和您在 Amazon S3 中的数据文件。您通过引用附加到群集的 AWS Identity and Access Management (IAM) 角色来提供授权。如果您使用 Apache Hive 元存储管理您的数据目录,则无需提供对 Athena 的访问权限。

注意

如果您当前在 Athena 数据目录中有 Redshift Spectrum 外部表,则可以将您的 Athena 数据目录迁移到 AWS Glue 数据目录。要将 AWS Glue 数据目录用于 Redshift Spectrum,您可能需要更改您的 IAM 策略。有关更多信息,请参阅 Athena 用户指南 中的升级到 AWS Glue 数据目录

您的群集至少需要对 Amazon S3 存储桶的 GET 和 LIST 访问权限。如果您的存储桶与您的群集没有位于同一个 AWS 账户中,则您的存储桶还必须授权您的群集访问数据。有关更多信息,请参阅代表您授权 Amazon Redshift 访问其他 AWS 服务

注意

Amazon S3 存储桶不能使用将访问限制为仅通过特定 VPC 终端节点的存储桶策略。

以下策略将授予对任何 Amazon S3 存储桶的 GET 和 LIST 访问权限。该策略允许 Redshift Spectrum 访问 Amazon S3 存储桶以及执行 COPY 和 UNLOAD 操作。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "*" }] }

以下策略将授予对您的名为 myBucket 的 Amazon S3 存储桶的 GET 和 LIST 访问权限。

Copy
[{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*" }] }

要仅使用 Redshift Spectrum 授予对 Amazon S3 存储桶的访问权限,请包括允许访问用户代理 AWS Redshift/Spectrum 的条件。以下策略仅允许 Redshift Spectrum 访问 Amazon S3 存储桶。它排除其他访问,例如 COPY 和 UNLOAD 操作。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*", "Condition": {"StringEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }

同样,您可能需要创建 IAM 角色来允许 COPY 和 UNLOAD 操作,但排除 Redshift Spectrum 访问。为此,请包含拒绝用户代理“AWS Redshift/Spectrum”访问权限的条件。以下策略允许访问 Amazon S3 存储桶,但排除了 Redshift Spectrum。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:Get*", "s3:List*"], "Resource": "arn:aws:s3:::myBucket/*", "Condition": {"StringNotEquals": {"aws:UserAgent": "AWS Redshift/Spectrum"}} }] }

以下策略将授予对 Amazon Athena 资源的访问权限。如果您的外部数据库位于 Hive 元存储中,则您不需要 Amazon Athena 访问权限。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["athena:*"], "Resource": ["*"] }] }