【问题标题】:Chef aws client厨师aws客户端
【发布时间】:2017-05-09 23:31:39
【问题描述】:

我不太明白如何使用this aws cookbook。我的目标是从我的 s3 存储桶中下载一些文件。根据documentation,我已经在我的食谱中设置了这个内容:

aws = data_bag_item('aws', 'dev')

aws_s3_file '/tmp/authz.war' do
  bucket 'living-artifacts-dev'
  remote_path '/authz/authz.war'
  aws_access_key aws['aws_access_key_id']
  aws_secret_access_key aws['aws_secret_access_key']
  region 'eu-central-1'
end

所有值都正确填充,我还尝试使用 aws-cli 对其进行测试。然而,厨师客户收到了这条消息:

=========================================================================
Error executing action `create` on resource 'aws_s3_file[/tmp/authz.war]'
=========================================================================

Net::HTTPServerException
------------------------
remote_file[/tmp/authz.war] (/var/chef/cache/cookbooks/aws/providers/s3_file.rb line 40) had an error: Net::HTTPServerException: 403 "Forbidden"

我该如何调试这个?

编辑

我已经使用 aws 命令客户端对其进行了测试。我首先使用aws configure 设置凭据,并提供了请求的值。所以,这个命令:

aws s3 cp s3://living-artifacts-dev/authz/authz.war authz.war

正确执行并下载文件。

编辑

更详细的错误信息:

==> default:   * aws_s3_file[/tmp/authz.war] action create
==> default:
==> default:     * chef_gem[aws-sdk] action install
==> default: [2017-03-03T11:25:16+00:00] INFO: chef_gem[aws-sdk] installed aws-sdk at ~> 2.2
==> default:
==> default:       - install version ~> 2.2 of package aws-sdk
==> default: [2017-03-03T11:25:16+00:00] INFO: Remote and local files do not match, running create operation.
==> default:     * chef_gem[aws-sdk] action install (up to date)
==> default:     * remote_file[/tmp/authz.war] action create
==> default: [2017-03-03T11:25:16+00:00] INFO: HTTP Request Returned 403 Forbidden:
==> default: [2017-03-03T11:25:16+00:00] WARN: remote_file[/tmp/authz.war] cannot be downloaded from https://living-artifacts-dev.s3.e
u-central-1.amazonaws.com/authz/authz.war?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=sFo6JjohgYi%2BYi4Ut7pTy9EGVDCG89IROX%2Bw7E
RR%2F20170303%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20170303T112516Z&X-Amz-Expires=300&X-Amz-SignedHeaders=host&X-Amz-Signatur
e=f3c2b371ad4e1fe24745459adf0463c708e0363a139b598b04e40789c43ded7d: 403 "Forbidden"

【问题讨论】:

  • 错误提示,您无权访问存储桶。仔细检查您的帐户的 aws 密钥和权限。
  • 我已经用aws-cli 对其进行了测试。我用行为编辑了帖子。看来一切都是对的……
  • remote_path 'artifacts/authz/authz.war' 不同
  • 抱歉,写错了。我已经编辑了帖子。

标签: amazon-web-services amazon-s3 chef-infra


【解决方案1】:

删除remote_path '/authz/authz.war'的第一个斜线

这是来自AWS cookbook documentation的示例:

aws_s3_file '/tmp/foo' do
  bucket 'i_haz_an_s3_buckit'
  remote_path 'path/in/s3/bukket/to/foo'
  aws_access_key aws['aws_access_key_id']
  aws_secret_access_key aws['aws_secret_access_key']
  region 'us-west-1'
end

【讨论】:

  • 我也试过了。尽管如此,错误仍然存​​在。
【解决方案2】:

你有一个禁止的错误

 403 "Forbidden"

您需要确保您的系统在 AWS 上附加了适当的 IAM 策略,该策略至少在存储桶上具有 READ,特别是您需要的文件。

【讨论】: