Разрешения AWS S3 Bucket - доступ запрещен
Я пытаюсь дать себе разрешение на загрузку существующих файлов в ведро S3. Я изменил политику Bucket следующим образом:
{
"Sid": "someSID",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
"Principal": {
"AWS": [
"arn:aws:iam::123123123123:user/myuid"
]
}
}
Я понимаю, что добавление к политике должно дать мне полные права на "bucketname" для моей учетной записи "myuid", включая все файлы, которые уже находятся в этом ведре. Тем не менее, я все еще получаю ошибки Access Denied, когда пытаюсь загрузить любой из этих файлов по ссылке, которая появляется в консоли.
Любые мысли?
Ответы
Ответ 1
David, вы правы, но я обнаружил, что помимо того, что bennie ниже, вы также должны предоставить представление (или любой доступ, который вы хотите) для "Аутентифицированных пользователей".
![enter image description here]()
Но лучшим решением может быть изменение политики пользователя для предоставления доступа к ведру:
{
"Statement": [
{
"Sid": "Stmt1350703615347",
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::mybucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": ["arn:aws:s3:::mybucket"],
"Condition": {}
}
]
}
Первый блок предоставляет все разрешения S3 всем элементам в ведре. Второй блок предоставляет разрешение списка на самом ковше.
Ответ 2
Шаг 1
Нажмите на имя вашего сегмента и на вкладке разрешений убедитесь, что флажок Блокировать новые публичные политики буфера не установлен
![enter image description here]()
Шаг 2
Тогда вы можете применить свою политику ведра ![enter image description here]()
надеюсь, это поможет
Ответ 3
Измените ресурс arn:aws:s3:::bucketname/AWSLogs/123123123123/*
на arn:aws:s3:::bucketname/*
, чтобы иметь полные права на bucketname
Ответ 4
Используйте метод ниже для загрузки любого файла для общедоступной формы с помощью TransferUtility
в Android.
transferUtility.upload(String bucketName, String key, File file, CannedAccessControlList cannedAcl)
Пример
transferUtility.upload("MY_BUCKET_NAME", "FileName", your_file, CannedAccessControlList.PublicRead);
Ответ 5
Чтобы уточнить: это действительно не документировано, но вам нужны два оператора доступа.
В дополнение к вашему заявлению, которое позволяет выполнять действия с ресурсом "arn: aws: s3: bucketname/AWSLogs/123123123123/*", вам также понадобится второй оператор, который позволяет ListBucket "arn: aws: s3: bucketname", потому что внутренне клиент Aws попытается перечислить ведро, чтобы определить его существо, прежде чем делать свое действие.
Со вторым утверждением он должен выглядеть так:
"Statement": [
{
"Sid": "someSID",
"Action": "ActionThatYouMeantToAllow",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
"Principal": {
"AWS": [
"arn:aws:iam::123123123123:user/myuid"
]
},
{
"Sid": "someOtherSID",
"Action": "ListBucket",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname",
"Principal": {
"AWS": [
"arn:aws:iam::123123123123:user/myuid"
]
}
]
Примечание. Если вы используете IAM, пропустите часть "Principal".
Ответ 6
Перейдите по этой ссылке и создайте политику. В поле Principal
укажите *
В Actions
установите Get Objects
Задайте ARN
как arn:aws:s3:<bucket_name>/*
Затем добавьте оператор и затем сгенерируйте политику, вы получите файл JSON, а затем просто скопируйте этот файл и вставьте его в Bucket Policy.
Для получения более подробной информации перейдите сюда.
Ответ 7
для показа статики сайта в s3:
![unckeched blocking bucket public]()
Это политика ведра:
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
}
Ответ 8
Я предлагаю попробовать только с идентификатором учетной записи в основном разделе Json
Попробуйте: "Принципал": {"AWS": "123456789012"},