Snowflake Azure外部阶段访问403认证失败问题求助
排查Snowflake Azure外部阶段认证失败(403 AuthenticationFailed)问题
已知背景
- 已成功创建外部阶段,但执行
list @Employee_New时返回403认证失败错误:Error: "Failure using stage area. Cause: [Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. (Status Code: 403; Error Code: AuthenticationFailed)]"
- 已排查SAS Token过期时间、角色权限,Azure侧配置了相关权限
- 创建阶段的SQL命令:
CREATE STAGE Employee_New URL = 'azure://sampleblob123456.blob.core.windows.net/sampleblob/Input/employee.csv' CREDENTIALS = ( AZURE_SAS_TOKEN = '*****' ) DIRECTORY = ( ENABLE = true ) COMMENT = 'New Stage Environment';
具体排查步骤
- 修正SAS Token格式
确保SAS Token没有包含开头的?符号,Snowflake仅需要?之后的内容。例如Azure生成的完整SAS为?sv=2023-11-03&ss=b&...,只需传入sv=2023-11-03&ss=b&...部分。 - 调整外部阶段URL指向
当前URL指向单个文件employee.csv,但开启了DIRECTORY = (ENABLE = true)目录功能,需将URL改为目录路径:azure://sampleblob123456.blob.core.windows.net/sampleblob/Input/(末尾保留斜杠),重新创建阶段后再执行list命令。 - 检查Azure存储账户防火墙配置
若Azure存储账户设置了IP白名单,需将Snowflake对应区域的IP段添加到防火墙规则中。可通过Snowflake命令获取IP列表:SELECT SYSTEM$GET_AZURE_STORAGE_INTEGRATION_IP_LIST(); - 验证SAS Token的资源权限范围
确保SAS Token是针对容器sampleblob或目录Input生成的,而非单个文件。单个文件的SAS无法支持目录列表操作,需重新生成覆盖目标目录的SAS Token,且权限需包含读取(r)和列出(l)。 - 确认Snowflake角色权限
确保执行list命令的角色拥有阶段的USAGE权限,可执行以下命令授权:GRANT USAGE ON STAGE Employee_New TO ROLE <你的角色名>; - 重新生成并更新SAS Token
避免复制SAS Token时带入空格、换行等隐藏字符,重新生成新的SAS Token后,更新阶段凭证:ALTER STAGE Employee_New SET CREDENTIALS = (AZURE_SAS_TOKEN = '新生成的SAS Token');
内容的提问来源于stack exchange,提问作者Ramakrishna K
相关产品推荐
相关产品推荐

