Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Can';上传到S3时找不到Aws::S3::Errors::InvalidAccessKeyId的原因_Ruby_Amazon Web Services_Amazon S3_Amazon Ec2_Sinatra - Fatal编程技术网

Ruby Can';上传到S3时找不到Aws::S3::Errors::InvalidAccessKeyId的原因

Ruby Can';上传到S3时找不到Aws::S3::Errors::InvalidAccessKeyId的原因,ruby,amazon-web-services,amazon-s3,amazon-ec2,sinatra,Ruby,Amazon Web Services,Amazon S3,Amazon Ec2,Sinatra,我搜索了Stack Overflow和internet,但没有找到答案: 我有一个运行着lighttpd的EC2实例,它被代理到一个运行在Thin上的Ruby Sinatra应用程序 我在S3上有一个bucket,我正试图通过Sinatra应用程序上传到该bucket,文件在我的本地机器上,我正在使用运行在EC2上的Sinatra应用程序将文件传输到我的S3 bucket中 按照Amazon的指示,我在.aws/credentials文件中设置了凭据 每次尝试上载文件时,无论是通过Sinatra

我搜索了Stack Overflow和internet,但没有找到答案:

  • 我有一个运行着lighttpd的EC2实例,它被代理到一个运行在Thin上的Ruby Sinatra应用程序
  • 我在S3上有一个bucket,我正试图通过Sinatra应用程序上传到该bucket,文件在我的本地机器上,我正在使用运行在EC2上的Sinatra应用程序将文件传输到我的S3 bucket中
  • 按照Amazon的指示,我在.aws/credentials文件中设置了凭据
  • 每次尝试上载文件时,无论是通过Sinatra应用程序还是尝试通过REPL测试从EC2实例上载的本地文件,我都会收到以下错误消息:

    Aws::S3::Errors::InvalidAccessKeyId The AWS Access Key Id you provided does not exist in our records.
    
    我设置了一个CORS配置:

    <CORSConfiguration>
        <CORSRule>
            <AllowedOrigin>*</AllowedOrigin>
            <AllowedMethod>PUT</AllowedMethod>
        </CORSRule>
    </CORSConfiguration>
    

    任何帮助都将不胜感激

    要剖析这个问题:

    • 就上传而言,CORS并不重要。您正在与S3对话并直接上传
    • 凭据文件需要位于~/.aws/credentials中,其中~是当前用户的主页。sinatra在哪个用户下运行?存在.aws/凭据的同一用户
    • 凭据文件的格式是否正确?它需要采用ini样式,对于您描述的内容,它需要具有访问密钥和密钥(请参见下面的示例)
    • 如果您从文件中取出凭据,并直接使用凭据进行调用,那么它是否有效?(仅从错误中,您可能会在此处出错)
    • 您是否考虑过使用ec2角色将凭据推送到机箱中,让ec2和AWS SDK为您完成这项工作(即,您不需要担心每台机器上的凭据轮换/权限等)
    示例文件:

    [default]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_KEY
    

    显然,您已经删除了访问密钥ID或使用了错误的访问密钥ID,只需转到您的用户设置或要求您的管理员为您提供正确的访问密钥ID和访问密码,并为您的帐户附加适当的策略,以便您可以上传到S3


    希望这有帮助

    啊。。。按照你的建议,我直接通过了我的证书,我发现了我的问题!我把init文件的值用单引号括起来,但它们需要是空的。谢谢你给我指明了正确的方向!现在我将研究ec2角色,正如您所建议的:)伙计们,我对密钥invalidaccesskeyID有问题。为了确定我做了什么:在创建新用户时,从AWS下载CSV文件。复制粘贴的访问密钥和密钥为:aws_access_key_id='YOUR_access_key'(直接在python中)。它从来都不起作用!我做错了什么?
    [default]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_KEY