Я не уверен, пропустил ли я здесь шаг или нет.
У меня есть корзина s3, к которой мне нужно иметь доступ из скрипта AWS SDK PHP, который я написал, работая на моем EC2. Я создал роль IAM, чтобы разрешить доступ.
IAM Allow_S3_Access_to_EC2
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::myinbox"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myinbox/*"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": "s3:DeleteObject",
"Resource": "arn:aws:s3:::myinbox/*"
}
]
}
И мои доверительные отношения для роли IAM
Доверительные отношения
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Затем я прикрепил эту роль IAM к своему экземпляру EC2. Из того, что я прочитал, это все, что мне нужно сделать, но я думаю, что мне нужно сделать больше.
В моей Политике Bucket у меня есть следующее, чтобы разрешить доступ из моей SES, чтобы иметь возможность создавать объект электронной почты .
Политика S3 Bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSESPuts",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myinbox/*",
"Condition": {
"StringEquals": {
"aws:Referer": "************"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::************:role/Allow_S3_Access_to_EC2"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::myinbox",
"arn:aws:s3:::myinbox/*"
]
}
]
}
В моей политике Bucket нет ничего для моей EC2 или даже моей роли IAM, которую я прикрепил. Нужно ли что-то добавить в мою Политику Bucket? Вот где я запутался.
Что я испытываю, так это когда создается новый объект, и я пытаюсь получить доступ к этому объекту из моего AWS SDK PHP. Я получаю «403» Запрещено. Если я сделаю этот объект publi c в консоли S3, я смогу получить к нему доступ. Поэтому, даже если я установил разрешения для своего EC2 на доступ к своему S3, если я не сделаю объект доступным c, я не могу получить к нему доступ.
Я даже пытался использовать wget
для объекта на реальном сервере через терминал, и я все еще получаю 403
, если я не делаю объект опубликованным c
Когда я запускаю симулятор политики IAM для своей роли, я получаю
Вот мой PHP
PHP Скрипт
require '../aws-ses/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucketName = 'myinbox';
try {
// Instantiate the client.
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-west-2',
'credentials' => array('key'=>'*********************',
'secret'=>'*******************************************')
]);
} catch (Exception $e) {
// We use a die, so if this fails. It stops here. Typically this is a REST call so this would
// return a json object.
die("Error: " . $e->getMessage());
}
// Use the high-level iterators (returns ALL of your objects).
$objects = $s3->getIterator('ListObjects', array('Bucket' => $bucketName));