---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.2
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/operations/service-connections.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/service-connections.md
  - href: ru/sourcecraft/operations/service-connections.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
title: Настроить в SourceCraft сервисное подключение к Yandex Cloud
description: Инструкция по настройке сервисного подключения для безопасной интеграции проектов SourceCraft с ресурсами Yandex Cloud.
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


# Настроить в SourceCraft сервисное подключение к Yandex Cloud

<!-- source: ru/_includes/sourcecraft/service-connection-info.md -->
_Сервисные подключения_ — это безопасный способ интеграции ваших проектов SourceCraft с ресурсами Yandex Cloud.

Сервисные подключения позволяют изнутри процессов [CI/CD](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md) вашего репозитория SourceCraft получить доступ к [API](https://yandex.cloud/ru/docs/api-design-guide/concepts/general) Yandex Cloud. Например, вы можете запросить [секрет](https://yandex.cloud/ru/docs/lockbox/concepts/secret) из Yandex Lockbox, загрузить файлы в [бакет](https://yandex.cloud/ru/docs/storage/concepts/bucket) Yandex Object Storage, развернуть [виртуальную машину](https://yandex.cloud/ru/docs/compute/concepts/vm) в Yandex Compute Cloud и прочее.

При этом вам не требуется хранить в [секретах](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#secrets) репозитория и тем более в коде каких-либо долгоживущих токенов или ключей доступа. Аутентификация в Yandex Cloud осуществляется с помощью короткоживущего [IAM-токена](https://yandex.cloud/ru/docs/iam/concepts/authorization/iam-token) Yandex Identity and Access Management, который запрашивается внутри каждого конкретного [задания](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md#tasks) CI/CD.
<!-- endsource: ru/_includes/sourcecraft/service-connection-info.md -->

Подробнее на странице [Сервисные подключения SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/service-connections.md).

<iframe width="640" height="360" src="https://runtime.strm.yandex.ru/player/video/vplvkajjdgrv3qdnz2wy?autoplay=0&mute=0" allow="autoplay; fullscreen; picture-in-picture; encrypted-media" frameborder="0" scrolling="no"></iframe>

В инструкции в качестве примера будет показан процесс получения списка [функций](https://yandex.cloud/ru/docs/functions/concepts/function) Yandex Cloud Functions.

Чтобы настроить сервисное подключение:
1. [Создайте сервисный аккаунт Yandex Cloud](#create-sa).
1. [Назначьте роль сервисному аккаунту](#grant-role).
1. [Создайте сервисное подключение](#create-service-connection).
1. [Подготовьте конфигурацию CI/CD](#prepare-ci-cd).
1. [Проверьте работу сервисного подключения](#check).

## Создайте сервисный аккаунт Yandex Cloud {#create-sa}

[Сервисный аккаунт](https://yandex.cloud/ru/docs/iam/concepts/users/service-accounts) — аккаунт, от имени которого программы могут управлять ресурсами в Yandex Cloud.

Чтобы создать сервисный аккаунт:
1. В [консоли управления](https://console.yandex.cloud) Yandex Cloud выберите [каталог](https://yandex.cloud/ru/docs/resource-manager/concepts/resources-hierarchy), к ресурсам которого вы хотите настроить доступ из SourceCraft.
1. [Перейдите](https://yandex.cloud/ru/docs/console/operations/select-service.md#select-service) в сервис **Identity and Access Management**.
1. Нажмите кнопку **Создать сервисный аккаунт**.
1. Введите имя сервисного аккаунта.

   Требования к формату имени:

   <!-- source: ru/_includes/name-format.md -->
   * длина — от 3 до 63 символов;
   * может содержать строчные буквы латинского алфавита, цифры и дефисы;
   * первый символ — буква, последний — не дефис.
   <!-- endsource: ru/_includes/name-format.md -->

   <!-- source: ru/_includes/iam/sa-uniq-name.md -->
   Имя сервисного аккаунта должно быть уникальным в рамках облака.
   <!-- endsource: ru/_includes/iam/sa-uniq-name.md -->

1. Нажмите кнопку **Создать**.

Подробнее про [создание сервисного аккаунта](https://yandex.cloud/ru/docs/iam/operations/sa/create).

## Назначьте роль сервисному аккаунту {#grant-role}

[Роль](https://yandex.cloud/ru/docs/iam/concepts/access-control/roles) — это набор разрешений, который определяет допустимые операции с ресурсами в Yandex Cloud.

Чтобы назначить сервисному аккаунту роль на каталог:
1. В [консоли управления](https://console.yandex.cloud) Yandex Cloud выберите каталог с сервисным аккаунтом, созданным ранее.
1. Перейдите на вкладку **Права доступа**.
1. Нажмите кнопку **Настроить доступ**.
1. В открывшемся окне выберите раздел **Сервисные аккаунты**.
1. Выберите нужный сервисный аккаунт из списка или воспользуйтесь поиском.
1. Нажмите кнопку ![image](../../_assets/console-icons/plus.svg) **Добавить роль** и выберите роль из списка или воспользуйтесь поиском.

    Например, назначьте сервисному аккаунту [роль](https://yandex.cloud/ru/docs/functions/security/#functions-viewer) `functions.viewer` для доступа к просмотру функций в Cloud Functions.
1. Нажмите кнопку **Сохранить**.

Подробнее про [назначение ролей сервисному аккаунту](https://yandex.cloud/ru/docs/iam/operations/sa/assign-role-for-sa).

## Создайте сервисное подключение {#create-service-connection}

<!-- source: ru/_includes/sourcecraft/service-connection-type.md -->
Вы можете создать сервисное подключение двух видов:

* На уровне организации — оно будет доступно для работы из любого репозитория [организации](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#org), если его область применения не ограничена. Для создания такого подключения требуется роль [Администратор организации](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#organization-manager-admin).
* На уровне репозитория — оно будет доступно только для работы из конкретного [репозитория](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#repos). Для создания такого подключения требуется роль [Администратор репозитория](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md#src-repositories-admin). Пользователь может создавать и редактировать такое подключение только для этого репозитория, а также просматривать в режиме чтения список подключений, доступных для любых репозиториев в организации.
<!-- endsource: ru/_includes/sourcecraft/service-connection-type.md -->

{% list tabs group=instructions %}

- На уровне организации {#organization}

  1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
  1. Перейдите на вкладку ![image](../../_assets/console-icons/briefcase.svg) **Организации**.
  1. Выберите [организацию](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#org).
  1. На странице организации в разделе ![image](../../_assets/console-icons/gear.svg) **Настройки** перейдите в секцию ![image](../../_assets/console-icons/cloud-nut-hex.svg) **Сервисные подключения**.
  1. Нажмите **Новое сервисное подключение**.
  1. В открывшемся окне:
      * В блоке **Базовая информация** укажите имя сервисного подключения, например `default-service-connection`, опционально добавьте описание.
      * В блоке **Область применения** выберите, для каких репозиториев и веток будет доступно сервисное подключение.
      * В блоке **Настройки Yandex Cloud** выберите:
        * Каталог, к ресурсам которого вы хотите настроить доступ из SourceCraft.
        * Сервисный аккаунт, созданный ранее.

        <!-- source: ru/_includes/sourcecraft/service-connection-synchronization.md -->
        {% note tip %}

        Чтобы повторно запросить список облаков, каталогов и сервисных аккаунтов из Yandex Cloud, нажмите ![image](../../_assets/console-icons/arrow-rotate-right.svg) **Синхронизировать**. Это может быть полезно, если параллельно с созданием сервисного подключения вы создали каталог или сервисный аккаунт.

        {% endnote %}
        <!-- endsource: ru/_includes/sourcecraft/service-connection-synchronization.md -->

  1. Нажмите **Создать сервисное подключение**.

- На уровне репозитория {#repository}

  1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
  1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** в секции ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** перейдите в раздел ![image](../../_assets/console-icons/archive.svg) **Репозитории**.
  1. Выберите репозиторий.
  1. На странице репозитория в разделе ![image](../../_assets/console-icons/gear.svg) **Настройки репозитория** перейдите в секцию ![image](../../_assets/console-icons/cloud-nut-hex.svg) **Сервисные подключения**.
  1. Нажмите **Новое сервисное подключение**.
  1. В открывшемся окне:
      * В блоке **Базовая информация** укажите имя сервисного подключения, например `default-service-connection`, опционально добавьте описание.
      * В блоке **Область применения** выберите, для каких веток будет доступно сервисное подключение.
      * В блоке **Настройки Yandex Cloud** выберите:
        * Каталог, к ресурсам которого вы хотите настроить доступ из SourceCraft.
        * Сервисный аккаунт, созданный ранее.

        <!-- source: ru/_includes/sourcecraft/service-connection-synchronization.md -->
        {% note tip %}

        Чтобы повторно запросить список облаков, каталогов и сервисных аккаунтов из Yandex Cloud, нажмите ![image](../../_assets/console-icons/arrow-rotate-right.svg) **Синхронизировать**. Это может быть полезно, если параллельно с созданием сервисного подключения вы создали каталог или сервисный аккаунт.

        {% endnote %}
        <!-- endsource: ru/_includes/sourcecraft/service-connection-synchronization.md -->

  1. Нажмите **Создать сервисное подключение**.

{% endlist %}

<!-- source: ru/_includes/sourcecraft/service-connection-details.md -->
Дождитесь окончания операции. На открывшейся странице будут представлены детали сервисного подключения.

В Yandex Cloud будет автоматически создана [федерация сервисных аккаунтов](https://yandex.cloud/ru/docs/iam/concepts/workload-identity) Yandex Identity and Access Management.

Чтобы посмотреть параметры созданного OIDC-провайдера, в блоке ![image](../../_assets/console-icons/cpus.svg) **Федерация cервисных аккаунтов** нажмите на имя федерации.
<!-- endsource: ru/_includes/sourcecraft/service-connection-details.md -->

## Подготовьте конфигурацию CI/CD {#prepare-ci-cd}

<!-- source: ru/_includes/sourcecraft/configuration-tip.md -->
{% note tip %}

Настройка и просмотр конфигураций репозитория доступны в интерфейсе SourceCraft в разделе ![image](../../_assets/console-icons/gear.svg) **Настройки репозитория** в секции ![image](../../_assets/console-icons/nut-hex.svg) **Конфигурации**. Подробнее в инструкции [Настроить конфигурации репозитория в виде кода](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/configuration-edit.md).

{% endnote %}
<!-- endsource: ru/_includes/sourcecraft/configuration-tip.md -->

1. [Настройте](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/ci-cd.md) CI/CD в репозитории.
1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** в секции ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** перейдите в раздел ![image](../../_assets/console-icons/archive.svg) **Репозитории** и выберите репозиторий.
1. На странице репозитория в разделе ![image](../../_assets/console-icons/code.svg) **Код** перейдите в секцию ![image](../../_assets/console-icons/code-trunk.svg) **Ветки**.
1. Выберите ветку для внесения изменений.
1. Откройте файл `.sourcecraft/ci.yaml`.
1. В правом верхнем углу нажмите ![image](../../_assets/console-icons/pencil.svg) **Редактировать**.
1. Добавьте в конфигурацию CI/CD полученные ранее блоки `tokens` и `env`.

    Вы можете получить IAM-токен с помощью готового кубика от команды SourceCraft. Ниже приведен пример конфигурации CI/CD, в которой IAM-токен используется при аутентификации в Yandex Cloud CLI для получения списка функций Cloud Functions.

    ```yaml
    tokens:
      # Произвольное имя токена.
      <имя_токена>:
        # Имя сервисного подключения, созданного ранее.
        service_connection: <имя_сервисного_подключения>
        # Область запроса доступа:
        # org — все репозитории.
        # repo — конкретный репозиторий.
        # ref — ветка или тег.
        scope: repo

    workflows:
      test-workflow:
        tasks:
          - name: sample-task
            cubes:
              # Кубик обменивает токен SourceCraft на IAM-токен Yandex Cloud
              # и сохраняет его в переменную IAM_TOKEN в блоке outputs.
              - name: get-iam-token
                env:
                  ID_TOKEN: ${{ tokens.<имя_токена>.id_token }}
                  YC_SA_ID: ${{ tokens.<имя_токена>.service_account_id }}
                  # Также вы можете получить идентификаторы каталога и облака
                  # YC_FOLDER_ID: ${{ tokens.<имя_токена>.folder_id }}
                  # YC_CLOUD_ID: ${{ tokens.<имя_токена>.cloud_id }}
                image: cr.yandex/sourcecraft/yc-iam:latest

              # Кубик с предустановленным Yandex Cloud CLI забирает из outputs 
              # переменную IAM_TOKEN и использует ее для получения списка функций Cloud Functions.
              - name: get-functions
                env:
                  # Подставьте в блок для получения значений outputs имя кубика с
                  # IAM-токеном, например get-iam-token.
                  YC_IAM_TOKEN: ${{ cubes.<имя_кубика_с_IAM-токеном>.outputs.IAM_TOKEN }}
                  YC_FOLDER_ID: ${{ tokens.<имя_токена>.folder_id }}
                image: 
                  name: cr.yandex/sourcecraft/yc-cli:latest
                  entrypoint: ""
                script:
                  - |
                    yc config set folder-id $YC_FOLDER_ID
                    yc serverless function list

    on:
      push: test-workflow
    ```

    {% note tip %}

    Вы можете взаимодействовать с Yandex Cloud напрямую через API или воспользоваться следующими инструментами:
    * [Yandex Cloud CLI](https://yandex.cloud/ru/docs/cli/) — для аутентификации передайте IAM-токен в переменную окружения `YC_IAM_TOKEN`, а в командах используйте параметры `--cloud-id` и `--folder-id` с указанием идентификаторов облака и каталога.
    * [Terraform](https://yandex.cloud/ru/docs/terraform/) — для аутентификации передайте IAM-токен в переменную окружения `YC_TOKEN`, в переменные окружения `YC_CLOUD_ID` и `YC_FOLDER_ID` передайте идентификаторы облака и каталога.
    * [SDK](https://yandex.cloud/ru/docs/overview/sdk/overview) — аутентификация аналогична API.

    {% endnote %}

1. В правом верхнем углу нажмите **Сохранить изменения**.
1. В открывшемся окне настройте параметры внесения изменений:

    * В поле **Сообщение об изменениях** укажите комментарий, который опишет внесенные изменения.
    * В блоке **Ветка изменений** выберите, в какую ветку внести изменения. При необходимости создайте новую ветку.
    * В блоке **Действие после сохранения изменений** выберите, как внести изменения: с помощью коммита или [предложения изменений](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#pr).

1. Подтвердите внесение изменений.

    Если вы решили внести изменения через предложение изменений, [завершите](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/pr-create.md) его создание.

## Проверьте работу сервисного подключения {#check}

1. На странице репозитория в разделе ![image](../../_assets/console-icons/code.svg) **Код** перейдите в секцию ![image](../../_assets/console-icons/arrows-3-rotate-right.svg) **CI/CD**.
1. Выберите запущенный рабочий процесс.
1. На открывшейся странице будут отображены задания рабочего процесса, шаги задания — кубики, а также статусы и результаты выполнения.
1. В правом нижнем углу кубика `get-functions` нажмите ![image](../../_assets/console-icons/file-text.svg).

    Пример логов выполнения кубика `get-functions`:

    ```bash
    +----------------------+--------+----------------------+--------+
    |          ID          |  NAME  |      FOLDER ID       | STATUS |
    +----------------------+--------+----------------------+--------+
    | d4e5l4qjepst******** | test-1 | b1gveg9vude9******** | ACTIVE |
    +----------------------+--------+----------------------+--------+
    ```

{% note tip %}

Срок жизни IAM-токена составляет 12 часов. Однако в целях безопасности рекомендуется досрочно прекращать его действие после использования. Подробнее на странице [Отзыв IAM-токена](https://yandex.cloud/ru/docs/iam/operations/iam-token/revoke-iam-token).

{% endnote %}

#### Полезные ссылки {#see-also}

* [Сервисные подключения SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/service-connections.md)
* [Интеграция с GitHub Actions в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/gh-actions.md)
* [Управление доступом в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/security/index.md)
* [Непрерывная интеграция и непрерывное развертывание в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/ci-cd.md)
* [Секреты в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#secrets)
* [Настроить интеграцию с Yandex Lockbox в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/lockbox-integration.md)
* [Документация Yandex Identity and Access Management](https://yandex.cloud/ru/docs/iam/)
* [Концепции API Yandex Cloud](https://yandex.cloud/ru/docs/api-design-guide/)
* [Обзор Yandex Cloud SDK](https://yandex.cloud/ru/docs/overview/sdk/overview)
