Обзор
OpenID Connect (OIDC) позволяет рабочим процессам GitHub Actions проходить проверку подлинности с помощью JFrog, чтобы скачать и опубликовать артефакты без хранения паролей JFrog , маркеров или ключей API в GitHub.
В этом руководстве представлен обзор настройки JFrog для доверия GitHub%}в качестве федеративного удостоверения и демонстрируется использование этой конфигурации в рабочем процессе GitHub Actions.
Пример рабочего процесса GitHub Actions см . в примере интеграции GitHub Actions в документации по JFrog.
Пример рабочего процесса GitHub Actions с помощью JFrog CLI смbuild-publish.yml
. в репозитории.jfrog-github-oidc-example
Необходимые компоненты
-
Основные понятия о том, как GitHub использует OpenID Connect (OIDC) и его архитектуру и преимущества, см. в разделе "Сведения об усилении защиты с помощью OpenID Connect".
-
Прежде чем продолжить, необходимо спланировать стратегию безопасности, чтобы обеспечить выдачу маркеров доступа только предсказуемым способом. Чтобы управлять тем, как поставщик облачных служб выдает маркеры доступа, необходимо определить по крайней мере одно условие, запретив недоверенным репозиториям запрашивать маркеры доступа к облачным ресурсам. Дополнительные сведения см. в разделе Сведения об усилении защиты с помощью OpenID Connect.
-
Чтобы обеспечить безопасность, необходимо задать JSON утверждений в JFrog при настройке сопоставлений удостоверений. Дополнительные сведения см. в разделе "[AUTOTITLE" и "AUTOTITLE](/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-token-claims)".
Например, можно задать
iss
https://token.actions.githubusercontent.com
значение , аrepository
также что-то вроде "octo-org/octo-repo". Это обеспечит доступ к платформе JFrog только рабочих процессов Actions из указанного репозитория. Ниже приведен пример JSON утверждений при настройке сопоставлений удостоверений.JSON { "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
{ "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
Добавление поставщика удостоверений в JFrog
Чтобы использовать OIDC с JFrog, установите отношение доверия между GitHub Actions и платформой JFrog. Дополнительные сведения об этом процессе см . в статье "Интеграция OpenID Connect" в документации по JFrog.
- Войдите на платформу JFrog.
- Настройте доверие между JFrog и рабочими процессами GitHub Actions.
- Настройте сопоставления удостоверений.
Обновление рабочего процесса GitHub Actions
После установления отношения доверия между GitHub Actions и платформой JFrog можно обновить файл рабочего процесса GitHub Actions.
В файле рабочего процесса GitHub Actions убедитесь, что вы используете имя поставщика и аудиторию, настроенную на платформе JFrog.
В следующем примере используется заполнитель YOUR_PROVIDER_NAME
.
- name: Fetch Access Token from Artifactory
id: fetch_access_token
env:
ID_TOKEN: $
run: |
ACCESS_TOKEN=$(curl \
-X POST \
-H "Content-type: application/json" \
https://example.jfrog.io/access/api/v1/oidc/token \
-d \
"{\"grant_type\": \"urn:ietf:params:oauth:grant-type:token-exchange\", \"subject_token_type\":\"urn:ietf:params:oauth:token-type:id_token\", \"subject_token\": \"$ID_TOKEN\", \"provider_name\": \"YOUR_PROVIDER_NAME\"}" | jq .access_token | tr -d '"')
echo ACCESS_TOKEN=$ACCESS_TOKEN >> $GITHUB_OUTPUT
В следующем примере показана часть файла рабочего процесса GitHub Actions с помощью cURL.
- name: Get ID Token (cURL method)
id: idtoken
run: |
ID_TOKEN=$(curl -sLS -H "User-Agent: actions/oidc-client" -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
"${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=jfrog-github" | jq .value | tr -d '"')
echo "ID_TOKEN=${ID_TOKEN}" >> $GITHUB_OUTPUT
Кроме того, аудиторию можно задать в качестве переменной среды с помощью контекста env
. Дополнительные сведения о контексте env
см. в разделе "Доступ к контекстной информации о запусках рабочих процессов".
Note
Если среды используются в рабочих процессах или политиках OIDC, рекомендуется добавить правила защиты в среду для дополнительной безопасности. Например, можно настроить правила развертывания в среде, чтобы ограничить, какие ветви и теги могут развертываться в среде или получить доступ к секретам среды. Дополнительные сведения см. в разделе Управление средами для развертывания.
jobs:
build:
runs-on: ubuntu-latest
env:
OIDC_AUDIENCE: 'YOUR_AUDIENCE'
Затем в файле рабочего процесса извлеките значение переменных, хранящихся в контексте env
. В следующем примере используется env
контекст для получения аудитории OIDC.
- name: Get ID Token (using env context)
uses: actions/github-script@v6
id: idtoken
with:
script: |
const coredemo = require('@actions/core');
let id_token = await coredemo.getIDToken(process.env.OIDC_AUDIENCE);
coredemo.setOutput('id_token', id_token);