{"meta":{"title":"Настройка OpenID Connect в поставщиках облачных служб","intro":"Использование OpenID Connect в рабочих процессах для проверки подлинности в ваших поставщиках облачных служб.","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/how-tos","title":"Инструкции"},{"href":"/ru/actions/how-tos/secure-your-work","title":"Защита работы"},{"href":"/ru/actions/how-tos/secure-your-work/security-harden-deployments","title":"Развертывания защиты безопасности"},{"href":"/ru/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-cloud-providers","title":"OIDC в поставщиках облачных служб"}],"documentType":"article"},"body":"# Настройка OpenID Connect в поставщиках облачных служб\n\nИспользование OpenID Connect в рабочих процессах для проверки подлинности в ваших поставщиках облачных служб.\n\n## Обзор\n\nOpenID Connect (OIDC) позволяет GitHub Actions рабочим процессам получать доступ к ресурсам в поставщике облачных служб, не сохраняя учетные данные в виде долговременных GitHub секретов.\n\nЧтобы использовать OIDC, сначала необходимо настроить поставщика облачных служб для доверия GitHubOIDC в качестве федеративного удостоверения, а затем обновить рабочие процессы для проверки подлинности с помощью маркеров.\n\n## Необходимые компоненты\n\n* Основные понятия использования GitHub OpenID Connect (OIDC) и его архитектуры и преимуществ см. в статье [OpenID Connect](/ru/actions/concepts/security/openid-connect).\n\n* Прежде чем продолжить, необходимо спланировать стратегию безопасности, чтобы обеспечить выдачу маркеров доступа только предсказуемым способом. Чтобы управлять тем, как поставщик облачных служб выдает маркеры доступа, **необходимо** определить по крайней мере одно условие, запретив недоверенным репозиториям запрашивать маркеры доступа к облачным ресурсам. Дополнительные сведения см. в разделе [](/ru/actions/reference/security/oidc#oidc-claims-used-to-define-trust-conditions-on-cloud-roles).\n\n## Обновление вашего GitHub Actions рабочего процесса\n\nЧтобы обновить рабочие процессы для OIDC, необходимо внести два изменения в YAML:\n\n1. Добавьте параметры разрешений для маркера.\n2. Используйте официальное действие поставщика облачных служб для обмена маркером OIDC (JWT) для маркера доступа к облаку.\n\nЕсли ваш поставщик облачных служб еще не предлагает официальное действие, вы можете обновить рабочие процессы, чтобы выполнить эти действия вручную.\n\n> \\[!NOTE]\n> Если среды используются в рабочих процессах или политиках OIDC, рекомендуется добавить правила защиты в среду для дополнительной безопасности. Например, можно настроить правила развертывания в среде, чтобы ограничить, какие ветви и теги могут развертываться в среде или получить доступ к секретам среды. Дополнительные сведения см. в разделе [Управление средами для развертывания](/ru/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments).\n\n### Добавление параметров разрешений\n\nДля выполнения задания или рабочего процесса требуется `permissions` параметр, позволяющий `id-token: write`GitHub поставщику OIDC создавать веб-токен JSON для каждого запуска.\n\n> \\[!NOTE] Параметр `id-token: write` в разрешениях рабочего процесса не дает рабочему процессу разрешение на изменение или запись в ресурсы. Вместо этого он позволяет рабочему процессу запрашивать (получить) и использовать (задать) маркер OIDC для действия или шага. Затем этот маркер используется для проверки подлинности с помощью внешних служб с помощью кратковременного маркера доступа.\n\nПодробные сведения о необходимых разрешениях, примерах конфигурации и расширенных сценариях см. в разделе [Справочник по OpenID Connect](/ru/actions/reference/security/oidc#workflow-permissions-for-the-requesting-the-oidc-token).\n\n### Использование официальных действий\n\nЕсли поставщик облачных служб создал официальное действие для использования OIDC с GitHub Actions, вы сможете легко обменять маркер OIDC на маркер доступа. Затем можно обновить рабочие процессы, чтобы использовать этот маркер при доступе к облачным ресурсам.\n\nНапример, Alibaba Cloud создан [`aliyun/configure-aliyun-credentials-action`](https://github.com/aliyun/configure-aliyun-credentials-action) для интеграции с помощью OIDC.GitHub\n\n## Создание настраиваемых действий\n\nЕсли у поставщика облачных служб нет официального действия или если вы предпочитаете создавать пользовательские скрипты, вы можете вручную запросить веб-токен JSON (JWT) от GitHubпоставщика OIDC.\n\nЕсли вы не используете официальное действие, GitHub рекомендуется использовать основной набор средств Actions. Кроме того, для получения маркера можно использовать следующие переменные среды: `ACTIONS_ID_TOKEN_REQUEST_TOKEN`, `ACTIONS_ID_TOKEN_REQUEST_URL`.\n\nЧтобы обновить рабочие процессы с помощью этого подхода, необходимо внести три изменения в YAML:\n\n1. Добавьте параметры разрешений для маркера.\n2. Добавьте код, запрашивающий маркер OIDC от GitHubпоставщика OIDC.\n3. Добавьте код, который обменивает маркер OIDC у поставщика облачных служб на маркер доступа.\n\n### Запрос JWT с помощью основного набора средств Actions\n\nВ следующем примере показано, как использовать `actions/github-script` набор `core` средств для запроса JWT от GitHubпоставщика OIDC. Дополнительные сведения см. в разделе [Создание действия JavaScript](/ru/actions/tutorials/create-actions/create-a-javascript-action#adding-actions-toolkit-packages).\n\n```yaml\njobs:\n  job:\n    environment: Production\n    runs-on: ubuntu-latest\n    steps:\n    - name: Install OIDC Client from Core Package\n      run: npm install @actions/core@1.6.0 @actions/http-client\n    - name: Get Id Token\n      uses: actions/github-script@v8\n      id: idtoken\n      with:\n        script: |\n          let id_token = await core.getIDToken()\n          core.setOutput('id_token', id_token)\n```\n\n### Запрос JWT с помощью переменных среды\n\nВ следующем примере показано, как использовать переменные среды для запроса веб-токена JSON.\n\nДля задания развертывания необходимо определить параметры маркера, используя `actions/github-script` с набором средств `core`. Дополнительные сведения см. в разделе [Создание действия JavaScript](/ru/actions/tutorials/create-actions/create-a-javascript-action#adding-actions-toolkit-packages).\n\nНапример:\n\n```yaml\njobs:\n  job:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/github-script@v8\n      id: script\n      timeout-minutes: 10\n      with:\n        debug: true\n        script: |\n          const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']\n          const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']\n          core.setOutput('TOKEN', token.trim())\n          core.setOutput('IDTOKENURL', runtimeUrl.trim())\n```\n\nЗатем можно использовать `curl` для получения JWT из GitHub поставщика OIDC. Например:\n\n```yaml\n    - run: |\n        IDTOKEN=$(curl -H \"Authorization: Bearer ${{steps.script.outputs.TOKEN}}\" ${{steps.script.outputs.IDTOKENURL}}  -H \"Accept: application/json; api-version=2.0\" -H \"Content-Type: application/json\" -d \"{}\" | jq -r '.value')\n        echo $IDTOKEN\n        jwtd() {\n            if [[ -x $(command -v jq) ]]; then\n                jq -R 'split(\".\") | .[0],.[1] | @base64d | fromjson' <<< \"${1}\"\n                echo \"Signature: $(echo \"${1}\" | awk -F'.' '{print $3}')\"\n            fi\n        }\n        jwtd $IDTOKEN\n        echo \"idToken=${IDTOKEN}\" >> $GITHUB_OUTPUT\n      id: tokenid\n```\n\n### Получение маркера доступа от поставщика облачных служб\n\nЧтобы получить маркер доступа, необходимо представить веб-маркер OIDC JSON поставщику облачных служб.\n\nДля каждого развертывания рабочие процессы должны использовать действия входа в облако (или пользовательские скрипты), которые получают маркер OIDC и представляет его поставщику облачных служб. Затем поставщик облачных служб проверяет утверждения в маркере; в случае успешного выполнения он предоставляет маркер доступа к облаку, доступный только для этого запуска задания. Предоставленный маркер доступа затем можно использовать в последующих действиях в задании для подключения к облаку и развертывания в своих ресурсах.\n\nПорядок замены маркера OIDC на маркера доступа зависит от конкретного поставщика облачных служб.\n\n### Доступ к ресурсам в поставщике облачных служб\n\nПолучив маркер доступа, вы можете использовать определенные облачные действия или скрипты для проверки подлинности у поставщика облачных служб и развертывания в своих ресурсах. Эти действия могут отличаться для каждого поставщика облачных служб.\n\nНапример, Alibaba Cloud поддерживает собственные инструкции по проверке подлинности OIDC. Дополнительные сведения см. в разделе [\"Обзор единого входа](https://www.alibabacloud.com/help/en/ram/user-guide/overview-of-oidc-based-sso) на основе OIDC\" в документации по Alibaba Cloud.\n\nКроме того, срок действия маркера доступа по умолчанию может отличаться для каждого конкретного облака и может быть настроен на стороне поставщика облачных служб.\n\n## Дополнительные материалы\n\n* [Использование OpenID Connect с многократно используемыми рабочими процессами](/ru/actions/how-tos/secure-your-work/security-harden-deployments/oidc-with-reusable-workflows)\n* [Справочник по локальным запускам](/ru/actions/reference/runners/self-hosted-runners)"}