使用相同的 s3 实例 ( "aws-sdk" ) 并在每个请求上改变凭据
Using Same s3 instance ( "aws-sdk" ) with varying the credentials on each request
案例:
- 我有一个多租户系统,每个租户都有自己的存储桶、accessKeyId 和 accessSecret,我正在 AWS.S3 之上创建一个包装器来扩展一些功能。
我可以使用相同的 s3 客户端实例,但根据请求的用户凭据更改凭据吗?
像这样:
class S3Storage {
private readonly s3: AWS.S3;
constructor(config: S3Config) {
this.s3 = new AWS.S3({
accessKeyId: config.accessKeyId,
secretAccessKey: config.secretAccessKey,
apiVersion: config.apiVersion,
region: config.region
});
}
public myDownload (key: string, userData: any) {
// alter credentials for this.s3 with the userData
}
}
或者我应该在每次调用 myDownload
函数时创建 s3 客户端(使用提供的用户数据)。
我最终为每个请求创建了 S3 客户端,而不是缓存已经缓存的对象,因为在每次请求时系统都会获得一个临时生成的凭据。
案例:
- 我有一个多租户系统,每个租户都有自己的存储桶、accessKeyId 和 accessSecret,我正在 AWS.S3 之上创建一个包装器来扩展一些功能。
我可以使用相同的 s3 客户端实例,但根据请求的用户凭据更改凭据吗?
像这样:
class S3Storage {
private readonly s3: AWS.S3;
constructor(config: S3Config) {
this.s3 = new AWS.S3({
accessKeyId: config.accessKeyId,
secretAccessKey: config.secretAccessKey,
apiVersion: config.apiVersion,
region: config.region
});
}
public myDownload (key: string, userData: any) {
// alter credentials for this.s3 with the userData
}
}
或者我应该在每次调用 myDownload
函数时创建 s3 客户端(使用提供的用户数据)。
我最终为每个请求创建了 S3 客户端,而不是缓存已经缓存的对象,因为在每次请求时系统都会获得一个临时生成的凭据。