【问题标题】:RAmazonS3 connection authentication issue - HTTP/1.1 403 ForbiddenRAmazonS3 连接身份验证问题 - HTTP/1.1 403 Forbidden
【发布时间】:2023-03-03 16:56:01
【问题描述】:

我正在尝试使用RAmazonS3 package 中的listBuckets 函数,但得到了HTTP/1.1 403 Forbidden

首先,我按照the manual 中所述设置身份验证选项:

options(AmazonS3 = c('login' = 'secret'))

我用我的访问密钥 ID(20 个字符)替换了login,用我的秘密访问密钥(40 个字符)替换了secret。当我运行listBuckets() 时,出现以下错误:

Error in UseMethod("xmlSApply") : 
  no applicable method for 'xmlSApply' applied to an object of class "NULL"

它没有返回任何数据,所以它一定没有正确连接。深入研究,listBuckets 中有一个getURL 调用。该行的输出是:

* About to connect() to proxy proxyname.domain.com port xx (#0)
*   Trying xxx.xxx.xxx.xxx... * connected
* Connected to proxyname.domain.com (xxx.xxx.xxx.xxx) port xx (#0)
> GET http://s3.amazonaws.com HTTP/1.1
Host: s3.amazonaws.com
Accept: */*
Proxy-Connection: Keep-Alive
Date: Fri, 12 Sep 2014 09:02:41 EDT
Authorization: AWS [login]:[unknown 27-character code]=

< HTTP/1.1 403 Forbidden
< x-amz-request-id: [unknown 16-character code]
< x-amz-id-2: [unknown 64-character code]
< Content-Type: application/xml
< Transfer-Encoding: chunked
< Date: Fri, 12 Sep 2014 13:02:40 GMT
< Server: AmazonS3
< Cache-Control: proxy-revalidate
< Proxy-Connection: Keep-Alive
< Connection: Keep-Alive
< 
* Connection #0 to host proxyname.domain.com left intact

有什么想法我哪里出错了吗?

我不确定要为 login 使用什么值,所以我也尝试了我的 AWS 账户名、我的 AWS 账户用户名和字面意思的“登录”,但得到了类似的错误。

在找到 RAmazonS3 包之前,我开始使用 AWS Command Line Interface 编写自己的 S3api 函数。从 R 调用 AWS CLI 时,我能够成功列出存储桶及其对象。

sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RCurl_1.95-4.3  bitops_1.0-6    RAmazonS3_0.1-5

loaded via a namespace (and not attached):
[1] digest_0.6.4 tools_3.1.1  XML_3.98-1.1

【问题讨论】:

  • 它可能已经过时了;我不确定,因为我不是包的作者。您可以尝试的另一个包是AWSConnect 包,我已经将它放在一起,它应该允许您使用 S3 和 EC2 进行基本操作。让我知道是否解决了您的问题或遇到任何问题;因为这个包还处于测试阶段...
  • 谢谢@Lalas。使用包中的s3.ls() 没有问题。
  • @Lalas,如果您提交您的评论作为答案,我会接受。

标签: r authentication amazon-web-services amazon-s3


【解决方案1】:

只是重复上面评论中的内容;我注意到大多数连接到 AWS 服务的 R 包都已经过时了。所以我创建了一个新包AWSConnect,它允许用户使用 S3 和 EC2 执行大多数基本操作。在该包中,函数 s3.ls() 旨在列出 S3 上的存储桶。

请随意使用它,并报告任何错误/请求/问题

【讨论】:

    【解决方案2】:

    该软件包在大多数情况下都有效:

    登录 = AWS 密钥

    secret = AWS 秘密访问密钥

    示例: markus_test 是一个新创建的桶,没有公共权限

    auth <- c("AKIAJN6VFFXXXXXXXXXX" ="d95ij4uy0i6n+auvhwLLP6VQiz27OdXXXXXXXXXX")
    listBucket("markus_test", auth)`
    Key        LastModified                             ETag Size
    1 rmr2_example.R 2014-09-15 23:38:48 c7f4544cf972bed52fa84164cf2505bf 1248
                                                          Owner.ID Owner.DisplayName
    1 2a22982b6e7216f42abd2e8848f07a8ada0b1c11318dc8331aee068f29b7765d       markusataws
    StorageClass
    1     STANDARD
    > sessionInfo()
    R version 3.1.1 (2014-07-10)
    Platform: x86_64-apple-darwin10.8.0 (64-bit)
    
    locale: 
    [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     
    
    other attached packages:
    [1] RAmazonS3_0.1-5
    
    loaded via a namespace (and not attached):
    [1] digest_0.6.4   RCurl_1.95-4.3 tools_3.1.1    XML_3.98-1    
    

    【讨论】:

    • 感谢您验证正确的登录名和密码值。我仍然无法让RAmazonS3 工作。
    • 能否请您检查 AWS IAM 中的用户权限。根据您问题的第一行,我假设您的用户没有 S3 读取权限。
    • 用户(我)对某些存储桶有读取权限,但对其他存储桶没有。直接使用 AWS CLI 或 @Lalas 的 awsConnect 包,我可以正确读取我有权读取的存储桶/对象。
    • 您是复制粘贴还是键入您的密钥?由于复制和粘贴,我们有时会看到错误字符的问题。另一个想法:-)
    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多