选项 3:配置 AWS IAM 用户凭证以访问 Amazon S3

本节介绍如何为 S3 桶配置安全策略以及特定 IAM 用户的访问凭证,以安全的方式访问外部暂存区。

本主题内容:

第 1 步:配置 S3 桶访问策略

AWS 访问控制要求

Snowflake 需要对 S3 桶和文件夹拥有以下权限才能访问该文件夹(以及任何子文件夹)中的文件:

  • s3:GetBucketLocation

  • s3:GetObject

  • s3:GetObjectVersion

  • s3:ListBucket

备注

需要以下额外的权限才能执行其他 SQL 操作:

权限

SQL 操作

s3:PutObject

将文件卸载到桶中。

s3:DeleteObject

在成功加载后自动从暂存区中清除文件, 执行 REMOVE 语句以手动移除文件。

作为最佳实践,Snowflake 建议创建一个 IAM 策略,供 Snowflake 访问 S3 桶时使用。然后,您可以将该策略附加到角色,并使用 AWS 为角色生成的安全凭证来访问桶中的文件。

创建 IAM 策略

以下分步说明介绍如何在 AWS 管理控制台中配置 Snowflake 的访问权限,以便您可以使用 S3 桶来加载和卸载数据:

  1. 登录 AWS 管理控制台。

  2. 从主页仪表板搜索并选择 IAM

  3. 从左侧导航窗格中选择 Account settings

  4. Endpoints 列表中的 Security Token Service (STS) 下,找到账户所在的 Snowflake 区域。如果 STS status 不活动,请将切换按钮移至 Active

  5. 从左侧导航窗格中选择 Policies

  6. 选择 Create Policy

  7. 对于 Policy editor,选择 JSON

  8. 添加允许 Snowflake 访问 S3 桶和文件夹的策略文档。

    以下策略(采用 JSON 格式)为 Snowflake 提供指定桶和文件夹路径所需的访问权限。您可将文本复制并粘贴到策略编辑器中:

    备注

    • 确保用实际桶名称和文件夹路径前缀替换 bucketprefix

    • 政府区域 中的桶的 Amazon 资源名称 (ARN) 有一个 arn:aws-us-gov:s3::: 前缀。

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

    备注

    "s3:prefix": 条件设置为 ["*"] 或者 ["<path>/*"],以便分别向指定桶中的所有前缀或桶中的路径分别授予访问权限。

  9. 选择 Next

  10. 输入 Policy name (例如 snowflake_access)和可选的 Description

  11. 选择 Create policy

第 2 步:创建一个 AWS IAM 用户

  1. 从左侧导航窗格中选择 Users,然后点击 Add user

  2. Add user 页面,输入新的用户名(例如 snowflake1)。选择 Programmatic access 作为访问类型,然后点击 Next

    添加用户页面
  3. 点击 Attach existing policies directly,然后选择您之前创建的策略。然后点击 Next

    设置权限页面
  4. 查看用户详细信息,然后点击 Create user

    查看用户详细信息页面
  5. 记录访问凭证。记录它们的最简单方法是点击 Download Credentials 将其写入文件(例如 credentials.csv

    在用户详细信息页面上附加策略

    注意

    一旦您离开此页面,秘密访问密钥将 不再在 AWS 控制台中的任何地方可用。如果您丢失了密钥,则必须生成一套 新的 用户凭证集。

您现在已:

  • 创建了一个桶 IAM 策略。

  • 创建了一个 IAM 用户并为该用户生成了访问凭证。

  • 将该策略附加到该用户。

有了 S3 桶的 AWS 钥和密钥,即拥有使用外部暂存区访问 Snowflake 中的 S3 桶所需的凭证。

备注

Snowflake 会将临时凭据缓存一段时间,但不能超过 60 分钟的过期时间。如果您撤消 Snowflake 的访问权限,用户或许也能够从云存储位置列出文件并加载数据,直到缓存过期。

第 3 步:创建外部(即 S3)暂存区

创建一个引用您创建的 AWS 凭证的外部暂存区。

使用 CREATE STAGE 命令创建一个暂存区,或者您可以选择更改现有的外部暂存区并设置 CREDENTIALS 选项。

备注

凭证与其他暂存区参数(例如 ENCRYPTION 和 FILE_FORMAT)可分开处理。无论用于访问外部 S3 桶的凭证如何,对这些其他参数的支持都是相同的。

例如,设置 mydb.public 作为用户会话的当前数据库和架构,然后创建一个名为 my_S3_stage 的暂存区。在此示例中,暂存区引用 S3 桶和路径 mybucket/load/files。S3 桶中的文件使用服务器端加密 (AWS_SSE_KMS) 进行加密:

USE SCHEMA mydb.public;

CREATE OR REPLACE STAGE my_S3_stage
  URL='s3://mybucket/load/files/'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');
Copy

下一步: AWS 数据文件加密

语言: 中文