Прежде всего мне известны следующие вопросы:
, но решенияне работают для меня.
Я создал роль "sample_role
", прикрепил к ней AmazonS3FullAccess
-политику и назначил роль экземпляру ec2.
My bucket-policy выглядит следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::My-Account-ID:role/sample_role"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket/*"
}
]
}
На моем экземпляре ec2 распечатка моих сегментов работает нормально, как из командной строки (aws s3 ls
), так и из скрипта Python. Но когда я пытаюсь загрузить файл test.txt
в мое ведро, я получаю AccessDenied
:
import boto3
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket('my_bucket')
with open('test.txt', "rb") as f:
s3_client.upload_fileobj(f, bucket.name, 'text.txt')
Сообщение об ошибке:
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
То же самое происходиткогда я просто пытаюсь перечислить объекты в моем ведре . Командная строка aws s3api list-objects --my_bucket
или скрипт Python:
import boto3
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket('my_bucket')
for my_bucket_object in bucket.objects.all():
print(my_bucket_object)
Сообщение об ошибке:
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
Когда я отключаю «Блокировать все публичный доступ» в настройках моего сегментаи включить публичный доступ в моем списке контроля доступа, это, очевидно, работает. Но мне нужно ограничить доступ к указанной роли.
Что мне не хватает? Спасибо за вашу помощь!