修复挂载 Amazon S3 时的 Access Denied 错误 — NetDrive

阅读时间 6 分钟 troubleshooting amazon-s3
Casey
CaseyProduct Manager
在 NetDrive 挂载的 S3 存储桶上遇到 Access Denied?本文介绍三个最常见的原因——凭证错误、缺少 IAM 权限操作,以及存储桶策略冲突。

你在 NetDrive 中挂载了一个 S3 存储桶,盘符出现在 Windows 资源管理器中,但每个文件操作都返回 “Access Denied”。驱动器显示出来了,却什么都访问不了。这通常是因为 NetDrive 使用的 IAM 凭证缺少所需的 S3 操作权限——或者 IAM 策略本身没问题,但存储桶策略把它覆盖了。

NetDrive drive manager showing Google Drive, S3 and pCloud mounted as drive lettersMounted clouds appearing as native drives in Windows File Explorer

将 S3 存储桶挂载为本地驱动器

NetDrive 让 Google Drive、OneDrive、S3、SFTP、WebDAV 等在 Windows 和 macOS 上显示为本地驱动器 — 无需同步,无需完整下载。

  • 支持 Amazon S3 及兼容 S3 的存储(Wasabi、MinIO 等)
  • 文件浏览器可在挂载前测试存储桶访问权限
  • 自 NetDrive 3.19.7 起支持自动检测 S3 区域
WindowsmacOS
下载 NetDrive →

免费试用。提供终身与订阅方案。

为什么挂载的 S3 驱动器会出现 Access Denied

Amazon S3 的访问权限由两个独立的层级控制:附加在你输入访问密钥所属用户或角色上的 IAM 策略,以及附加在存储桶本身的 存储桶策略。任意一层都可能在另一层不知情的情况下拒绝某个操作。

NetDrive 要正常挂载并使用存储桶,至少需要以下 S3 操作权限:

  • s3:ListBucket — 用于列出对象并构建目录视图
  • s3:GetObject — 用于在你打开文件时读取文件内容
  • s3:PutObject — 用于将文件写回存储桶(仅读写挂载需要)
  • s3:DeleteObject — 用于从已挂载的驱动器中删除文件(仅读写挂载需要)

缺少某个操作权限会导致该特定操作出现 “Access Denied”。你可能可以浏览目录,但打开文件时被拒绝;或者可以打开文件,但保存时被拒绝——这两种情况都是 IAM 授权不完整的表现,而不是凭证完全失效。

NetDrive drive manager showing S3 drive status to confirm mount and connection state

检查 1:在 NetDrive 中输入的凭证

先从凭证本身入手。访问密钥中一个字符的错位,或过期的密钥,都会产生与 IAM 策略配置错误相同的 “Access Denied” 症状。

  1. Open NetDrive → 点击你的 S3 驱动器上的齿轮图标以打开其设置。
  2. Access Key ID 与 AWS 控制台中 IAM → Users → [username] → Security credentials 下显示的值逐字符核对。建议直接复制粘贴而不是重新输入。
  3. 重新输入 Secret Access Key。AWS 在初始创建后不会再显示该值,因此如果对其正确性有任何疑问,请在 IAM 中生成一对新密钥,并立即用新值更新 NetDrive。
  4. 检查 Region 字段。区域不匹配——例如存储桶实际位于 eu-west-1,却配置成了 us-east-1——会将请求路由到错误的端点并返回 403 错误。NetDrive 3.19.7 为新建连接增加了自动区域检测,但在升级前创建的驱动器配置仍保留最初输入的值。如有需要,请手动更新区域。

在修正任何凭证问题后,点击 Mount 并尝试浏览目录,然后再继续检查 IAM 层。

检查 2:IAM 策略——所需的 S3 操作权限

如果凭证正确但访问仍被拒绝,说明所附加的 IAM 策略缺少一个或多个所需操作。确认这一点最快的方法是使用 AWS IAM 策略模拟器。

在 AWS 控制台中依次打开 IAM → Policy Simulator,选择密钥已配置在 NetDrive 中的 IAM 用户,然后针对你的存储桶 ARN(arn:aws:s3:::my-bucket)测试 s3:ListBucket,并针对对象 ARN(arn:aws:s3:::my-bucket/*)测试 s3:GetObject。如果模拟器返回 “Denied”,则添加一个授予缺失操作权限的策略。

以下是针对单个存储桶读写访问的最小策略:

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

注意这里有两个不同的 Resource 值:ListBucket 作用于存储桶 ARN 本身,而 GetObjectPutObjectDeleteObject 作用于其中的对象(/*)。把它们合并成一行 Resource 是一个常见错误,会悄无声息地破坏列表功能或对象访问。

NetDrive file browser showing S3 bucket contents to verify read access without a full mount

使用 NetDrive 的 File Browser(无需挂载即可访问)可以在更新 IAM 策略后快速验证对象访问是否正常。它发出的 API 调用与已挂载驱动器相同,但不分配盘符,因此在排查问题时能提供快速的反馈回路。

检查 3:存储桶策略中的显式拒绝

宽松的 IAM 策略会被存储桶策略中的显式 Deny 覆盖。前往 S3 → [your bucket] → Permissions → Bucket policy,查找任何 "Effect": "Deny" 语句。常见的元凶包括:

  • VPC 端点限制 — 拒绝并非来自特定 VPC 端点(aws:SourceVpc)的请求的策略。桌面版 NetDrive 通过公网连接,除非你通过 VPN 路由。
  • IP 允许列表 — 使用 aws:SourceIp 阻止来自你机器公网 IP 的请求的策略。
  • HTTP 拒绝 — 当 aws:SecureTransportfalse 时拒绝请求的语句。由于 NetDrive 的 S3 请求使用 HTTPS(自 3.1.234 版本起已验证),这通常不会造成影响,但如果存储桶策略是出于防御性考虑编写的,仍值得检查。

如果你发现有限制条件适用于你的访问模式,请放宽该条件,或为该 IAM 用户添加一条优先级更高的显式 Allow

小结

NetDrive 中的 S3 “Access Denied” 错误几乎总能归结为三个原因之一:凭证错误、IAM 策略缺少所需操作,或存储桶策略中存在显式拒绝。按此顺序逐一排查——凭证是最容易排除的一项。若要挂载其他对象存储服务,请参阅 在 macOS 上挂载 Amazon S3使用 NetDrive 的 DevOps S3 测试固件工作流

— Casey, NetDrive