排除从 Google Cloud Storage 加载时遇到的故障¶
本主题说明如何解决从 Google Cloud Storage 暂存区加载数据时遇到的问题。
有关常规数据加载故障排除步骤,请参阅 批量数据加载故障排除。
本主题内容:
错误:暂存区区域使用故障¶
尝试从 Google Cloud Storage (GCS) 桶加载数据时,您可能会遇到以下错误:
Failure using stage area. Cause: [Request violates VPC Service Controls. (Status Code: 403)]
此错误表明违反了为 GCP 服务边界创建的限制,该边界使用 VPC Service Controls 配置,用于保护敏感数据。虽然为 Snowflake 账户创建的 GCS 服务账户可能已被授予读取和写入桶的权限,但是服务边界的访问规则应用于 GCP 组织级别,可能会影响多个项目。要查看与错误消息相关的其他详细信息,请访问 VPC Service Control 错误日志。请参阅 GCP 文档,了解日志中 violationReason
的值。
要解决该错误,非常简单的选项是从服务边界之外的桶加载数据。如果您建立的安全规则不允许该选项,您可以在访问级别策略中添加服务账户,从服务边界筛选器中针对 Snowflake 账户排除 GCS 服务账户。请注意,服务账户仍然需要使用在关于配置与 GCS 集成的说明中所述的标准 IAM 策略,以便访问已批准的资源。
GCP 组织的访问策略包含访问级别。访问级别使用 Access Context Manager 以及 Google Cloud Console(gcloud 命令行工具)或 Cloud API 创建和管理。以下说明依赖于 gcloud 命令行工具。
要向访问级别策略添加针对 Snowflake 账户的 GCS 服务账户,请执行以下步骤:
使用 Snowflake 客户端,检索自动为 Snowflake 账户创建的 Cloud Storage 服务账户的 ID (使用 DESCRIBE INTEGRATION):
DESC STORAGE INTEGRATION <integration_name>;
其中,
integration_name
是账户中存储集成的名称。有关更多信息,请参阅 配置 Google Cloud Storage 集成。在本地计算机上,创建名为
snowflake_policy.yaml
的文件。在members
属性中指定服务账户 ID:- members: - serviceAccount:<service_account>
例如:
- members: - serviceAccount:service-account-id@project1-123456.iam.gserviceaccount.com
使用 gcloud 命令行工具,执行以下命令以创建访问级别。
备注
该命令需要 GCP 角色具有更改 VCP Service Control 的必要权限。
gcloud access-context-manager levels create <access_level_name> \ --title snowflake \ --basic-level-spec snowflake_policy.yaml \ --combine-function=OR \ --policy=<policy_name>
其中:
policy_name
是 GCP 组织的访问策略名称。
access_level_name
是您选择的访问级别名称。