Кратко:
- Роль storage.configurer не дает доступа к данным в бакете, что важно для сохранения медицинской тайны.
- Управление доступом к снимкам в облаке требует ограничения доступа к разным уровням.
- В Yandex Cloud используются три независимых механизма контроля доступа: сервис управления доступом (IAM), список управления доступом (ACL) и политика доступа (Bucket Policy).
- IAM проверяет все операции в Yandex Cloud и управляет доступом на основе ролей.
- ACL позволяет разрешать операции чтения, записи, перезаписи и удаления объектов.
- Политика доступа настраивает дополнительные условия действий с бакетами и объектами.
- Механизмы контроля доступа применяются в порядке: проверка через IAM, политика доступа, ACL.
- Подписанные ссылки предоставляют временный доступ к объектному хранилищу.
Управление доступом
Чтобы система хранения рентгеновских снимков в облаке работала надёжно и с врачебной тайной не возникало проблем, необходимо ограничить доступ к снимкам. Уровень доступа у всех должен быть разным, чтобы врачи могли просматривать снимки, рентгенологи — и просматривать, и загружать, а сисадмин — настраивать объектное хранилище.
В объектном хранилище Yandex Cloud для контроля доступа используются три независимых механизма:
- сервис управления доступом (IAM, Identity and Access Management) работает на уровне всего облака;
- список управления доступом (ACL, Access Control List) работает на уровне бакетов и объектов;
- политика доступа (Bucket Policy) задаёт условия доступа к бакетам и объектам.
IAM
С основами работы IAM вы познакомились на предыдущем курсе. IAM проверяет все операции в Yandex Cloud и управляет доступом на основе ролей — набора разрешений, которые описывают допустимые операции. Если разрешения нет, сервис сообщит об ошибке.
Помните, что роли действуют и на вложенные ресурсы. Если вы дадите системной группе
allUsers
(все пользователи интернета) или allAuthenticatedUsers
(все пользователи, прошедшие аутентификацию в Yandex Cloud) права доступа к облаку или каталогу с объектным хранилищем — пользователи получат доступ ко всем бакетам в нем.На схеме ниже показано, какие роли дают разрешение на действия в объектном хранилище и как роли наследуют разрешения друг друга.

Чтобы настроить права доступа к рентгеновским снимкам, врачам нужно выдать роль
storage.viewer
, рентгенологам — storage.uploader
, а сотруднику, отвечающему за систему хранения, — storage.admin
или storage.configurer
в зависимости от ситуации.ACL
ACL — это тоже список разрешений на действия. Но в отличие от IAM, он распространяется не на всё облако, а только на объектное хранилище. С помощью ACL можно разрешить:
- операции чтения для объектов и бакетов (READ);
- операции записи, перезаписи и удаления объектов (WRITE);
- полный доступ к объектам и бакетам (FULL_CONTROL).
Разрешения в ACL соответствуют ролям пользователей в сервисе IAM. Например, разрешение FULL_CONTROL соответствует роли
admin
. ACL используется в объектном хранилище для S3-совместимости, а также чтобы быстро предоставлять доступ к объектам или бакетам.С помощью ACL можно выдать разрешения пользователям Yandex Cloud, сервисному аккаунту и системным группам
allUsers
и allAuthenticatedUsers
. Чтобы выдать разрешение, надо знать идентификатор его получателя.Политика доступа
С помощью политики доступа настраиваются дополнительные условия действий с бакетами и объектами. Вы можете, например, запретить доступ к бакету из конкретного диапазона IP-адресов.
Элементы политики доступа:
- ресурс — бакет, префикс (условный «путь» в идентификаторе объекта) или объект;
- действие — запрошенная операция над ресурсом;
- результат — запрет (Deny) или разрешение (Allow) действия;
- пользователь — тот, кто запрашивал выполнение операции;
- условие — случаи, когда политика действует;
- принцип выбора — включить или исключить пользователей.
Если для обеспечения безопасности и конфиденциальности данных вы разрешаете пользователям просматривать снимки только по защищённому соединению, то политика доступа будет выглядеть так:
{
"Id": "epd4limdp3dgec7enpq5"
"Version": "2021-01-15",
"Statement": [
{
"Sid": "f1qqoehl1q53l06kqurs",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::hospital/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "true"
}
}
}
]
}
Как применяются механизмы контроля доступа
Разрешение на доступ к объекту проверяется на трех уровнях: в сервисе IAM, в политике доступа и в списке разрешений ACL. Система контроля доступа построена по принципу «запрещено всё, что не разрешено»: доступ даётся только тогда, когда есть хотя бы одно разрешающее правило и нет ни одного запрещающего.

Механизмы контроля доступа применяются в таком порядке:

Например, если запрос не прошел проверку IAM (нужная роль не назначена и разрешения на доступ нет), но доступ к объекту открыт с помощью ACL, то запрос будет выполнен, поскольку есть одно разрешение на доступ и нет явных запретов.
Какой механизм контроля доступа выбрать
Это зависит от ситуации.
- Проверка через IAM выполняется всегда. Назначьте пользователям вашего хранилища соответствующие роли. Для несложных сценариев (когда вы хотите знать, что может делать в хранилище конкретный пользователь) этого зачастую достаточно.
- Политика доступа управляет доступом по дополнительным критериям. Выбирайте её, если вам важно, при каких условиях разрешаются действия с бакетом или объектами.
- ACL позволяет дать доступ к объекту. Это удобно, когда нет смысла продумывать целую систему контроля доступа или тратить время на прописывание политик. Но если объектов много — лучше выбирать IAM или политику доступа.
Подписанные ссылки
Ещё одна возможность открыть доступ к объектному хранилищу для скачивания или загрузки объекта — механизм подписанных ссылок (pre-signed URL). С его помощью предоставляется временный (от нескольких секунд до семи дней) доступ к объекту или бакету.
Ссылка содержит:
- подпись, вычисленную на основе ключа доступа к каталогу и секретного ключа;
- описание действия, которое пользователь может выполнить в хранилище.
С помощью подписанных ссылок приложение может генерировать ссылки на объекты в хранилище (например, для пользователей, которые оплатили скачиваемый контент).
Проверьте себя
Задача
Рентгеновские снимки вашей клиники хранятся в объектном хранилище в облаке. Подумайте, какому сотруднику следует дать роль
storage.admin
, а какому — storage.configurer
.Подсказка
Чтобы это определить, посмотрите, какие действия доступны для этих ролей. Обратите внимание, что роль storage.configurer
не даёт доступа к данным в бакете, что важно с точки зрения сохранения медицинской тайны. То есть роль storage.admin
лучше давать врачу, отвечающему за систему хранения, а роль storage.configurer
— например, системному администратору клиники.