我正在尝试使用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 =
有人可以指出我的方向吗?
答案 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实例,因此无需提及安全凭证。
谢谢