Boto 无法使用 S3 IAM 角色进行身份验证

Posted

技术标签:

【中文标题】Boto 无法使用 S3 IAM 角色进行身份验证【英文标题】:Boto failing to authenticate with S3 IAM role 【发布时间】:2013-07-12 20:13:08 【问题描述】:

我有一个名为 Role1 的角色。该角色应用了以下策略。

我有一个具有 Role1 IAM 角色的 ec2 实例。

当我尝试 conn.get_bucket('fooo_udata') 时返回 403 错误。

对此有什么想法吗?

  
"Statement": [

  "Effect": "Allow",
  "Action": ["s3:ListAllMyBuckets"],
  "Resource": "arn:aws:s3:::*"
,

  "Effect": "Allow",
  "Action": ["s3:ListBucket","s3:GetBucketLocation","s3:*"],
  "Resource": ["arn:aws:s3:::fooo_uadata/","arn:aws:s3:::fooo_uadata/*"]
,

  "Effect": "Allow",
  "Action": ["s3:PutObject","s3:GetObject","s3:DeleteObject"],
  "Resource":   ["arn:aws:s3:::fooo_uadata/","arn:aws:s3:::fooo_uadata/*"]

]

【问题讨论】:

【参考方案1】:

我认为您不想在存储桶策略中包含“/”字符。所以,尝试改变:


  "Effect": "Allow",
  "Action": ["s3:ListBucket","s3:GetBucketLocation","s3:*"],
  "Resource": ["arn:aws:s3:::fooo_uadata/","arn:aws:s3:::fooo_uadata/*"]
,

到这里:


  "Effect": "Allow",
  "Action": ["s3:ListBucket","s3:GetBucketLocation","s3:*"],
  "Resource": ["arn:aws:s3:::fooo_uadata","arn:aws:s3:::fooo_uadata*"]
,

因为您的存储桶的名称是 foo_uadata 而不是 foo_uadata/

【讨论】:

以上是关于Boto 无法使用 S3 IAM 角色进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

是否可以通过 IAM 角色限制从 EMR (zeppelin) 访问 S3 数据?

通过 boto3 担任 IAM 用户角色时访问被拒绝

由于身份验证,gsutil 无法复制到 s3

python boto3将IAM角色附加/替换为ec2

如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?

如何使用boto3在Beanstalk上运行的应用程序中验证会话