AWS S3 Bucket Policy - разрешить GetObject только в пределах префикса
Я пытаюсь установить политику в своем сегменте, чтобы разрешить публичный доступ 'GetObject' к моим объектам, но только к тем, которые находятся в пределах определенного префикса. Как это:
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/publicstuff/*"
}
Проблема в том, что AWS предупреждает меня, что это делает все ведро публичным. И конечно же, это так; если я пытаюсь получить объект из /mybucket/whereelse/, S3 подает его свободно. Так что все после "mybucket" игнорируется.
Есть ли способ построить политику сегмента, применимую к определенному префиксу внутри блока? Я попытался выполнить условие политики, но обнаружил, что префикс s3: нельзя использовать при использовании действия s3:GetObject.
2 ответа
Спасибо @michael и @mok, я нашел ответ: я идиот. Другие объекты, которые я использовал для проверки стандартного поведения, имеют индивидуальные разрешения для них, чтобы разрешить getObject, и я не помню, чтобы их там было и не замечали. Когда я удалил эти разрешения, оказалось, что я все еще могу получить доступ к этим объектам, но я на самом деле собирал кэшированные копии. При удалении этих ложных разрешений и использовании совершенно другого браузера я убедился, что моя изначально опубликованная политика была правильной. Извините за беспокойство.
Это совершенно нормально, хотя вы видите указание на то, что ваше ведро общедоступно. Вы должны заметить, что этот индикатор показывает, что публичный доступ к (некоторому содержанию) этой корзины предоставляется.
Таким образом, чтобы убедиться, что проблем нет, вы можете просто протестировать файл за пределами общедоступной папки и сравнить его с файлом, который должен быть общедоступным в соответствии с вашей политикой.
На следующем рисунке вы можете видеть, что я сделал подпапку своего ведра (toignore) доступной для общественности:
Это древовидное представление ведра:
Directory── справочник
To ├── toignore
│ │ └── i.txt
N── ni.txt
Исходя из моей политики, i.txt общедоступен, а ni.txt - нет, а индикатор показывает публичный доступ.