在不将访问密钥或密钥传递给客户端的情况下,从AngularJS上传到S3的最佳方法是什么?我有一个朋友试图通过在服务器上创建一个预先签名的URL(NodeJS& Express),然后将URL发送到客户端进行上传来实现此目的。他声称由于CORS而失败,但他可以使用同一个AngularJS应用程序中的sdk进行上传。浏览器。
更新Clarity
棘手的部分是他们无法在环境变量中存储任何内容而且每个存储桶都有不同的凭据。他们将信息存储在10-20个桶/区域/ IAM用户上,并且需要最终用户在客户端上选择桶名称。这意味着他们无法在全球范围内存储任服务器必须能够为每个请求生成客户端使用的内容。
他原来的问题:
Generate S3 Put URL Per Request
答案 0 :(得分:0)
您可以使用IAM Instance Profile为ec2服务器执行此操作。这样您就不必提供访问权限了。密钥,因为通过AWS SDK完成的任何调用都将通过实例配置文件权限进行身份验证。这个都是顺序的!验证aws api调用:
In system environment variables: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.
In the Java system properties: aws.accessKeyId and aws.secretKey.
In the default credentials file (the location of this file
varies by platform).
In the instance profile credentials, which exist within the instance metadata associated with the IAM role for the EC2 instance.
注意最后检查实例配置文件的信息!
更多信息here