S3里面的对象默认都是私有的,仅仅所有者可以访问。但是,所有者可以通过自己的权限对对象文件创建 presigned URL,这样子在指定的时间内允许其他人来下载这个文件。
AWS Presigned URL 一般是在SDK里面使用,允许生成一个临时的URL,这个URL里面包含了Token和过期时间,这样子用户可以通过这个临时的URL来访问S3 的资源。
我们用AWS CLI 也可以生成Presigned URL。
比如说,登录一个EC2实例,这个EC2已经分配了对应的IAM Role可以管理S3,因此我可以直接执行相关的命令。
下面例子中, 我创建一个新的bucket,并且上传一个text文件。
aws s3 mb s3://beanxyztest
echo "hello world" >> hello.txt
aws s3 cp hello.txt s3://beanxyztest
这个文件默认是无法从外网访问的,因为我没有配置任何public read权限。
如果我执行下面的命令,他会对我指定的key执行presign的操作,后面的expries-in 参数表示多少秒之后过期,默认是3600秒
aws s3 presign s3://beanxyztest/hello.txt --expires-in 60
https://beanxyztest.s3.amazonaws.com/hello.txt?AWSAccessKeyId=ASIAVTZSLTQTVKAWGT4J&Signature=fKsfkPE24S2lZ5PdXR9B5hsMwt8%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEMz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDmFwLXNvdXRoZWFzdC0yIkcwRQIgPXw5nlFMqy3DaSbbC1prhKpeh644EviNaklqgyrGwjUCIQDVhopxw1CV%2BaNBgVWPScz%2Fh%2FCzQTb4Q8n0zbNkzErfDyrHAwiF%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAIaDDM4NjExNTgwNDE5OSIMFNGn51kUMMQI7KmPKpsD%2FkYXZemodSgiLcH4%2BqoIZUzS3xhDR5kvFvwy9rVux7zWTh%2B6TXloce98HRRUIorvsRO7F5%2FXXgQM5alnfOyZJhelnxWLQfuAZgpktV9UlqvAKvAw2PR04x2y%2BwA8Adc2brZYsDwUR%2BylrOue7F%2FUGzwJwLehkp9T0KN7hwG0wicm2D7BqCsjGMuAgGy%2FdedwQij%2B4YgWA%2BPENmq7h1da6OcQVQQduNI6DrwXj9ivWK5u5F8mzY5wpzbrFBfCIqCcyqiKnZWEO1e3sp9Tz4gKchC7TTmFquMHScfA3Oo97TcmbIPAR1ZLObZTCsJqcCfGH581XIeUq3OIA6pwm0Wi%2FjhUrw%2FQGWI8kopwMs0nfn4qLzNYOcw1khFLnb0x7nc3PHI%2FZ6uy27xahWbHbhbeMtC5PBlp%2Fw2WO09ywcEcD%2B45E957g9TqY1Syu8VqEkqqRXbKb5%2FjdVlnjyksMes9rn9kFHl%2Fpatcac3z7TkeuXdGJoA%2B5XE64IuBb0MQhwx7dmgqjHWsiWl%2FqGPkOf4jrbwuHwO8DyDtyXMPMMOitf8FOusB67Qv0QHESN0zJDuAac8CHuAyKgnjI8gbj23HEGXmtmT8vGdxXwrycbDqeya6lUA5ucZKnFUleZOpk31fP76jpL0NFCUFrE%2BFjjHTGtvMiPiSD%2Fxo%2BcPKwV3pKdgXHwvZUlgxIbJycO4sBV4TFr%2FhHT%2BLRgmdyDCYMvSoUHWabe4gtIgrA%2BRNhcXQELHBgd83VP0dAp0VEAj%2BmPRE6jPoj7Hd3BIYa0Q8n22ewo%2FlEextUsCqnD%2Fvfed9E5X34yBWXcWNk5LHtu4Vg7zpCGSbdqyLtFDXNM4kuGvfrpX3%2BNC1cpXPr70prLPYYg%3D%3D&Expires=1609389937
然后通过这个URL我就可以直接打开对应的文件了