从外部 S3 阶段的 Snowflake COPY INTO 失败,并显示“访问被拒绝(状态代码:403;错误代码:AccessDenied)

问题描述 投票:0回答:1

我尝试从 S3 外部阶段将 CSV 文件加载到 Snowflake 中,但我不断收到 403 Access Denied 错误:

COPY INTO PBI_Dataset 
FROM @pbi_stage
FILE_FORMAT = (TYPE = CSV FIELD_DELIMITER = ',' SKIP_HEADER=1)
ON_ERROR = 'CONTINUE';

当我运行这个时,我看到:

舞台区域使用失败。原因:[访问被拒绝(状态代码:403; 错误代码:AccessDenied)]

到目前为止我检查过的内容:

  • 雪花角色和舞台权限
  • 我正在使用
    ACCOUNTADMIN
    角色,该角色具有广泛的权限。
  • 尝试显式授予舞台和底层数据库/架构的使用权限。

补助金

GRANT USAGE ON DATABASE MY_DB TO ROLE ACCOUNTADMIN;
GRANT USAGE ON SCHEMA MY_DB.MY_SCHEMA TO ROLE ACCOUNTADMIN;
GRANT USAGE ON STAGE MY_DB.MY_SCHEMA.pbi_stage TO ROLE ACCOUNTADMIN;
  • AWS IAM 角色策略

我的 Snowflake 存储集成使用的 AWS IAM 角色具有如下策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [ "s3:GetObject", "s3:ListBucket" ],
      "Resource": [ "arn:aws:s3:::bucket1", "arn:aws:s3:::bucket1/*" ]
    }
  ]
}

我将正确的存储桶 ARN 添加到“资源”部分,但如果我尝试引用不同的存储桶,错误仍然发生。 信任关系(角色的信任策略)

我通过检查信任策略确认 Snowflake 可以承担 AWS IAM 角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<SNOWFLAKE_ACCT_ID>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "<MY_STORAGE_INTEGRATION_EXTERNAL_ID>"
        }
      }
    }
  ]
}

不确定是否还有其他设置可能仍然阻止访问。

  • 桶政策

我检查了存储桶策略,确保它不会阻止外部访问或包含任何可能影响 Snowflake IAM 角色的拒绝语句。 尽管执行了这些步骤,当尝试从舞台加载时,

403 AccessDenied
仍然存在。

database amazon-s3 snowflake-cloud-data-platform
1个回答
0
投票

确保S3存储桶和Snowflake阶段位于兼容区域

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.