Blog

So geht's: Bereitstellen von Terraform auf AWS mit GitHub-Aktionen, die mit OpenID Connect authentifiziert sind

Tibor Hercz

Tibor Hercz

Aktualisiert Oktober 15, 2025
4 Minuten

In der Vergangenheit war es sehr üblich, AWS-Anmeldeinformationen (Zugriffstoken und Geheimnis) in Ihrer GitHub-Aktionspipeline zu verwenden. Dies stellt ein Sicherheitsrisiko dar, da es sich bei diesen AWS-Anmeldeinformationen in der Regel um langlebige Anmeldeinformationen mit vielen Berechtigungen handelt. Wenn diese Anmeldeinformationen nach außen dringen oder missbraucht werden, kann der Schaden enorm sein.

In meinem vorherigen Blog habe ich über das Lecken von Zugangsdaten und die Ereignisse nach dem Leck geschrieben, lesen Sie hier mehr darüber: Was passiert, wenn Sie AWS-Anmeldeinformationen preisgeben und wie AWS den Schaden minimiert

In diesem Blog zeige ich Ihnen, wie Sie die OpenID Connect-Rolle einrichten, die Berechtigungen festlegen, den Workflow für GitHub-Aktionen erstellen und den Terraform-Code in AWS bereitstellen.

OpenID Verbinden

OpenID Connect ist eine Identitätsschicht, die auf dem OAuth 2.0 Protokoll aufbaut. Sie ermöglicht es Anwendungen von Drittanbietern, die Identität von Endbenutzern oder in unserem Fall einer AWS-Rolle zu überprüfen.

AWS-Rolle

Innerhalb von AWS müssen Sie einen Identitätsprovider für GitHub und eine Rolle für Webidentität oder OIDC erstellen, die mit dem erstellten Identitätsprovider verbunden ist.

Erstellen Sie den GitHub Identitätsanbieter

Navigieren Sie zu IAM > Identitätsanbieter und erstellen Sie einen neuen Anbieter. Wählen Sie OpenID Connect und fügen Sie Folgendes hinzu:

  • Anbieter-URL: https://token.actions.githubusercontent.com
  • Publikum: sts.amazonaws.com

Erstellen Sie die AWS-Rolle

Navigieren Sie zu IAM > Rollen und erstellen Sie eine neue Rolle. Wählen Sie und wählen Sie den soeben erstellten Identitätsanbieter. Fügen Sie die Berechtigungen hinzu, die die Rolle haben soll. In diesem Beispiel verwenden wir die von AWS verwaltete Berechtigung ReadOnlyAccess.

Nachdem die Rolle erstellt wurde, fügen wir das GitHub-Repositorium zu den Vertrauensbeziehungen hinzu. Nach der Bearbeitung der vertrauenswürdigen Entitäten sollte JSON in etwa so aussehen:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::12345678:oidc-provider/token.actions.githubusercontent.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
                },
                "StringLike": {
                    "token.actions.githubusercontent.com:sub": "repo:tiborhercz/terraform-openid-connect-example:*"
                }
            }
        }
    ]
}

Wir müssen den Teil sub repo manuell hinzufügen, der der Rolle mitteilt, welche Repositories diese Rolle übernehmen dürfen. In diesem Beispiel erlauben wir dem Projektarchiv tiborhercz/terraform-openid-connect-example, die Rolle zu übernehmen, und wir haben den Platzhalter * hinzugefügt, um jeden Zweig zuzulassen.

"StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:tiborhercz/terraform-openid-connect-example:*"
}

Dies sollte ausreichen, um die erstellte Rolle aus unserer GitHub-Aktion zu übernehmen und den Terraform-Code bei AWS bereitzustellen.

GitHub Aktion

Für die GitHub-Aktion benötigen wir ein paar Dinge:

Zuweisung der richtigen Berechtigungen für den Auftrag

Damit die OpenID Connect-Integration funktioniert, müssen wir dem Auftrag die folgenden Berechtigungen hinzufügen:

permissions:
  id-token: write # This is required for requesting the JWT
  contents: read  # This is required for actions/checkout

Fügen Sie die Aktion configure-aws-credentials hinzu

Fügen Sie im GitHub-Job die Aktion configure-aws-credentials hinzu und konfigurieren Sie die role-to-assume und die AWS-Region.

- name: Configure aws credentials
  uses: aws-actions/configure-aws-credentials@v2
  with:
    role-to-assume: arn:aws:iam::12345678:role/github_action_readonly
    aws-region: eu-west-1

Fügen Sie die Terraform-Schritte hinzu

Fügen Sie die Schritte zum Einrichten, Initiieren, Formatieren und Bereitstellen des Terraform-Codes zu Ihrer GitHub-Aktion hinzu.

- name: Setup Terraform
  uses: hashicorp/setup-terraform@v2
  with:
    terraform_version: 1.4.6

- name: Terraform Init
  run: terraform init

- name: Terraform Format
  run: terraform fmt -check

- name: Terraform Plan
  run: terraform plan -input=false

  # On push to "main", deploy the Terraform infrastructure
- name: Terraform Apply
  if: github.ref == 'refs/heads/main' && github.event_name == 'push'
  run: terraform apply -auto-approve -input=false

GitHub Aktion abschließen

Hier finden Sie die vollständige GitHub-Aktion zur Bereitstellung des Terraform-Codes in AWS mit OpenID Connect:

Dateiname: .github/workflows/terraform.yml

name: 'Terraform'

on:
  push:
    branches: [ "main" ]
  pull_request:

permissions:
  id-token: write
  contents: read

jobs:
  terraform:
    name: 'Terraform'
    runs-on: ubuntu-latest
    environment: production
    defaults:
      run:
        shell: bash

    steps:
    - name: Configure aws credentials
      uses: aws-actions/configure-aws-credentials@v2
      with:
        role-to-assume: arn:aws:iam::12345678:role/github_action_readonly
        aws-region: eu-west-1

    - name: Checkout
      uses: actions/checkout@v3

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v2
      with:
        terraform_version: 1.4.6

    - name: Terraform Init
      run: terraform init

    - name: Terraform Format
      run: terraform fmt -check

    - name: Terraform Plan
      run: terraform plan -input=false

      # On push to "main", deploy the Terraform infrastructure
    - name: Terraform Apply
      if: github.ref == 'refs/heads/main' && github.event_name == 'push'
      run: terraform apply -auto-approve -input=false

Fazit

Durch die Verwendung von OpenID Connect für die Authentifizierung bei AWS müssen Sie keine langlebigen AWS-Anmeldeinformationen mehr verwenden, so dass das Risiko, dass die Anmeldeinformationen durchsickern, entfällt.

Das vollständige GitHub-Beispiel finden Sie hier: GitHub - tiborhercz/terraform-openid-connect

Verfasst von

Tibor Hercz

Tibor is a Cloud Consultant specialized in AWS with a strong background in Software engineering and has a passion for Compute, Networking and Security. His goal is to create simple Cloud Solutions that increases the efficiency and overall happiness of the teams and business. Sharing knowledge is important to him, so you will see him blogging and sharing knowledge about solutions he has built.

Contact

Let’s discuss how we can support your journey.