You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake存储集成中正确使用STORAGE_BLOCKED_LOCATIONS?

解决Snowflake存储集成阻止特定文件夹时创建父路径阶段的报错问题

你遇到的问题核心是Snowflake存储集成的路径匹配规则:当STORAGE_ALLOWED_LOCATIONS设置为父路径(如s3://snowflake-assgnmt/),同时STORAGE_BLOCKED_LOCATIONS设置其子路径(如s3://snowflake-assgnmt/secretFolder/)时,创建指向父路径的外部阶段会被判定为包含被阻止的子路径,因此触发权限限制报错。

以下两种方案可以实现限制存储桶中特定文件夹的需求:

方案1:明确指定所有允许的子路径(不使用父路径作为允许项)

如果桶内仅需开放部分子文件夹的访问权限,直接将这些允许的子路径列在STORAGE_ALLOWED_LOCATIONS中,同时保留STORAGE_BLOCKED_LOCATIONS阻止敏感文件夹。

示例配置:

CREATE OR REPLACE STORAGE INTEGRATION aws_integration_2
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  ENABLED = TRUE
  STORAGE_AWS_ROLE_ARN = 'some-value'
  -- 列出所有需要允许访问的子路径
  STORAGE_ALLOWED_LOCATIONS = ('s3://snowflake-assgnmt/public/', 's3://snowflake-assgnmt/data/')
  STORAGE_BLOCKED_LOCATIONS = ('s3://snowflake-assgnmt/secretFolder/');

之后创建阶段时,指向具体的允许子路径即可:

CREATE OR REPLACE STAGE external_aws_upload_public
    STORAGE_INTEGRATION = aws_integration_2
    URL = 's3://snowflake-assgnmt/public/';

方案2:通过AWS IAM角色权限限制敏感文件夹(保留父路径允许项)

如果必须保留父路径作为允许项,可放弃使用Snowflake的STORAGE_BLOCKED_LOCATIONS,转而通过AWS IAM角色的权限策略直接拒绝访问敏感文件夹,这样既允许父路径阶段的创建,又能阻止对敏感文件夹的访问。

步骤1:修改AWS角色的权限策略

添加拒绝访问secretFolder的规则:

{
  "Effect": "Deny",
  "Action": [
    "s3:GetObject",
    "s3:ListBucket"
  ],
  "Resource": [
    "arn:aws:s3:::snowflake-assgnmt/secretFolder/*",
    "arn:aws:s3:::snowflake-assgnmt/secretFolder"
  ]
}

步骤2:更新Snowflake存储集成(移除STORAGE_BLOCKED_LOCATIONS)

CREATE OR REPLACE STORAGE INTEGRATION aws_integration_2
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  ENABLED = TRUE
  STORAGE_AWS_ROLE_ARN = 'some-value'
  STORAGE_ALLOWED_LOCATIONS = ('s3://snowflake-assgnmt/');

此时创建指向父路径的阶段即可成功,且尝试访问secretFolder时会被IAM权限阻止。

内容的提问来源于stack exchange,提问作者Dhruv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:10:15