Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel ist Teil einer Reihe zur Sicherstellung der Integrität und Authentizität von Containerimages und anderen Open Container Initiative (OCI)-Artefakten. Für einen vollständigen Überblick beginnen Sie mit der Übersicht, in der erklärt wird, warum das Signieren wichtig ist und die verschiedenen Szenarien skizziert werden.
Sie können dieses Handbuch in zwei Szenarien verwenden:
- Verwenden signierter Images: Überprüfen Sie Containerimages, die von anderen Teams oder Organisationen bereits mit Notation und vertrauenswürdiger Signatur signiert wurden.
- Überprüfen Ihrer eigenen Bilder: Wenn Sie Bilder selbst veröffentlichen, signieren Sie sie zuerst mit einem GitHub-Workflow oder der Notation-Befehlszeilenschnittstelle (CLI). Folgen Sie dann diesem Leitfaden, um die Signaturen zu überprüfen.
In diesem Artikel erfahren Sie, wie Sie:
- Konfigurieren sie einen GitHub-Workflow.
- Überprüfen Sie, ob Container-Abbilder mithilfe vertrauenswürdiger Signierung und GitHub Actions für Notation signiert wurden.
Voraussetzungen
- Eine Containerregistrierung , die signierte Images enthält.
- Ein GitHub-Repository zum Speichern Der Workflowdatei, der Vertrauensrichtlinie und des Vertrauensspeichers.
Authentifizieren von Azure auf GitHub
Gemäß der Verwendung von GitHub-Aktionen zum Herstellen einer Verbindung mit Azure müssen Sie sich zuerst mit Azure in Ihrem Workflow authentifizieren, indem Sie die Azure-Anmeldeaktion verwenden, bevor Sie Azure CLI- oder Azure PowerShell-Befehle ausführen. Die Azure-Anmeldeaktion unterstützt mehrere Authentifizierungsmethoden.
In diesem Leitfaden melden Sie sich mit OpenID Connect (OIDC) an, verwenden eine vom Benutzer zugewiesene verwaltete Identität, und führen Sie die Schritte unter Verwenden der Azure-Anmeldeaktion mit OpenID Connect aus.
Erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität. Überspringen Sie diesen Schritt, wenn Sie über eine vorhandene verwaltete Identität verfügen.
Rufen Sie die Client-ID Ihrer verwalteten Identität ab:
Weisen Sie der verwalteten Identität Rollen für den Zugriff auf die Azure-Containerregistrierung zu.
Weisen Sie für Registrierungen, die nicht mit attributbasierter Zugriffssteuerung (ABAC) aktiviert sind, die
AcrPullRolle zu:ACR_SCOPE=/subscriptions/<subscription-id>/resourceGroups/<acr-resource-group> az role assignment create --assignee $CLIENT_ID --scope $ACR_SCOPE --role "acrpush" --role "acrpull"Weisen Sie für ABAC-fähige Registrierungen die
Container Registry Repository ReaderRolle zu:
Konfigurieren Sie GitHub, um Ihrer Identität zu vertrauen. Folgen Sie der Konfiguration einer vom Benutzer zugewiesenen verwalteten Identität, um einem externen Identitätsanbieter zu vertrauen.
Erstellen Sie GitHub-Geheimnisse, indem Sie geheime Schlüssel für ein Repository erstellen.
Ordnen Sie die verwalteten Identitätswerte diesen geheimen Schlüsseln zu:
GitHub-Geheimnis Verwalteter Identitätswert AZURE_CLIENT_IDKunden-ID AZURE_SUBSCRIPTION_IDAbonnement-ID AZURE_TENANT_IDVerzeichnis-ID (Mandant)
Vorbereitungen für Vertrauensspeicher und Vertrauensrichtlinie
Die Überprüfung erfordert einen Notary Project-Vertrauensspeicher und eine Vertrauensstellungsrichtlinie, in Ihrem Repository eingecheckt.
Erstellen des Vertrauensspeichers
Der Vertrauensspeicher (.github/truststore/) enthält die Zertifikate der Zertifizierungsstelle und die TSA-Stammzertifikate (Time Stamp Authority), die für die Überprüfung erforderlich sind.
Laden Sie das Stammzertifikat der vertrauenswürdigen Signatur herunter , und speichern Sie es im ca Verzeichnis:
curl -o .github/truststore/x509/ca/mycerts/msft-identity-verification-root-cert-2020.crt \
"https://www.microsoft.com/pkiops/certs/Microsoft%20Enterprise%20Identity%20Verification%20Root%20Certificate%20Authority%202020.crt"
Laden Sie das Stammzertifikat für vertrauenswürdige Signatur-TSA herunter, und speichern Sie es im tsa Verzeichnis:
curl -o .github/truststore/x509/tsa/mytsacerts/msft-identity-verification-tsa-root-cert-2020.crt \
"http://www.microsoft.com/pkiops/certs/microsoft%20identity%20verification%20root%20certificate%20authority%202020.crt"
Erstellen der Vertrauensrichtlinie
Die Vertrauensrichtlinie (.github/trustpolicy/trustpolicy.json) definiert, welche Identitäten und CAs vertrauenswürdig sind.
Hier ist ein Beispiel für trustpolicy.json. Ersetzen Sie Repository-URIs, Namen des Vertrauensspeichers und den Betreff des vertrauenswürdigen Signaturzertifikats durch Ihre Werte.
{
"version": "1.0",
"trustPolicies": [
{
"name": "mypolicy",
"registryScopes": [ "myregistry.azurecr.io/myrepo1","myregistry.azurecr.io/myrepo2" ],
"signatureVerification": {
"level" : "strict"
},
"trustStores": [ "ca:mycerts", "tsa:mytsacerts" ],
"trustedIdentities": [
"x509.subject: C=US, ST=WA, L=Seattle, O=MyCompany.io, OU=Tools"
]
}
]
}
Bestätigen der Verzeichnisstruktur
Ihr Repository sollte wie in diesem Beispiel aussehen:
.github/
├── trustpolicy/
│ └── trustpolicy.json
└── truststore/
└── x509/
├── ca/
│ └── mycerts/
│ └── msft-identity-verification-root-cert-2020.crt
└── tsa/
└── mytsacerts/
└── msft-identity-verification-tsa-root-cert-2020.crt
Erstellen des GitHub-Aktionsworkflows
Wenn die Authentifizierungs- und Vertrauenskonfiguration bereit ist, erstellen Sie den Workflow:
Erstellen Sie ein
.github/workflowsVerzeichnis in Ihrem Repository, wenn es nicht vorhanden ist.Erstellen einer neuen Workflowdatei; beispiel:
verify-with-trusted-signing.yml.Kopieren Sie die folgende Workflowvorlage in Ihre Datei.
Erweitern, um die Workflowvorlage für die Überprüfung anzuzeigen.
name: notation-verify-with-trusted-signing on: push: env: ACR_LOGIN_SERVER: <registry-name>.azurecr.io # example: myRegistry.azurecr.io ACR_REPO_NAME: <repository-name> # example: myRepo IMAGE_TAG: <image-tag> # example: v1 #IMAGE_DIGEST: <image-digest> # example: sha256:xxx jobs: notation-verify: runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - name: Checkout uses: actions/checkout@v3 # Log in to Azure with your service principal secret # - name: Azure login # uses: Azure/login@v1 # with: # creds: ${{ secrets.AZURE_CREDENTIALS }} # If you're using OIDC and federated credentials, make sure to replace the preceding step with the following: - name: Azure login uses: Azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} # Log in to your container registry - name: ACR login run: | az acr login --name ${{ env.ACR_LOGIN_SERVER }} # Set up the Notation CLI - name: setup notation uses: notaryproject/notation-action/setup@v1.2.2 # Verify the OCI artifact, such as container images - name: verify OCI artifact uses: notaryproject/notation-action/verify@v1 with: target_artifact_reference: ${{ env.ACR_LOGIN_SERVER }}/${{ env.ACR_REPO_NAME }}:${{ env.IMAGE_TAG }} # Alternatively, use the image digest # target_artifact_reference: ${{ env.ACR_LOGIN_SERVER }}/${{ env.ACR_REPO_NAME }}@${{ env.IMAGE_DIGEST }} trust_policy: .github/trustpolicy/trustpolicy.json trust_store: .github/truststoreAktualisieren Sie die Umgebungsvariablen mit Ihrem eigenen Registry, Repository und Image-Tag/Digest. Speichern und committen Sie die Datei.
Auslösen des GitHub-Aktionsworkflows
Ein Push löst den Beispielworkflow aus. Um den Auftrag zu starten, übernehmen Sie die Workflowdatei in Ihr Repository.
Sie können die Workflowprotokolle anzeigen, um zu bestätigen, dass der Auftrag erfolgreich abgeschlossen wurde. Überprüfen Sie beispielsweise, ob die Vertrauensrichtlinie importiert wird, Zertifikate aus dem Vertrauensspeicher geladen werden und die Signatur überprüft wird.