Сделать контейнер публичным
Чтобы любой пользователь мог вызвать контейнер без передачи заголовка авторизации, сделайте контейнер публичным.
- В консоли управления
перейдите в каталог, в котором находится контейнер. - Выберите сервис Serverless Containers.
- Выберите контейнер, который хотите сделать публичным.
- На вкладке Обзор включите опцию Публичный контейнер.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы сделать контейнер публичным, выполните команду:
yc serverless container allow-unauthenticated-invoke <имя_контейнера>
Результат:
done (1s)
Чтобы сделать контейнер публичным, воспользуйтесь методом REST API setAccessBindings для ресурса Container или вызовом gRPC API ContainerService/SetAccessBindings.
Пример запроса
Чтобы воспользоваться примером, установите cURL
-
Подготовьте файл
body.jsonс телом запроса:{ "accessBindings": [ { "roleId": "serverless-containers.containerInvoker", "subject": { "id": "allUsers", "type": "system" } } ] }Где:
roleId— роль, которую нужно назначить. Вызывать контейнер позволяет рольserverless-containers.containerInvoker.id— субъект, которому нужно назначить роль.allUsers— любой пользователь, прохождение аутентификации не требуется.type— тип субъекта, которому назначается роль.system— публичная группа.
-
Выполните запрос, указав IAM-токен, путь к файлу
body.jsonи идентификатор контейнера:curl \ --request POST \ --header "Authorization: Bearer <IAM-токен>" \ --data "@<путь_к_файлу_body.json>" \ https://serverless-containers.api.cloud.yandex.net/containers/v1/containers/<идентификатор_контейнера>:setAccessBindingsРезультат:
{ "done": false, "metadata": { "@type": "type.googleapis.com/yandex.cloud.access.SetAccessBindingsMetadata", "resourceId": "bba8dkc667bj********" }, "id": "bbaoi3jn8plq********", "description": "operationSetAccessBindings", "createdAt": "2023-12-22T10:30:58.348672821Z", "createdBy": "aje07l4q4vmo********", "modifiedAt": "2023-12-22T10:30:58.348672821Z" } -
Убедитесь, что роль назначена. Для этого выполните запрос, указав IAM-токен и идентификатор контейнера:
curl \ --request GET \ --header "Authorization: Bearer <IAM-токен>" \ https://serverless-containers.api.cloud.yandex.net/containers/v1/containers/<идентификатор_контейнера>:listAccessBindingsРезультат:
{ "accessBindings": [ { "subject": { "id": "allUsers", "type": "system" }, "roleId": "serverless.containers.invoker" } ] }