Доступ к бакету с помощью эфемерного ключа доступа
Эфемерные ключи доступа — это временные ключи с ограниченным сроком действия, которые предоставляют безопасный способ доступа к ресурсам Yandex Object Storage без необходимости хранить статические ключи. В этом руководстве вы научитесь создавать эфемерные ключи с помощью скрипта и использовать их для создания бакетов и загрузки объектов с помощью AWS CLI
Чтобы загрузить объекты в бакет Object Storage с помощью эфемерного ключа доступа:
- Подготовьте облако к работе.
- Создайте сервисный аккаунт.
- Создайте эфемерный ключ доступа.
- Проверьте настройку AWS CLI.
- Создайте бакет.
- Загрузите объект в бакет.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит:
- плата за хранение данных в бакете (тарифы Object Storage);
- плата за операции с данными (тарифы Object Storage).
Настройте окружение
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
- Установите и настройте интерфейс командной строки AWS CLI.
- Скачайте и установите утилиту jq
.
Создайте сервисный аккаунт
Создайте сервисный аккаунт, от имени которого вы будете создавать бакет и загружать объекты. Назначьте ему роль storage.editor на каталог.
- Откройте консоль управления
. - Перейдите
в сервис Identity and Access Management. - Нажмите Создать сервисный аккаунт.
- В поле Имя укажите
ephemeral-sa. - Нажмите
Добавить роль и выберите рольstorage.editor. - Нажмите Создать.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Создайте сервисный аккаунт:
yc iam service-account create \ --name ephemeral-saРезультат:
id: ajeab0cnib1p******** folder_id: b0g12ga82bcv******** created_at: "2025-10-03T09:44:35.989446Z" name: ephemeral-sa -
Назначьте сервисному аккаунту роль
storage.editorна каталог:yc resource-manager folder add-access-binding <имя_каталога> \ --service-account-name ephemeral-sa \ --role storage.editorРезультат:
effective_deltas: - action: ADD access_binding: role_id: storage.editor subject: id: ajeab0cnib1p******** type: serviceAccount
- Создайте сервисный аккаунт
ephemeral-sa. Для этого воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create. - Назначьте сервисному аккаунту в текущем каталоге роль
storage.editor. Для этого воспользуйтесь методом REST API setAccessBindings для ресурса Folder или вызовом gRPC API FolderService/SetAccessBindings.
Чтобы управлять доступом к бакету, у сервисного аккаунта должна быть роль storage.admin.
Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer должны быть следующие роли на ключ шифрования:
kms.keys.encrypter— для чтения ключа, шифрования и загрузки объектов;kms.keys.decrypter— для чтения ключа, расшифровки и скачивания объектов;kms.keys.encrypterDecrypter— включает разрешения, предоставляемые ролямиkms.keys.encrypterиkms.keys.decrypter.
Подробнее смотрите Сервисные роли Key Management Service.
Создайте эфемерный ключ доступа
Эфемерный ключ доступа можно записать напрямую в файл учетных данных AWS CLI. Как управлять эфемерными ключами вручную, смотрите в документе Управление эфемерными ключами доступа.
Чтобы создать эфемерный ключ доступа, пользователю необходима роль iam.serviceAccounts.ephemeralAccessKeyAdmin или выше на каталог.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Получите идентификатор сервисного аккаунта
ephemeral-sa:yc iam service-account get --name ephemeral-sa --format json | jq -r .id -
Создайте эфемерный ключ доступа и запишите его в файл учетных данных AWS CLI:
yc iam access-key issue-ephemeral \ --subject-id <идентификатор_сервисного_аккаунта> \ --session-name ephemeral-sa-1 \ --aws-profile ephemeral-profile \ --aws-credentials-file ~/.aws/credentialsГде:
--subject-id— идентификатор сервисного аккаунтаephemeral-sa.--session-name— имя сессии длиной от 1 до 64 символов. Необходимо для идентификации сессии в случае, если сервисный аккаунт имперсонирован для нескольких пользователей.--aws-profile— имя профиля AWS CLI, в который будет записан эфемерный ключ. Если профиль с таким именем уже существует, его данные будут перезаписаны.--aws-credentials-file— путь к файлу учетных данных AWS CLI. По умолчанию используется~/.aws/credentials.
После выполнения команды в файле
~/.aws/credentialsпоявится профильephemeral-profileс данными эфемерного ключа. Значения ключа в консоль не выводятся.
Проверьте настройку AWS CLI
Убедитесь, что AWS CLI использует созданный эфемерный ключ.
-
При необходимости добавьте в профиль
ephemeral-profileв файле~/.aws/credentialsпараметры региона и эндпоинта Object Storage:[ephemeral-profile] region = kz1 endpoint_url = https://storage.yandexcloud.kz -
Проверьте конфигурацию профиля:
aws s3 ls --profile ephemeral-profileЕсли конфигурация выполнена правильно, команда выполнится без ошибок.
Создайте бакет
Создайте бакет для хранения объектов.
Выполните команду, указав имя бакета:
aws s3 mb s3://<имя_бакета> \
--profile ephemeral-profile
Результат:
make_bucket: my-bucket
Подробности в документе Создание бакета.
Загрузите объект в бакет
Загрузите объект в созданный бакет.
-
Создайте тестовый файл:
echo "Hello, Yandex Cloud!" > test-file.txt -
Выполните команду для загрузки файла, указав путь к локальному файлу, имя вашего бакета и ключ, по которому объект будет храниться в бакете:
aws s3 cp test-file.txt \ s3://<имя_бакета>/test-file.txt \ --profile ephemeral-profileРезультат:
upload: ./test-file.txt to s3://my-bucket/test-file.txt -
Проверьте, что объект успешно загружен:
aws s3 ls s3://<имя_бакета>/ \ --profile ephemeral-profileРезультат:
2025-10-03 09:45:12 23 test-file.txt
Подробности в документе Загрузить объект.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- удалите объекты из бакета;
- удалите бакет.