通过the / many / resources阅读如何在已启动的EC2实例中使用临时AWS凭据,我似乎无法运行极其简单的POC。
所需
步骤:
IAM
角色EC2
角色启动新的IAM
实例; SSH
aws configure
设置凭据,并在http://169.254.169.254/latest/meta-data/iam/security-credentials/iam-role-name
AWS CLI
访问文件 IAM
角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::bucket-name/file.png"
}
]
}
当我使用AWS CLI
访问该文件时,会抛出此错误:
A client error (Forbidden) occurred when calling the HeadObject operation: Forbidden
Completed 1 part(s) with ... file(s) remaining
我错过了哪一步?
答案 0 :(得分:14)
为了将来参考,问题在于我如何调用AWS CLI
;以前我跑步了:
aws configure
...并提供自动生成的角色个人资料中的详细信息。
一旦我只是允许它找到自己的临时凭证,并且只是手动指定了唯一的其他必需参数(区域):
aws s3 cp s3://bucket-name/file.png file.png --region us-east-1
......文件拉得很好。希望这将在将来帮助某人!
答案 1 :(得分:12)
希望这可能有助于其他一些Googler登陆。
A client error (403) occurred when calling the HeadObject operation: Forbidden
如果系统时钟太远,也可能导致错误。我过去12个小时就遇到了这个错误。将时钟设置在真实时间的一分钟内,错误就消失了。
答案 2 :(得分:8)
根据Granting Access to a Single S3 Bucket Using Amazon IAM,IAM政策可能需要应用于两个资源:
又一个绊网。该死!
答案 3 :(得分:3)
我刚收到此错误,因为我有一个旧版本的awscli:
断裂:
$ aws --version
aws-cli/1.2.9 Python/3.4.0 Linux/3.13.0-36-generic
使用:
$ aws --version
aws-cli/1.5.4 Python/3.4.0 Linux/3.13.0-36-generic
答案 4 :(得分:2)
如果存储桶中不存在密钥,也会出现此错误。
仔细检查密钥 - 我有一个脚本,当它将项目发布到存储桶时,在密钥的开头添加了一个额外的斜杠。所以这个:
aws s3 cp --region us-east-1 s3://bucketname/path/to/file /tmp/filename
失败,“调用HeadObject操作时出现客户端错误(禁止访问):禁止访问。”
但是这个:
aws s3 cp --region us-east-1 s3://bucketname//path/to/file /tmp/filename
工作得很好。根本不是权限问题,只是创建了骨干密钥。
答案 5 :(得分:1)
我遇到此错误,因为我没有将政策附加到我的IAM用户。
答案 6 :(得分:0)
tl;博士:通配符文件globbing在s3cmd中对我来说效果更好。
和aws-cli一样酷 - 因为我的一次性S3文件操作问题并没有立即起作用,因为我希望并且认为可能 - 我最终安装并使用了s3cmd。
无论我在概念上想象的是什么语法和幕后工作,s3cmd都更加直观,适合我的偏见。
也许这不是你来这里的答案,但它对我有用。