通过the / many / resources阅读如何在已启动的EC2实例中使用临时AWS凭证,我似乎无法运行极其简单的POC .
Desired:
-
启动EC2实例
-
SSH in
-
从私有S3存储桶中提取一段静态内容
Steps:
-
创建
IAM
角色 -
使用指定的上述
IAM
角色启动新的EC2
实例;SSH
in -
使用
aws configure
设置凭据,并在http://169.254.169.254/latest/meta-data/iam/security-credentials/iam-role-name
中填充( successfully )的详细信息 -
尝试直接使用
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
我错过了哪一步?
7 回答
为了将来参考,问题在于我如何调用
AWS CLI
;以前我跑步:...并提供在自动生成的角色配置文件中找到的详细信息 .
一旦我只是允许它找到自己的临时凭证,只需手动指定唯一的其他必需参数(区域):
......文件拉得很好 . 希望这将有助于将来的某个人!
希望这可能有助于其他一些谷歌人来到这里 .
该
如果您的系统时钟太远,也可能导致错误 . 我过去12个小时就遇到了这个错误 . 将时钟设置为真实时间的一分钟内,错误就消失了 .
根据Granting Access to a Single S3 Bucket Using Amazon IAM,IAM策略可能需要应用于两个资源:
适当的水桶(例如"arn:aws:s3:::4ormat-knowledge-base")
桶内的所有对象(例如"arn:aws:s3:::4ormat-knowledge-base/*")
又一个绊网 . 该死的!
我刚收到此错误,因为我有一个旧版本的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
如果存储桶中不存在密钥,也会出现此错误 .
仔细检查密钥 - 我有一个脚本,当它将项目发布到存储桶时,在密钥的开头添加了一个额外的斜杠 . 所以这:
失败,“调用HeadObject操作时发生客户端错误(禁止):禁止访问” .
但是这个:
工作得很好 . 根本不是权限问题,只是骨干密钥创建 .
我有这个错误,因为我没有将策略附加到我的IAM用户 .
tl;博士:通配符文件globbing在s3cmd中为我工作得更好 .
和aws-cli一样酷 - 因为我的一次性S3文件操作问题没有立即起作用,因为我希望并且认为可能 - 我最终安装并使用s3cmd .
无论我在概念上想象的语法和幕后工作是什么,s3cmd都更直观,更适合我的偏见 .
也许这不是你来这里的答案,但它对我有用 .