我尝试从 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;
我的 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
仍然存在。
确保S3存储桶和Snowflake阶段位于兼容区域