保护AWS JS SDK Api调用

时间:2014-11-06 14:35:50

标签: amazon-web-services amazon-s3 amazon federated-identity

我有一个网站,我使用AWS S3 JS sdk从S3服务器存储桶上传/删除图像。 目前我只在JS文件中以原始格式传递凭据,这是不安全的。 AWS建议使用Web身份联合技术使其受到保护。

我读过它们,并有一些疑问。

1:这种技术是否意味着,我的网站的每个用户都将使用它来上传图片,需要验证他们的登录信息?

2:还有一些名为URL的预先签名。这让我们也隐藏了凭证。

但我对实现我的目标究竟应该遵循什么感到困惑,

我不想在js文件中向最终用户显示我的凭据。我也不希望我的最终用户对自己进行任何形式的身份验证。

是否可能以及如何?

1 个答案:

答案 0 :(得分:0)

您确实应该使用某些Identity Federation以某种方式验证您的用户并为您的用户获取临时访问密钥/密钥。

AWS提供的服务可帮助您实现此目标:AWS Cognito(http://aws.amazon.com/cognito/) Cognito Identity是一种身份联合服务,可以让您的用户在知名的Web身份服务上进行身份验证,例如Facebook,Google,亚马逊,任何OpenID Connect服务(SalesForce ...)或您自己的身份验证后端。一旦用户在其中一个服务中进行身份验证,Cognito就会将联合令牌换成AWS Access Key和Secret Key。这些访问密钥的范围将受限于您在Cognito Role中定义的任何权限,并且时间有限(默认为15分钟)

此博客文章介绍了如何将AWS Cognito Identity与您自己的后端身份验证服务一起使用。它为Java和.Net提供了服务器端示例代码:http://mobile.awsblog.com/post/TxBVEDL5Z8JKAC/Use-Amazon-Cognito-in-your-website-for-simple-AWS-authentication

AWS Cognito Identity还允许您与未经身份验证的用户合作,即在用户通过身份验证之前接收访问密钥/密钥。

AWS Cognito将为您的用户维护一个唯一的身份ID,无论他们将使用哪种身份验证方法(即,同一个人通过Google进行一次身份验证,一次使用Facebook进行身份验证,并且具有相同的身份ID)

https://identity-demo.aws-emea.info是一个演示用户身份验证和身份联合的网站。此Web站点实现了多种联合技术:服务器端Web身份联合(选项卡#1),客户端(JavaScript)Web身份联合(选项卡#2)和客户端(JavaSCript)AWS Cognito身份验证(选项卡#3)

回答第二个问题:S3签名URL:这些URL允许从/向S3下载/上传内容。它们通常由App Server生成并嵌入在网页中。 S3签名URL不需要对用户进行身份验证,也不要求每个用户拥有一个密钥。您可以选择使用特定于用户的密钥还是使用应用程序通用密钥来生成S3签名URL。所有AWS SDK都有帮助您生成预签名URL的方法。

您要求不对用户进行身份验证,您有两种选择。使用具有AWS Cognito的未经身份验证的用户或使用S3预签名URL。然后必须使用服务器端密钥(或者如果您的应用服务器在Amazon EC2上运行,则为EC2角色)在服务器端生成签名