Setiap eksekusi alur kerja GitHub Actions dapat meminta token identitas yang ditandatangani dari issuer yang dihosting GitHub di https://token.actions.githubusercontent.com. Dengan Workload Identity Federation, alur kerja Anda menukar token tersebut dengan token akses Anthropic berumur pendek, sehingga job CI Anda dapat memanggil Claude API tanpa secret ANTHROPIC_API_KEY yang disimpan di repositori Anda.
Klaim sub pada token mengodekan konteks repositori dan pemicu. Untuk push ke sebuah branch, bentuknya adalah repo:<owner>/<repo>:ref:refs/heads/<branch>. Eksekusi pull-request menggunakan repo:<owner>/<repo>:pull_request, dan deployment yang dibatasi environment menggunakan repo:<owner>/<repo>:environment:<name>. Aturan federasi Anda mencocokkan klaim ini (dan klaim lainnya, seperti repository_owner dan ref) untuk menentukan eksekusi alur kerja mana yang diizinkan untuk melakukan autentikasi.
id-token: write.GitHub hanya menerbitkan token identitas untuk job yang secara eksplisit memintanya. Tambahkan izin id-token: write di tingkat alur kerja atau job:
permissions:
id-token: write
contents: readDi dalam job, runner mengekspos dua variabel lingkungan: ACTIONS_ID_TOKEN_REQUEST_URL dan ACTIONS_ID_TOKEN_REQUEST_TOKEN. Panggil URL permintaan dengan token permintaan sebagai kredensial bearer dan audience pilihan Anda sebagai parameter kueri, lalu tulis "JSON Web Token" (token web JSON), atau JWT, yang dikembalikan ke sebuah file:
- name: Fetch GitHub OIDC token
run: |
curl -sS -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
"$ACTIONS_ID_TOKEN_REQUEST_URL&audience=https://api.anthropic.com" \
| jq -r .value > /tmp/gha-jwtJika Anda lebih suka JavaScript, actions/github-script mengekspos kemampuan yang sama melalui core.getIDToken(audience):
- name: Fetch GitHub OIDC token
uses: actions/github-script@v8
with:
script: |
const fs = require('fs');
const token = await core.getIDToken('https://api.anthropic.com');
fs.writeFileSync('/tmp/gha-jwt', token);Token yang didekode membawa klaim yang mendeskripsikan eksekusi alur kerja. Aturan federasi Anda mencocokkan klaim-klaim ini:
{
"iss": "https://token.actions.githubusercontent.com",
"sub": "repo:your-org/your-repo:ref:refs/heads/main",
"aud": "https://api.anthropic.com",
"repository": "your-org/your-repo",
"repository_owner": "your-org",
"ref": "refs/heads/main",
"sha": "abc123...",
"workflow": "CI",
"actor": "octocat",
"event_name": "push"
}Lihat referensi klaim subject OIDC GitHub untuk daftar lengkap format sub.
Di Claude Console, buka Settings → Workload identity, klik Connect workload, dan pilih tile GitHub Actions. Wizard akan memandu Anda melalui pendaftaran issuer, pembuatan service account, dan pembuatan federation rule.
Wizard ini membuat sumber daya tersebut untuk Anda. Gunakan nilai-nilai berikut baik saat Anda memasukkannya di wizard maupun saat mengirimkannya ke Admin API:
Federation issuer: GitHub memublikasikan dokumen discovery OIDC dan JWKS-nya secara publik, jadi gunakan mode discovery. Anthropic menyegarkan kunci secara otomatis ketika GitHub merotasinya.
{
"name": "github-actions",
"issuer_url": "https://token.actions.githubusercontent.com",
"jwks": { "type": "discovery" }
}Federation rule: Cocokkan hanya eksekusi alur kerja yang memang Anda percayai. Lihat Batasi alur kerja mana yang dapat melakukan autentikasi untuk cara membatasi cakupan klaim-klaim ini dengan aman.
{
"name": "gha-main",
"issuer_id": "fdis_...",
"match": {
"subject_prefix": "repo:your-org/your-repo:ref:refs/heads/main",
"audience": "https://api.anthropic.com",
"claims": {
"repository_owner": "your-org"
}
},
"target": {
"type": "service_account",
"service_account_id": "svac_..."
},
"workspace_id": "wrkspc_...",
"oauth_scope": "workspace:developer",
"token_lifetime_seconds": 600
}Buatlah sespesifik mungkin sesuai yang diizinkan oleh workload. Longgarkan subject_prefix menjadi repo:your-org/your-repo:* (dipasangkan dengan batasan claims.ref) hanya jika aturan tersebut harus mencocokkan beberapa jenis event dari repositori yang sama, karena segmen akhir dari sub bervariasi antara event ref:..., environment:..., dan pull_request.
Atur variabel lingkungan federasi pada job dan panggil SDK seperti biasa. Anthropic() membaca ANTHROPIC_IDENTITY_TOKEN_FILE, menukar JWT pada permintaan pertama, dan menyegarkan token akses secara otomatis sebelum kedaluwarsa.
import anthropic
# Membaca ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID,
# ANTHROPIC_SERVICE_ACCOUNT_ID, ANTHROPIC_WORKSPACE_ID, dan ANTHROPIC_IDENTITY_TOKEN_FILE
# dari lingkungan job.
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(next(block.text for block in message.content if block.type == "text"))Setiap token identitas yang diterbitkan GitHub kedaluwarsa sekitar lima menit setelah diterbitkan. Endpoint permintaan token (ACTIONS_ID_TOKEN_REQUEST_URL) tetap valid selama job berlangsung, sehingga Anda dapat mengambil token baru kapan saja. SDK menukar token pada penggunaan pertama dan menyimpan token akses Anthropic yang dihasilkan dalam cache. Untuk job yang berjalan lebih lama dari masa berlaku token Anthropic, SDK membaca ulang ANTHROPIC_IDENTITY_TOKEN_FILE pada setiap penyegaran, jadi jalankan kembali langkah pengambilan secara berkala (atau bungkus dalam loop latar belakang) agar file tetap mutakhir. Sebagai alternatif, berikan callback token-provider ke SDK yang memanggil ACTIONS_ID_TOKEN_REQUEST_URL secara langsung alih-alih menggunakan jalur file.
Pertukaran yang berhasil mengembalikan access_token yang diawali dengan sk-ant-oat01- dan nilai expires_in dalam detik. Pada 400 invalid_grant, lihat Memecahkan masalah pertukaran yang gagal; penyebab paling umum di sisi GitHub Actions adalah format klaim sub yang tidak cocok (segmen akhirnya bervariasi antara event ref:..., environment:..., dan pull_request).
subject_prefix berupa repo:your-org/* saja akan mencocokkan setiap repositori di organisasi Anda, dan tanpa batasan ref juga akan mencocokkan eksekusi pull_request yang dipicu dari fork. Siapa pun yang dapat membuka pull request terhadap repositori yang cocok dapat memperoleh token Anthropic terfederasi.
Kunci blok match pada aturan ke cakupan tersempit yang sesuai dengan kasus penggunaan Anda:
subject_prefix: "repo:your-org/your-repo:*" agar repositori lain di organisasi tidak cocok."ref": "refs/heads/main" (atau branch rilis Anda) di bawah claims agar eksekusi pull-request dan feature branch tidak cocok."repository_owner": "your-org" di bawah claims sebagai pemeriksaan defense-in-depth terhadap kasus tepi penguraian sub.subject_prefix: "repo:your-org/your-repo:environment:production" dan batasi environment tersebut dengan reviewer wajib di GitHub.Was this page helpful?