如何撤销单个用户的Amazon S3预签名URL访问权限?
如何撤销离职员工的S3预签名URL权限,同时保留在职员工的访问权
嘿,首先得明确一个关键知识点:Amazon S3的预签名URL本身是没法单独撤销的——它的有效性完全绑定在生成时使用的AWS凭证(比如IAM用户的访问密钥)上。只要凭证没失效,URL就会一直有效到你设置的48小时过期时间;如果凭证失效,所有用这个凭证生成的预签名URL都会直接作废。
所以要实现“只踢走离职员工,留着在职的”,得分两种场景处理:
场景1:两个预签名URL用了不同的IAM凭证生成
如果你当时是分别用两位员工各自的IAM用户凭证生成的他们的预签名URL,那操作超简单:
- 找到离职员工对应的IAM用户,直接禁用或删除他的访问密钥,甚至可以直接删除这个IAM用户账号。这样他手里的预签名URL会立即失效,而在职员工的URL因为用的是完全独立的凭证,完全不受影响。
场景2:两个预签名URL用了同一个凭证生成
这是更常见的情况——比如你用了同一个服务角色或者通用IAM用户的密钥生成了两个URL。这时候不能直接废掉凭证(不然在职员工也用不了),可以试试下面两个办法:
办法1:给S3对象加权限限制,直接拒绝离职员工访问
虽然预签名URL依赖凭证,但S3对象的权限规则也会生效。你可以给policy.doc添加桶策略或者对象ACL,明确拒绝离职员工的访问请求:
- 比如写一个这样的桶策略(记得替换里面的占位符):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:user/离职员工的IAM用户名" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::你的桶名/policy.doc" } ] }
添加这个策略后,哪怕离职员工手里有预签名URL,访问时也会被AWS拒绝,而在职员工的访问完全不受影响。
办法2:替换原对象,给在职员工发新的预签名URL
如果离职员工的IAM身份已经被删除,没法用权限策略限制,那可以换个思路:
- 给在职员工重新生成一个
policy.doc的预签名URL(或者把原对象复制到新的键名,比如policy-active.doc,再生成新URL给他); - 把原桶里的
policy.doc删除,或者移动到一个离职员工访问不到的路径/桶里。
这样离职员工手里的旧URL会返回“对象不存在”的错误,而在职员工用新URL就能正常访问。
后续避坑建议
为了以后不再头疼这种问题,建议:
- 给每个需要访问的用户单独创建IAM账号,生成预签名URL时用对应用户的凭证,这样要撤销权限时直接处理该用户的密钥就行;
- 尽量缩短预签名URL的有效期,减少意外泄露后的风险。
内容的提问来源于stack exchange,提问作者sontd
相关产品推荐
相关产品推荐

