使用AWS-SDK-JS访问AWS ELB服务时配置CORS

And*_*lor 4 javascript amazon-s3 amazon-ec2 amazon-web-services amazon-elb

我正在研究一个ELB监控应用程序,我想用JS构建并直接在S3中托管.我没有JS的经验,我很难掌握CORS.

我已经成功为我的浏览器创建了一个SDK版本(http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-building.html),其中包括ELB API支持.

我已将Amazon登录(http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring-wif.html)与我的脚本集成,并且我已将其附加到IAM WebIdentity角色.

我打电话的时候

elb.describeInstanceHealth(elbRequestParams).on('success', describeInstanceHealthCallback).send();
Run Code Online (Sandbox Code Playgroud)

我在Javascript控制台中收到错误

XMLHttpRequest cannot load 'elasticloadbalancing.eu-west-1.amazonaws.com/'. The request was redirected to 'aws.amazon.com/elasticloadbalancing', which is disallowed for cross-origin requests that require preflight.
Run Code Online (Sandbox Code Playgroud)

我找不到任何明确的文档,我正在尝试做的事情不会起作用,但是,我承认我对文档中的一些术语感到困惑,而且我在之前的应用程序中没有使用CORS的经验.重新开始.我认为如果大多数服务不是CORS意识的,那么浏览器的整个JS-SDK有点多余.

我可以通过在我的Chrome浏览器中禁用网络安全来实现这一点,显然这不是一个好的解决方法,但会告诉我CORS是问题.

是否有人熟悉这种方法,这是我在S3上托管的问题,或者,我是否会从任何服务器出现此问题?我应该使用CORS配置我的S3存储桶,还是在'elasticloadbalancing.eu-west-1.amazonaws.com'端点上没有CORS策略?

谢谢

安德鲁

Ste*_*pel 5

我已经成功为我的浏览器创建了一个SDK版本(http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-building.html),其中包括ELB API支持.

引用的页面已经提供了缺少CORS支持的第一个线索,因为elasticloadbalancing.eu-west-1.amazonaws.com你正确地怀疑它是原因:

如果您在浏览器中强制执行CORS的环境之外使用SDK并希望访问AWS SDK for JavaScript提供的全部服务,则可以通过克隆存储库在本地构建SDK的自定义副本并运行用于生成SDK的默认托管版本的相同构建工具.

也就是说,主要原因官方浏览器中的AWS SDK为JavaScript排除所有但在节中列出的目前5服务支持的服务范围内的浏览器使用服务是他们缺乏CORS支持:

如果 在您的环境中禁用CORS安全检查,则可以将SDK与其他服务一起使用.在这种情况下,您可以构建自己的SDK自定义版本.有关如何创建SDK的自定义版本的更多信息,请参阅本指南的构建SDK部分.

不幸的是,Amazon EC2Elastic Load Balancing目前都没有提供CORS支持,例如参见最近的功能请求(对EC2服务的CORS支持),其中作者正确地得出了与您已经相同的结论(同时也暗示Node.js是另一个)主要用例,支持所有可用的AWS服务,请参阅使用Node.js中的服务):

从我的角度来看,如果AWS是提供一个AWS-SDK-JS库该库支持所有AWS服务应该支持CORS从而使AWS-SDK-JS iibrary是不是在node.js中环境正好可用,而且在浏览器.

虽然我原则上同意并希望自己有更快的周转时间,但AWS以敏捷的产品开发方法而闻名,即以较小的功能集开始提前,并根据客户反馈随时间改进.值得注意的是,SDK 仅被标记为开发人员预览,即使不是BETA版本,我希望将来可以相应地解决这个问题 - 不可否认,这很容易被忽视,并且更加突出的警告可能会让用户有时间去做好准备自己出这个限制.