无法从EC2实例使用IAM角色访问S3存储桶

时间:2019-03-25 02:54:54

标签: amazon-web-services amazon-s3

我正在尝试使用PHP SDK(在EC2实例上)从私有S3存储桶下载文件。

我创建一个IAM角色,并将AmazonS3FullAccess附加到该角色。

我创建了S3存储桶,这是存储桶策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::206193043625:role/MyRoleName"
      },
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::config-files/*"
    }
  ]
}

然后在PHP端,我向http://169.254.169.254/latest/meta-data/iam/security-credentials/MyRoleName发出了curl请求,返回了JSON,以实例化S3Client并尝试下载它,但我收到此错误消息:

  

在“ https://files.s3.us-west-2.amazonaws.com/us-west-2__config.php”上执行“ GetObject”时出错; AWS HTTP错误:客户端错误:GET https://files.s3.us-west-2.amazonaws.com/us-west-2__config.php导致403 Forbidden响应:

     

AccessDenied

     

访问被拒绝C84D80(已截断...)AccessDenied(客户端):访问被拒绝-

     

AccessDenied

     

拒绝访问C84D80DE6B2D35FD6sDWIYK98nSH + Oa8lBH7lD91rfHospDeo0jZKFDdo0CaeY8aX6Wb / s2ja5qeYxCBuLwDJ2AqSl0 =

有人可以指出我的方向吗?

3 个答案:

答案 0 :(得分:2)

无需直接访问169.254.169.254。适用于PHP的AWS开发工具包将自动检索凭证。

仅创建S3客户端而无需指定任何凭据。

答案 1 :(得分:0)

由于您已经为EC2实例提供了 AmazonS3FullAccess 角色,因此您无需执行其他任何操作(即访问元数据api)。 直接访问您的S3客户端,它应能在您的计算实例中正常工作。

答案 2 :(得分:0)

要从EC2实例访问S3存储桶,请执行以下步骤:

* Create an IAM Role with S3 Full Access.
* Launch an EC2 instance with the role attached to it.
* SSH to your EC2 instance with root permissions.
* Type the command:    aws s3 ls. It will display all the buckets which are there in S3.

由于角色已附加到EC2实例,因此无需提及安全凭证。

谢谢