在 AWS 的 S3 存储桶中,有时需要获取对象的签名 URL,使其他用户可以访问该对象而无需授予他们访问权限。如果该存储桶是加密的,就需要通过 AWS 的加密 SDK 允许其他用户访问该对象。
下面是一个使用 AWS SDK for Node.js 获取签名 URL 的例子:
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
// 指定要获取 URL 的对象名和存储桶名称
const objectName = 'example-object.txt';
const bucketName = 'encrypted-bucket';
// 获取对象的签名 URL
const signedUrl = s3.getSignedUrl('getObject', {
Bucket: bucketName,
Key: objectName,
Expires: 3600 // URL 过期时间,单位为秒
});
console.log(`Signed URL: ${signedUrl}`);
将存储桶设置为加密后,需要添加以下代码:
// 加载 AWS 加密 SDK
const AWS = require('aws-sdk');
const crypto = require('crypto');
const s3 = new AWS.S3({
signatureVersion: 'v4',
});
// 指定加密密钥
const encryptionKey = 'my-encryption-key';
// 指定要获取 URL 的对象名和存储桶名称
const objectName = 'example-object.txt';
const bucketName = 'encrypted-bucket';
// 获取对象的密钥
const objectParams = {
Bucket: bucketName,
Key: objectName
};
s3.getObject(objectParams, (err, data) => {
if (err) {
console.log(err);
return;
}
const objectKey = data.Body.slice(0, 32);
const iv = data.Body.slice(32, 48);
// 生成签名 URL
const signedUrl = s3.getSignedUrl('getObject', {
Bucket: bucketName,
Key: objectName,
Expires: 3600, // URL 过期时间,单位为秒