Политика доступа (Bucket Policy)
Политики доступа устанавливают права на действия с бакетами, объектами и группами объектов.
Политика срабатывает, когда пользователь делает запрос к какому-либо ресурсу. В результате срабатывания политики запрос либо выполняется, либо отклоняется.
Проверка доступа происходит на трех уровнях: проверки сервиса IAM, политика доступа и список разрешений ACL.
- Если запрос прошел проверку IAM, к нему применяется проверка политики доступа.
- Проверка правил политики доступа происходит в следующем порядке:
- Если запрос подошел хотя бы под одно из правил
Deny
, то доступ будет запрещен. - Если запрос подошел хотя бы под одно из правил
Allow
, то доступ будет разрешен. - Если запрос не подошел ни под одно из правил, то доступ будет запрещен.
- Если запрос подошел хотя бы под одно из правил
- Если запрос не прошел проверку IAM или политики доступа, то применяется проверка доступа через ACL объекта.
Политика доступа состоит из базовых элементов:
- Ресурс – бакет (
arn:aws:s3:::samplebucket
), объект в бакете (arn:aws:s3:::samplebucket/some/key
), или префикс (arn:aws:s3:::samplebucket/some/path/*
). - Действие – набор операций над ресурсом, который будет запрещен или разрешен политикой. Подробнее читайте в разделе Действия.
- Результат – запрет или разрешение запрошенного действия. Сначала проверяется попадание запроса в фильтр с действием
Deny
, при совпадении запрос отклоняется и дальнейшие проверки не проводятся. При попадании в фильтр с действиемAllow
запрос разрешается. Если запрос не попал ни в один из фильтров, то запрос отклоняется. - Принципал – получатель запрошенного разрешения политики. Это может быть пользователь IAM, федеративный пользователь, сервисный аккаунт или анонимный пользователь.
- Условие – определение случаев, когда действует политика. Подробнее читайте в разделе Условия.
Для описания правил политик используется JSON-подобный язык.
Чтобы по политике не запретить доступ к бакету через консоль управления Yandex.Cloud, можно добавить следующее правило в секцию Statement
:
{
"Effect": "Allow",
"Principal": {
"CanonicalUser": "ajeyourusernameid"
},
"Action": "*",
"Resource": [
"arn:aws:s3:::your-bucket-name/*",
"arn:aws:s3:::your-bucket-name"
],
"Condition": {
"StringLike": {
"aws:referer": "https://console.cloud.yandex.*/folders/*/storage/bucket/your-bucket-name*"
}
}
}
Примеры конфигурации
- Следующая политика дает доступ анонимному пользователю на чтение объектов бакета
samplebucket
при условии шифрованного подключения.
{
"Id": "epd4limdp3dgec7enpq5"
"Version": "2012-10-17",
"Statement": [
{
"Sid": "f1qqoehl1q53l06kqurs",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::samplebucket/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "true"
}
}
}
]
}
- Политика, которая разрешает скачивать объекты только из указанного диапазона IP-адресов:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::samplebucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "100.101.102.128/30"
}
}
}
]
}
- Политика, которая запрещает скачивать объекты с указанного IP-адреса:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "*",
"Resource": "arn:aws:s3:::samplebucket/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::samplebucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "100.101.102.103"
}
}
}
]
}
- Раздельный доступ к ресурсам бакета для разных пользователей:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"User1Permissions",
"Effect":"Allow",
"Principal": {
"CanonicalUser": "ajeanexampleusername"
},
"Action": "*",
"Resource":["arn:aws:s3:::common-bucket/user1path/*"]
},
{
"Sid":"User2Permissions",
"Effect":"Allow",
"Principal": {
"CanonicalUser": "ajesomeotherusername"
},
"Action": "*",
"Resource":["arn:aws:s3:::common-bucket/user2path/*"]
}
]
}