Überblick
OpenID Connect (OIDC) ermöglicht es Ihren GitHub Actions Workflows, sich bei Octopus Deploy zu authentifizieren, um Pakete zu pushen, Releases zu erstellen oder Deployments auszulösen, ohne Octopus Deploy-Passwörter oder API-Schlüssel als langlebige GitHub Geheimnisse zu speichern.
Dieses Handbuch gibt einen Überblick darüber, wie Octopus Deploy so konfiguriert wird, dass OIDC von GitHub als Verbundidentität akzeptiert wird und enthält ein Beispiel für einen Workflow der Aktion octopusdeploy/login, die Token zur Authentifizierung bei Ihrer Octopus Deploy-Instanz verwendet.
Voraussetzungen
-
Informationen zu den grundlegenden Konzepten, nach denen GitHub OpenID Connect (OIDC) sowie die Architektur und Vorteile des Protokolls verwendet, findest du unter OpenID Connect.
-
Bevor du fortfährst, musst du deine Sicherheitsstrategie planen, um sicherzustellen, dass Zugriffs-Token nur auf vorhersehbare Weise zugewiesen werden. Zur Steuerung, wie dein Cloud-Anbieter Zugriffs-Token ausgibt, musst du mindestens eine Bedingung definieren, damit nicht vertrauenswürdige Repositorys keine Zugriffs-Token für deine Cloud-Ressourcen anfordern können. Weitere Informationen finden Sie unter OpenID Connect.
Hinzufügen des Identitätsanbieters zu Octopus Deploy
Um OIDC mit Octopus Deploy zu verwenden, richten Sie zunächst eine Vertrauensstellung zwischen GitHub Actions und Ihrer Octopus Deploy-Instanz ein. Weitere Informationen zu diesem Prozess finden Sie unter Verwenden von OpenID Connect mit der Octopus-API in der Octopus Deploy-Dokumentation.
- Melden Sie sich bei Ihrer Octopus Deploy-Instanz an.
- Erstellen oder öffnen Sie das Dienstkonto, das über die Tokenanforderung Zugriff erhalten wird.
- Konfigurieren Sie eine neue OIDC-Identität und definieren Sie das relevante Subjekt, gegen das die GitHub Actions Workflow-Token-Anforderung validiert wird.
Aktualisieren deines GitHub Actions-Workflows
Um deine Workflows für OIDC zu aktualisieren, musst du zwei Änderungen an deinen YAML-Daten vornehmen:
- Füge Berechtigungseinstellungen für das Token hinzu.
- Tausche das OIDC-Token (JWT) mithilfe der Aktion
OctopusDeploy/logingegen ein Cloudzugriffstoken aus.
Hinweis
Wenn Umgebungen in Workflows oder in OIDC-Richtlinien verwendet werden, wird empfohlen, der Umgebung Schutzregeln für zusätzliche Sicherheit hinzuzufügen. Du kannst z. B. Bereitstellungsregeln für eine Umgebung konfigurieren, um einzuschränken, welche Verzweigungen und Tags in der Umgebung oder in geheimen Umgebungsschlüsseln bereitgestellt werden können. Weitere Informationen finden Sie unter Verwalten von Umgebungen für die Bereitstellung.
Hinzufügen von Berechtigungseinstellungen
Für die Job- oder Workflow-Ausführung ist eine permissions-Einstellung mit id-token: write erforderlich, damit der OIDC-Anbieter von GitHub für jede Ausführung einen JSON-Web-Token erstellen kann.
Hinweis
Wenn du id-token: write in den Berechtigungen des Workflows festlegst, erhält der Workflow keine Berechtigung zum Ändern oder Schreiben in Ressourcen. Stattdessen kann der Workflow ausschließlich ein OIDC-Token für eine Aktion oder einen Schritt anfordern (abrufen) und verwenden (festlegen). Dieses Token wird anschließend zur Authentifizierung bei externen Diensten mithilfe eines kurzlebigen Zugriffstokens verwendet.
Ausführliche Informationen zu erforderlichen Berechtigungen, Konfigurationsbeispielen und erweiterten Szenarios findest du unter OpenID Connect-Referenz.
Anfordern des Zugriffstokens
Die OctopusDeploy/login Aktion empfängt ein JWT vom GitHub OIDC-Anbieter und fordert dann ein Zugriffstoken von Ihrer Octopus-Server-Instanz an. Weitere Informationen findest du in der OctopusDeploy/login-Dokumentation.
Im folgenden Beispiel wird ein OIDC-ID-Token mit Ihrer Octopus Deploy-Instanz ausgetauscht, um ein Zugriffstoken zu erhalten, das dann für den Zugriff auf Ihre Octopus Deploy-Ressourcen verwendet werden kann. Achten Sie darauf, die Details bei server und service_account_id passend zu Ihrem Szenario zu ersetzen.
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.
# Sie werden von einem Drittanbieter bereitgestellt und unterliegen
# separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support
# Onlinedokumentation.
jobs:
create_release_in_octopus:
runs-on: ubuntu-latest
name: Create a release in Octopus
permissions:
# You might need to add other permissions here like `contents: read` depending on what else your job needs to do
id-token: write # This is required to obtain an ID token from GitHub Actions for the job
steps:
- name: Login to Octopus
uses: OctopusDeploy/login@34b6dcc1e86fa373c14e6a28c5507d221e4de629 #v1.0.2
with:
server: https://my.octopus.app
service_account_id: 5be4ac10-2679-4041-a8b0-7b05b445e19e
- name: Create a release in Octopus
uses: OctopusDeploy/create-release-action@fe13cc69c1c037cb7bb085981b152f5e35257e1f #v3.2.2
with:
space: Default
project: My Octopus Project
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.
# Sie werden von einem Drittanbieter bereitgestellt und unterliegen
# separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support
# Onlinedokumentation.
jobs:
create_release_in_octopus:
runs-on: ubuntu-latest
name: Create a release in Octopus
permissions:
# You might need to add other permissions here like `contents: read` depending on what else your job needs to do
id-token: write # This is required to obtain an ID token from GitHub Actions for the job
steps:
- name: Login to Octopus
uses: OctopusDeploy/login@34b6dcc1e86fa373c14e6a28c5507d221e4de629 #v1.0.2
with:
server: https://my.octopus.app
service_account_id: 5be4ac10-2679-4041-a8b0-7b05b445e19e
- name: Create a release in Octopus
uses: OctopusDeploy/create-release-action@fe13cc69c1c037cb7bb085981b152f5e35257e1f #v3.2.2
with:
space: Default
project: My Octopus Project