Visão geral
O OpenID Connect (OIDC) permite que seus fluxos de trabalho do GitHub Actions se autentiquem com o JFrog para baixar e publicar artefatos sem armazenar senhas, tokens ou chaves de API do JFrog na GitHub.
Este guia fornece uma visão geral de como configurar o JFrog para confiar no OIDC da GitHub como uma identidade federada e demonstra como usar essa configuração em um fluxo de trabalho de GitHub Actions.
Para obter um exemplo de fluxo de trabalho do GitHub Actions, consulte Exemplo de integração do GitHub Actions na documentação do JFrog.
Para um exemplo de fluxo de trabalho de GitHub Actions usando a CLI do JFrog, consulte build-publish.yml
no repositório jfrog-github-oidc-example
.
Pré-requisitos
-
Para saber os conceitos básicos de como o GitHub usa o OIDC (OpenID Connect), além da arquitetura e dos benefícios, confira "Sobre o enrijecimento de segurança com o OpenID Connect".
-
Antes de prosseguir, você deve planejar sua estratégia de segurança para garantir que os tokens de acesso sejam atribuídos apenas de forma previsível. Para controlar como o provedor de nuvem emite os tokens de acesso, você precisa definir, pelo menos, uma condição, para que os repositórios não confiáveis não possam solicitar tokens de acesso aos seus recursos de nuvem. Para obter mais informações, confira "Sobre o enrijecimento de segurança com o OpenID Connect".
-
Para ser seguro, você precisa definir um JSON de declarações no JFrog ao configurar mapeamentos de identidade. Para obter mais informações, confira "AUTOTITLE" e "Sobre o enrijecimento de segurança com o OpenID Connect."
Por exemplo, você pode definir
iss
comohttps://token.actions.githubusercontent.com
, e orepository
como algo como "octo-org/octo-repo"'. Isso vai garantir que apenas os fluxos de trabalho de Ações do repositório especificado tenham acesso à sua plataforma JFrog. A seguir, um exemplo de JSON de declarações ao configurar mapeamentos de identidade.JSON { "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
{ "iss": "https://token.actions.githubusercontent.com", "repository": "octo-org/octo-repo" }
Adicionando o provedor de identidade ao JFrog
Para usar o OIDC com o JFrog, estabeleça uma relação de confiança entre GitHub Actions e a plataforma JFrog. Para obter mais informações sobre esse processo, consulte Integração do OpenID Connect na documentação do JFrog.
- Inicie sessão na plataforma JFrog.
- Configure a confiança entre o JFrog e seus fluxos de trabalho do GitHub Actions.
- Configurar mapeamentos de identidade.
Atualizar o seu fluxo de trabalho de GitHub Actions
Depois de estabelecer uma relação de confiança entre GitHub Actions e a plataforma JFrog, você pode atualizar seu arquivo de fluxo de trabalho do GitHub Actions.
No arquivo de fluxo de trabalho do GitHub Actions, verifique se você está usando o nome do provedor e o público que configurou na Plataforma JFrog.
O exemplo a seguir usa o espaço reservado 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
O exemplo a seguir mostra parte de um arquivo de fluxo de trabalho do GitHub Actions usando 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
Como alternativa, você pode definir o público como uma variável de ambiente usando o contexto env
. Para saber mais sobre o contexto env
, confira "Acessar informações contextuais sobre execuções de fluxo de trabalho".
Observação: quando os ambientes são usados em fluxos de trabalho ou em políticas OIDC, recomendamos adicionar regras de proteção ao ambiente para segurança adicional. Por exemplo, você pode configurar regras de implantação em um ambiente para restringir quais ramificações e tags podem ser implantadas no ambiente ou acessar segredos de ambiente. Para obter mais informações, confira "Gerenciar ambientes para implantação".
jobs:
build:
runs-on: ubuntu-latest
env:
OIDC_AUDIENCE: 'YOUR_AUDIENCE'
Em seguida, no arquivo de fluxo de trabalho, você pode recuperar os valores das variáveis armazenadas no contexto env
. O exemplo a seguir usa o contexto env
para recuperar a o público-alvo do 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);