Сделать контейнер публичным
Чтобы любой пользователь мог вызвать контейнер без передачи заголовка авторизации, сделайте контейнер публичным.
- В консоли управления
перейдите в каталог, в котором находится контейнер. - Выберите сервис Serverless Containers.
- Выберите контейнер, который хотите сделать публичным.
- На вкладке Обзор включите опцию Публичный контейнер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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" } ] }