Einschränkungen, wenn Dependabot Ereignisse auslöst
Von Dependabot können GitHub Actions-Workflows in den zugehörigen Pull Requests und Kommentaren ausgelöst werden. Bestimmte Ereignisse werden jedoch anders behandelt.
Für Workflows, die über Dependabot (github.actor == 'dependabot[bot]'
) mithilfe der Ereignisse pull_request
, pull_request_review
, pull_request_review_comment
, push
, create
, deployment
und deployment_status
initiiert werden, gelten diese Einschränkungen:
GITHUB_TOKEN
verfügt standardmäßig nur über Leseberechtigungen.- Geheimnisse werden aus Dependabot-Geheimnissen aufgefüllt. GitHub Actions-Geheimnisse sind nicht verfügbar.
Für Workflows, die von Dependabot (github.actor == 'dependabot[bot]'
) mithilfe des Ereignisses pull_request_target
initiiert werden, ist das GITHUB_TOKEN
schreibgeschützt, und Geheimnisse sind nicht verfügbar, wenn der Basisverweis des Pull Requests über Dependabot (github.event.pull_request.user.login == 'dependabot[bot]'
) erstellt wurde.
Diese Einschränkungen gelten auch dann, wenn der Workflow von einem anderen Akteur erneut ausgeführt wird.
Weitere Informationen findest du unter Aufrechterhalten der Sicherheit von GitHub Actions und GitHub-Workflows: Verhindern von pwn-Anforderungen.
Problembehandlung von Fehlern, wenn Dependabot bestehende Workflows auslöst
Nachdem du Dependabot für GitHub.com eingerichtet hast, können Fehler angezeigt werden, wenn bestehende Workflows durch Dependabot-Ereignisse ausgelöst werden.
Standardmäßig werden Ausführungen von GitHub Actions-Workflows, die von Dependabot aufgrund von push
-, pull_request
-, pull_request_review
- oder pull_request_review_comment
-Ereignissen ausgelöst wurden, so behandelt, als wären sie in einem Repositoryfork geöffnet worden. Im Gegensatz zu Workflows, die von anderen Akteuren ausgelöst werden, erhalten sie ein schreibgeschütztes GitHub-Token (GITHUB_TOKEN
) und verfügen nicht über Zugriff auf Geheimnisse, die normalerweise verfügbar sind. Dies führt dazu, dass alle Workflows, die versuchen, in das Repository zu schreiben, fehlschlagen, wenn sie von Dependabot ausgelöst wurden.
Es gibt drei Möglichkeiten, dieses Problem zu beheben:
- Du kannst deine Workflows mit einem Ausdruck wie
if: github.actor != 'dependabot[bot]'
so aktualisieren, dass sie nicht mehr durch Dependabot ausgelöst werden. Weitere Informationen finden Sie unter Auswerten von Ausdrücken in Workflows und Aktionen. - Du kannst deine Workflows so ändern, dass sie einen zweistufigen Prozess mit
pull_request_target
verwenden, das nicht diesen Einschränkungen unterliegt. Weitere Informationen finden Sie unter Problembehandlung von Dependabot auf GitHub-Aktionen. - Du kannst Workflows bereitstellen, die durch den Dependabot-Zugriff auf Geheimnisse ausgelöst werden, und es dem Term
permissions
erlauben, den Standardbereich vonGITHUB_TOKEN
zu erhöhen.
Einige Hinweise zur Problembehandlung findest du in diesem Artikel. Du kannst dir ebenso Workflowsyntax für GitHub Actions ansehen.
Zugreifen auf Geheimnisse
Wenn von einem Dependabot-Ereignis ein Workflow ausgelöst wird, sind die einzigen für den Workflow verfügbaren Geheimnisse Dependabot-Geheimnisse. GitHub Actions-Geheimnisse sind nicht verfügbar. Daher musst du alle Geheimnisse, die von einem Workflow verwendet werden, der von Dependabot-Ereignissen ausgelöst wird, als Dependabot-Geheimnisse speichern. Weitere Informationen finden Sie unter Konfigurieren des Zugriffs auf private Registrierungen für Dependabot.
Dependabot-Geheimnisse werden dem secrets
-Kontext hinzugefügt und mit exakt derselben Syntax wie Geheimnisse für GitHub Actions referenziert. Weitere Informationen finden Sie unter Verwenden von Geheimnissen in GitHub-Aktionen.
Wenn du über einen Workflow verfügst, der von Dependabot und auch von anderen Akteuren ausgelöst wird, besteht die einfachste Lösung darin, das Token mit den erforderlichen Berechtigungen in einer Aktion und in einem Dependabot-Geheimnis mit identischen Namen zu speichern. Anschließend kann der Workflow einen einzelnen Aufruf dieser Geheimnisse enthalten. Wenn das Geheimnis für Dependabot einen anderen Namen aufweist, verwendest du Bedingungen, um die richtigen Geheimnisse für unterschiedliche Akteure anzugeben.
Beispiele für die Verwendung von Bedingungen findest du unter Automatisieren von Dependabot mit GitHub Actions.
Für den mittels Benutzernamen und Kennwort erfolgenden Zugriff auf eine private Containerregistrierung in AWS muss ein Workflow ein Geheimnis für username
und password
enthalten.
Wenn von Dependabot in diesem Beispiel der Workflow ausgelöst wird, werden die Dependabot-Geheimnisse mit den Namen READONLY_AWS_ACCESS_KEY_ID
und READONLY_AWS_ACCESS_KEY
verwendet. Wenn ein anderer Akteur den Workflow auslöst, werden die Aktionsgeheimnisse mit diesen Namen verwendet.
name: CI on: pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Login to private container registry for dependencies uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c with: registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }} password: ${{ secrets.READONLY_AWS_ACCESS_KEY }} - name: Build the Docker image run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
name: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Login to private container registry for dependencies
uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
with:
registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }}
password: ${{ secrets.READONLY_AWS_ACCESS_KEY }}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
Ändern von GITHUB_TOKEN
-Berechtigungen
Standardmäßig erhalten GitHub Actions-Workflows, die von Dependabot ausgelöst werden, ein GITHUB_TOKEN
mit Schreibschutzberechtigungen. Du kannst den Schlüssel permissions
in deinem Workflow verwenden, um den Zugriff für das Token zu erhöhen:
name: CI on: pull_request # Set the access for individual scopes, or use permissions: write-all permissions: pull-requests: write issues: write repository-projects: write ... jobs: ...
name: CI
on: pull_request
# Set the access for individual scopes, or use permissions: write-all
permissions:
pull-requests: write
issues: write
repository-projects: write
...
jobs:
...
Weitere Informationen finden Sie unter Automatische Tokenauthentifizierung.
Manuelles erneutes Ausführen eines Workflows
Wenn du einen Dependabot-Workflow manuell erneut ausführst, wird er mit den gleichen Berechtigungen ausgeführt wie zuvor, auch wenn der Benutzer, von dem die erneute Ausführung initiiert wurde, unterschiedliche Berechtigungen aufweist. Weitere Informationen finden Sie unter Erneutes Ausführen von Workflows und Jobs.