{
"Version": "2012-10-17",
"Id": "Policy1461502139221",
"Statement": [
{
"Sid": "Stmt1461500056355",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*",
"Condition": {
"StringNotEquals": {
"aws:Referer": "http://localhost:3000/"
}
}
}
]
}
该policy的意思是:只允许http://localhost:3000/这个来源的请求访问该bucket下的资源。
3. 在React中使用AWS SDK for JavaScript(例如aws-sdk)作为客户端,使用pre-signed url生成一个加密的GET请求,将该url作为参数传递给React的或标签。
import AWS from 'aws-sdk';
//初始化AWS
AWS.config.update({
accessKeyId: 'ACCESS_KEY_ID',
secretAccessKey: 'SECRET_ACCESS_KEY'
});
//定义需要访问的s3 bucket和object
const bucket_name = 'your-bucket-name';
const object_key = 'path-to-object';
//生成pre-signed url
function getSignedUrl() {
const s3 = new AWS.S3();
const params = {
Bucket: bucket_name,
Key: object_key,
Expires: 300 // 5分钟有效期
};
//使用pre-signed url作为src或href属性
return s3.getSignedUrl('getObject', params);
}
//在React组件或页面中调用getSignedUrl(),并将返回的url作为参数传递给
或标签
const preSignedUrl = getSignedUrl();
const img =
;