为 Google Cloud Storage 配置外部卷¶
使用外部卷向 Snowflake 授予对 Google Cloud Storage (GCS) 桶的受限访问权限。
先决条件¶
在配置外部卷之前,您需要具备以下条件:
Google Cloud Storage 桶。
要使用 Snowflake 作为目录,桶必须位于托管 Snowflake 账户的同一区域。
要将外部卷用于外部管理的 Iceberg 表,所有表数据和元数据文件都必须位于桶中。
为支持数据恢复,为外部云存储位置启用版本控制。
Google Cloud 中用于创建和管理 IAM 策略和角色的权限。如果您不是 Google Cloud 管理员,请让 Google Cloud 管理员执行这些任务。
第 1 步:在 Snowflake 中创建外部卷¶
使用 CREATE EXTERNAL VOLUME 命令创建外部卷。
备注
只有账户管理员(具有 ACCOUNTADMIN 角色的用户)可执行此 SQL 命令。
以下示例创建一个外部卷,该卷定义了单个 GCS 加密存储位置:
CREATE EXTERNAL VOLUME my_gcs_external_volume
STORAGE_LOCATIONS =
(
(
NAME = 'my-us-west-2'
STORAGE_PROVIDER = 'GCS'
STORAGE_BASE_URL = 'gcs://mybucket1/path1/'
ENCRYPTION=(TYPE='GCS_SSE_KMS' KMS_KEY_ID = '1234abcd-12ab-34cd-56ef-1234567890ab')
)
);
第 2 步:检索 Snowflake 账户的 GCS 服务账户¶
要检索为您的 Snowflake 账户自动创建的 GCS 服务账户的 ID,请使用 DESCRIBE EXTERNAL VOLUME 命令。指定先前创建的外部卷的名称。
例如:
DESC EXTERNAL VOLUME my_gcs_external_volume;
记录输出中 STORAGE_GCP_SERVICE_ACCOUNT
属性的值(例如 service-account-id@project1-123456.iam.gserviceaccount.com
)。
Snowflake 会为您的整个 Snowflake 账户预置一个 GCS 服务账户。所有 GCS 外部卷都使用该服务账户。
第 3 步:授予服务账户访问桶对象的权限¶
在此步骤中,您要在 Google Cloud console 中配置 Snowflake 的 IAM 访问权限。
创建自定义 IAM 角色¶
创建具有访问桶和获取对象所需权限的自定义角色。
以项目编辑者身份登录 Google Cloud console。
从主页仪表板中选择 IAM & Admin » Roles。
选择 Create Role。
为自定义角色输入 Title 和 :extui:`Description`(可选)。
选择 Add Permissions。
在 Filter 中,选择 Service,然后选择 storage。
筛选权限列表,并从列表中添加以下内容:
storage.buckets.get
storage.objects.create
storage.objects.delete
storage.objects.get
storage.objects.list
选择 Add。
选择 Create。
为 GCS 服务账户分配自定义角色¶
以项目编辑者身份登录 Google Cloud console。
从主页仪表板中选择 Cloud Storage » Buckets。
筛选桶列表,然后选择创建外部卷时指定的桶。
选择 Permissions » View by principals,然后选择 Grant access。
在 Add principals 下,粘贴 第 2 步:检索 Snowflake 账户的 GCS 服务账户 的输出中的服务账户名称。
在 Assign roles 下,选择先前创建的自定义 IAM 角色,然后选择 Save。
授予 GCS 服务账户对 Google Cloud Key Management Service 密钥的权限¶
备注
仅当 您的 GCS 桶使用存储在 Google Cloud Key Management Service (Cloud KMS) 中的密钥进行加密时,才需要执行此步骤。
以项目编辑者身份登录 Google Cloud console。
从主页仪表板中,搜索并选择 Security » Key Management。
选择分配给 GCS 桶的密钥环。
选择右上角的 SHOW INFO PANEL。此时会显示密钥环的信息面板。
在 Add members 字段中,搜索 第 2 步:检索 Snowflake 账户的 GCS 服务账户 的 DESCRIBE EXTERNAL VOLUME 输出中的服务账户名称。
从 Select a role 下拉列表中,选择 Cloud KMS CryptoKey Encrypter/Decrypter 角色。
选择 Add。服务账户名称将添加到信息面板中的 Cloud KMS CryptoKey Encrypter/Decrypter 角色下拉列表中。
第 4 步:验证存储访问¶
要检查 Snowflake 是否能成功对您的存储提供商进行身份验证,请调用 SYSTEM$VERIFY_EXTERNAL_VOLUME 函数。
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
后续步骤¶
配置外部卷后,您可以创建 Iceberg 表。
要创建使用外部目录的只读 Iceberg 表,请参阅 配置目录集成。
要创建具有完整 Snowflake 平台支持的 Iceberg 表,请参阅 创建 Snowflake 管理的表。