Auf Container-Registrys zugreifen

Von IBM Cloud® Code Engine verwendete Images werden in der Regel in einer Registry gespeichert, auf die entweder öffentlich zugegriffen werden kann (öffentliche Registry) oder die mit eingeschränktem Zugriff für eine kleine Gruppe von Benutzern eingerichtet wird (private Registry).

Eine Container-Registry oder Registry ist ein Service, in dem Container-Images gespeichert werden. IBM Cloud Container Registry und Docker Hub sind beispielsweise Container-Registrys. Eine Container-Registry kann öffentlich oder privat sein. Bei einer öffentlichen Container-Registry sind keine Berechtigungsnachweise für den Zugriff erforderlich. Im Gegensatz dazu erfordert der Zugriff auf eine private Registry Berechtigungsnachweise.

Code Engine erfordert Zugriff auf Container-Registrys, um die folgenden Aktionen auszuführen:

  • Zum Abrufen (oder "Extrahieren") eines Container-Image zur Ausführung einer App oder eines Jobs
  • So speichern Sie ein neu erstelltes Container-Image als Ausgabe eines Image-Builds
  • Speichern und Abrufen lokaler Dateien, wenn ein Build aus einer lokalen Quelle ausgeführt wird

Code Engine verarbeitet viele der zugrunde liegenden Details der Interaktionen zwischen System und Registry.

Zum Extrahieren von Images aus einer Registry wird von Code Engine eine besondere Art von geheimen Kubernetes-Schlüssel verwendet, der den Namen imagePullSecret aufweist. In diesem geheimen Schlüssel für Image-Pull-Operationen werden die Berechtigungsnachweise für den Zugriff auf eine Container-Registry gespeichert. Wenn Sie den Zugriff auf eine Container-Registry mit Code Engine hinzufügen, um Images zu ziehen, erstellen Sie ein Image Pull Secret. Weitere Informationen über Image Pull Secrets finden Sie in der Dokumentation Kubernetes.

Typen von Image-Registrys

Images werden typischerweise in einer Registry gespeichert, die entweder öffentlich zugänglich ist (öffentliche Registry) oder mit eingeschränktem Zugriff für eine kleine Benutzergruppen eingerichtet ist (private Registry).

Öffentliche Registrys, wie z. B. öffentlicher Docker Hub, können verwendet werden, um mit Docker und Code Engine gestartet zu werden, um Ihre erste Anwendung oder Ihren ersten Job zu erstellen. Wenn es jedoch um Unternehmensworkloads geht, verwenden Sie eine private Registry wie die in IBM Cloud Container Registry bereitgestellte, um Ihre Images vor der Verwendung durch nicht berechtigte Benutzer zu schützen. Verwenden Sie bei privaten Registern Registrierungsgeheimnisse, um sicherzustellen, dass die Anmeldedaten für den Zugriff auf das private Register verfügbar sind.

Öffentliche und private Bildregistrierungsarten
Registry Beschreibung
IBM Cloud Container Registry

Mit dieser Art von Registrierung können Sie Ihr eigenes gesichertes Bildarchiv in IBM Cloud Container Registry einrichten, in dem Sie Bilder sicher speichern und mit anderen Benutzern austauschen können.
Mit IBM Cloud Container Registry können Sie

  • den Zugriff auf Bilder in Ihrem Konto verwalten.
  • Verwenden Sie die von IBM bereitgestellten Bilder und Beispielanwendungen, wie IBM Liberty, als Basisbild und fügen Sie Ihren eigenen Anwendungscode hinzu.
Jede andere private Registry

Sie können jede vorhandene private Registry durch Hinzufügen eines Zugriffs mit Code Engine verbinden. Wenn Sie den Zugriff sicher hinzufügen, werden die Registry-URL und die Berechtigungsnachweise in einem geheimen Kubernetes-Schlüssel gespeichert.
Mit privaten Registraturen können Sie:

  • Vorhandene private Registries unabhängig von ihrer Quelle nutzen ( Docker Hub, organisationsinterne Registries oder andere private Cloud-Registries).
Öffentliche Docker Hub-Registry

Verwenden Sie diese Art von Registry, um bestehende öffentliche Images von Docker Hub direkt in Ihre Code Engine Anwendungen oder Jobs zu ziehen.

Wichtig:

  • Dieser Registrierungstyp entspricht möglicherweise nicht den Sicherheitsanforderungen Ihres Unternehmens, wie z. B. Zugriffsverwaltung, Schwachstellen-Scans oder App-Datenschutz.
  • Wenn Sie ein Image von Docker Hub abrufen, um es mit Apps oder Aufträgen in Code Engine zu verwenden, beachten Sie die Docker Tarifbeschränkungen für Nutzer des kostenlosen Tarifs (ohne Authentifizierung). Wenn Sie eine 429 Fehlermeldung erhalten, die darauf hinweist, dass Sie Ihr Limit für die Ziehungsrate erreicht haben, kann es zu Einschränkungen kommen. Um die Tarifgrenzen zu erhöhen, können Sie Ihr Konto auf ein Docker Pro oder Team Abonnement erweitern.

Mit dem öffentlichen Docker Hub können Sie das:

  • Auf diese Bilder kann direkt verwiesen werden, wenn Sie eine Anwendung oder einen Auftrag erstellen, ohne dass eine zusätzliche Einrichtung erforderlich ist.
  • Enthält verschiedene Open-Source-Anwendungen.

Typen von geheimen Registry-Schlüsseln

Um auf Bilder in einer Registrierung zuzugreifen, verwendet Code Engine eine der folgenden Arten von Registrierungsgeheimnissen.

  • Code Engine verwaltetes Geheimnis - Wenn Ihre Registrierung einen IBM Cloud Container Registry Namensraum verwendet, der sich in Ihrem Konto befindet, können Sie Code Engine das Registrierungsgeheimnis für Sie erstellen und verwalten lassen. In der Konsole wird dieser automatisch erstellte geheime Registry-Schlüssel als Code Engine managed secret bezeichnet. In der Befehlszeilenschnittstelle hat der Name eines automatisch erstellten Registrierungsgeheimnisses das Format ce-auto-icr-private-<region>.
  • Vom Benutzer verwalteter geheimer Schlüssel – Dies ist ein geheimer Schlüssel, den Sie erstellen und verwalten. Sie können mit einem API-Schlüssel von Ihrem Konto aus auf Images zugreifen oder ein Zugriffstoken für die Container-Registry Ihrer Auswahl verwenden; z. B. Docker Hub. In diesem Fall ist das Registrierungsgeheimnis, das in der Konsole aufgeführt wird, der Name Ihres Registrierungsgeheimnisses.

Wenn Ihre Registrierung öffentlich ist und keine Anmeldeinformationen erfordert, z. B. Code Engine Beispielbilder in icr.io/codeengine oder Docker Hub public, dann benötigen Sie kein Registrierungsgeheimnis. In diesem Fall lautet das Registrierungsgeheimnis, das in der Konsole aufgeführt ist, None.

Berechtigungen für Image-Registrys einrichten

Wenn Ihre Registry öffentlich ist, müssen Sie keine Berechtigungen zum Extrahieren von Images einrichten. Beachten Sie, dass das Extrahieren von Images aus einer öffentlichen Registry während der ersten Schritte mit Code Engine akzeptabel ist. Verwenden Sie eine private Registry, wenn es um Ihre Unternehmensworkloads geht.

Welche Behörden brauche ich?

Beachten Sie die folgenden Fälle, um festzustellen, welche Berechtigungen Sie benötigen:

  • Wenn Sie Apps bereitstellen oder Jobs ausführen, kann Code Engine automatisch auf Images in Ihrem eigenen Konto zugreifen.

  • Wenn Sie auf Bilder aus einem gemeinsam genutzten Konto, anderen IBM Cloud-Accounts oder einem privaten Docker-Konto zugreifen möchten, müssen Sie den entsprechenden Zugriffsberechtigungen zugeordnet sein.

  • Wenn Sie Anwendungen bereitstellen oder Aufträge ausführen und Ihre Registrierung einen IBM Cloud Container Registry Namespace verwendet, der sich in Ihrem Konto befindet, können Sie Code Engine automatisch das Registrierungsgeheimnis für Sie erstellen und verwalten lassen, sofern Ihr Konto über die in der folgenden Tabelle beschriebenen erforderlichen Berechtigungen verfügt.

    • In der Konsole wird dieser geheime Registry-Schlüssel als Code Engine managed secret bezeichnet. Diese Option ist verfügbar, wenn Sie die Workflows Image konfigurieren oder Builddetails angeben für die Erstellung eines Image mit Code Engine verwenden.
    • In der CLI hat dieses Registrierungsgeheimnis das Format ce-auto-icr-private-<region>. Dieser geheime Registry-Schlüssel wird automatisch erstellt, wenn Sie die Option --build-source angeben, aber nicht die Option --registry-secret mit den Befehlen app create, app update, job create oder job update.
Zugriffsberechtigungen für die Bildregistrierung
Aktion IAM-Servicezugriff Beschreibung
Images mit Pull-Operation extrahieren Reader Servicezugriff Wenn Sie ein Image als Anwendung oder Job implementieren, müssen Sie das Image aus einer Registry extrahieren Zum Extrahieren von Images benötigen Sie Lesezugriff. Wenn die Registry öffentlich ist, haben Sie bereits Lesezugriff auf die Images. Wenn die Registrierung privat ist, ist ein Registrierungsgeheimnis erforderlich.
Images mit Push-Operation übertragen Reader- und Writer-Servicezugriff Wenn Sie Quellcode erstellen, müssen Sie das Image mit Push-Operation in eine Registry übertragen. Um Bilder in die Registrierung zu verschieben, müssen Sie Lese- und Schreibrechte haben und über ein Registrierungsgeheimnis verfügen.
Namensbereich erstellen Reader-, Writer- und Manager-Servicezugriff Diese Aktion wird nur für IBM Cloud Container Registryunterstützt.
Von Code Engine automatisch erstellter geheimer Registry-Schlüssel Administrator-Plattformzugriff
Reader, Writer- und Manager-Service
Diese Aktion wird nur für IBM Cloud Container Registryunterstützt.

Kann ich eine Service-ID verwenden?

Ja, Sie können eine Service-ID erstellen und diesen Berechtigungen zuweisen. Beachten Sie, dass Service-IDs auch automatisch von der Code Engine-Benutzerschnittstelle erstellt werden, wenn Sie automatisch den Zugriff auf Ihre IBM Cloud Container Registry erstellen. Löschen Sie diese Service-ID NICHT, da Sie den Zugriff auf die Images in der Registry verlieren.

Kann ich auf Bilder in einer anderen Registry zugreifen?

Ja! So funktioniert es.

Kann ich den Pull-Zugriff auf ein bestimmtes regionales Register oder sogar einen einzelnen Namensraum beschränken?

Ja, Sie können die vorhandene IAM-Richtlinie der Service-ID bearbeiten, die die Zugriffsrolle den Leser -Service auf diese regionale Registry oder eine Registry-Ressource, wie z. B. einen Namespace, beschränkt. Bevor Sie Registry-IAM-Richtlinien anpassen können, müssen Sie IBM Cloud IAM-Richtlinien für IBM Cloud Container Registry aktivieren.

Auf Images von einem öffentlichen Konto zugreifen

Wenn Ihr Image in einem öffentlichen Repository, wie z. B. einem öffentlichen Docker Hub, gespeichert ist, können Sie das Image einfach direkt referenzieren, wenn Sie Ihre Anwendung implementieren oder Ihren Job ausführen. Beachten Sie, dass das Speichern von Images in einer öffentlichen Registry zwar für den Einstieg in Anwendungen und Jobs in Ordnung ist, Sie Ihre Unternehmens-Images jedoch in einer privaten Registry speichern sollten.

Zugriff auf Bilder auf Ihrem eigenen Konto von der Konsole aus

Wenn Sie auf Code Engine von einem Konto zugreifen, dessen Eigner oder Verwalter Sie sind, dann kann Code Engine automatisch Images in einen {{site.data.registryfull_notm}} Namensbereich in Ihrem Konto mit Push-Operation übertragen und mit Pull-Operation extrahieren, wenn Sie Anwendungen, Jobs oder Builds über die Konsole erstellen oder aktualisieren. Code Engine kann sogar einen Namensbereich für Sie erstellen, wenn Sie ein Image mit Push-Operation übertragen. Vollständige Informationen finden Sie in den folgenden Abschnitten:

Zugriff auf Images von Ihrem Konto mit einem API-Schlüssel

Wenn Sie mit der CLI auf Code Engine zugreifen, müssen Sie zuerst einen IAM-API-Schlüssel erstellen und dann den IAM-API-Schlüssel als Registrierungszugriff in Code Engine speichern.

Mit den folgenden Schritten wird ein API-Schlüssel erstellt, in dem die Berechtigungsnachweise einer Benutzer-ID gespeichert werden. Anstatt eine Benutzer-ID zu verwenden, können Sie einen API-Schlüssel für eine Service-ID erstellen, die über eine IBM Cloud IAM-Service-Zugriffsrichtlinie für IBM Cloud Container Registry verfügt. Wenn Sie sich für die Authentifizierung einer Benutzer-ID entscheiden, stellen Sie sicher, dass es sich bei dem Benutzer um eine Funktions-ID handelt, oder planen Sie für Fälle, in denen der Benutzer ausscheidet, damit Code Engine weiterhin auf die Registry zugreifen kann.

API-Schlüssel in Konsole erstellen

Gehen Sie wie folgt vor, um einen IBM Cloud IAM-API-Schlüssel in der Konsole zu erstellen.

  1. Starten Sie die Übersicht Zugriff (IAM).

  2. Wählen Sie API-Schlüssel aus.

  3. Klicken Sie auf Erstellen eines IBM Cloud-API-Schlüssels.

  4. Geben Sie einen Namen und eine optionale Beschreibung für den API-Schlüssel ein und klicken Sie auf Erstellen.

  5. Kopieren Sie den API-Schlüssel oder klicken Sie auf die Schaltfläche für den Download, um den Schlüssel zu speichern.

    Der API-Schlüssel wird nicht erneut angezeigt; stellen Sie deswegen sicher, dass Sie ihn notiert haben und bewahren Sie ihn an einem sicheren Ort auf.

Jetzt, da Sie Ihren API-Schlüssel erstellt haben, speichern Sie ihn als Registry-Zugriff.

API-Schlüssel in Befehlszeilenschnittstelle erstellen

Führen Sie zum Erstellen eines IBM Cloud IAM-API-Schlüssels in der Befehlszeilenschnittstelle den Befehl iam api-key-create aus. Um beispielsweise einen API-Schlüssel mit dem Namen cliapikey und der Beschreibung My CLI API key zu erstellen und ihn in einer Datei mit dem Namen key_file zu speichern, führen Sie den folgenden Befehl aus:

ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file

Wenn Sie Ihren Schlüssel nicht in einer Datei speichern möchten, müssen Sie den API-Schlüssel notieren, der angezeigt wird, wenn Sie ihn erstellen. Sie können ihn später nicht mehr abrufen.

Jetzt, da Sie Ihren API-Schlüssel erstellt haben, speichern Sie ihn als Registry-Zugriff.

Auf Images in einem gemeinsam genutzten Konto zugreifen

Für den Zugriff auf Images von IBM Cloud Container Registry in einem gemeinsam genutzten Konto muss Ihnen die korrekte Berechtigung zugewiesen werden.

Wenn Sie planen, Apps bereitzustellen und Jobs über das gemeinsam genutzte Konto auszuführen, kann Code Engine beim Implementieren Ihrer App oder beim Erstellen Ihres Jobs Images mit der Pull- oder Push-Operation für Sie extrahieren oder übertragen.

Wenn Sie Images aus dem gemeinsam genutzten Konto auf Ihr eigenes Konto mit Pull-Operation extrahieren möchten, müssen Sie berechtigt sein, auf IBM Cloud Container Registry zuzugreifen.

Auf Images in einem anderen Konto zugreifen

Sie können Benutzern oder einer Service-ID IBM CloudIAM-Zugriffsrichtlinien zuordnen, um die Berechtigungen auf bestimmte Namensbereiche oder Aktionen (zum Beispiel Push- oder Pull-Aktionen) des Registry-Image zu beschränken. Danach erstellen Sie einen API-Schlüssel und speichern diese Berechtigungsnachweise für die Registry in Code Engine.

Um beispielsweise auf Images in anderen IBM Cloud Konten zuzugreifen, erstellen Sie einen API-Schlüssel, der die IBM Cloud Container Registry Berechtigungsnachweise eines Benutzers oder einer Service-ID auf diesem Konto speichert. Verwenden Sie dann in Code Enginediesen Schlüssel, um in Ihrem Konto den Zugriff zu erstellen.

Zugriff auf Images in einem privaten Docker-Hub-Konto

Um auf Images in einem privaten Docker-Hub-Konto zuzugreifen, erstellen Sie einen Registry-Zugriff, indem Sie Ihr Kennwort oder ein Zugriffstoken bereitstellen. Falls Sie ein Zugriffstoken verwenden, können Sie den Zugriff auf das Docker Hub-Konto ohne erforderliche Kennwortänderung erteilen oder widerrufen. Weitere Informationen zu Zugriffstokens und Docker Hub finden Sie unter Erstellen und Verwalten von Zugriffstokens.

Nachdem Sie entschieden haben, ob Sie Ihr Kennwort direkt verwenden oder ein Zugriffstoken erstellen möchten, erstellen Sie Ihren Registry-Zugriff.

Zugriff auf Registry zu Code Engine hinzufügen

Wenn Sie den Zugriff auf ein IBM Cloud Container Registry in einem anderen IBM Cloud-Konto einrichten möchten, um Images von einem privaten Docker-Hub-Konto mit Pull-Operation zu extrahieren oder Images mithilfe der Code Engine CLI mit Pull- oder Push-Operation zu extrahieren oder zu übertragen, können Sie den IBM API-Schlüssel oder das Docker-Hub-Kennwort oder -Zugriffstoken verwenden, um einen Registry-Zugriff über Code Engine zu erstellen, um Ihren Authentifizierungsschlüssel oder Token für Sie zu speichern.

Zugriff auf Registry in Konsole hinzufügen

Erstellen Sie zunächst ein Projekt, bevor Sie beginnen.

  1. Wenn Ihr Projekt den Status Aktiv hat, klicken Sie auf der Seite Code Engine Projekte auf den Namen Ihres Projekts.
  2. Klicken Sie auf der Seite 'Komponenten' auf Geheime Schlüssel und Konfigurationszuordnungen.
  3. Klicken Sie auf der Seite 'Geheime Schlüssel und Konfigurationszuordnungen' auf Erstellen, um Ihren geheimen Schlüssel zu erstellen.
  4. Führen Sie auf der Seite 'Create secret or configmap' die folgenden Schritte aus:
    1. Wählen Sie Geheimer Registry-Schlüssel aus und klicken Sie dann auf Next.
    2. Geben Sie einen Namen an, z. B. mysecret-registry.
    3. Geben Sie die Zielregistry für diesen geheimen Schlüssel an, z. B. IBM Cloud Container Registry oder Docker Hub.
    4. Geben Sie die Position der Registry an.
    5. Geben Sie einen Benutzernamen an. Wenn dieser geheime Schlüssel für IBM Cloud Container Registrygilt, lautet der Benutzername iamapikey. Wenn dieser geheime Schlüssel für Docker Hub gilt, ist dies Ihre Docker-ID.
    6. Geben Sie die Berechtigungsnachweise für den Benutzernamen ein. Verwenden Sie für IBM Cloud Container RegistryIhren IAM-API-Schlüssel. Für Docker Hub können Sie Ihr Docker-Hub-Kennwort oder ein Zugriffstoken verwenden. Geben Sie für andere Zielregistrys das Kennwort oder den API-Schlüssel für den Benutzernamen an.
    7. Klicken Sie auf Erstellen, um den geheimen Schlüssel zu erstellen.

Nachdem Ihr Geheimnis von der Konsole aus erstellt wurde, gehen Sie zur Seite Secrets and configmaps, um eine Liste der definierten Geheimnisse und configmaps anzuzeigen. Sie können Filter anwenden, um die Liste an Ihre Anforderungen anzupassen.

Sie können Zugriff auf eine Container-Registry hinzufügen, wenn Sie eine Anwendung oder einen Job erstellen, oder wenn Sie ein Image erstellen. Klicken Sie auf Image konfigurieren und geben Sie das auszuführende Container-Image an, einschließlich der Registry, in der das Image gespeichert ist, und des Registry-Zugriffs, der zum Abrufen des Images verwendet werden soll.

Zugriff auf Registry in Befehlszeilenschnittstelle hinzufügen

Seit der CLI-Version 1.42.0 sind die Definition und die Arbeit mit Secrets in der CLI unter der secret befehlsgruppe zusammengefasst. Siehe ibmcloud ce secret-Befehle. Verwenden Sie die Option --format, um die Kategorie des Geheimnisses anzugeben, z. B. basic_auth, generic, hmac, ssh, tls oder registry. Sie können zwar weiterhin die registry befehlsgruppe verwenden können, nutzen Sie die Vorteile der vereinheitlichten secret befehlsgruppe. Um ein Geheimnis für den Zugriff auf eine Container-Registrierung zu erstellen, verwenden Sie den ibmcloud ce secret create --format registry befehl. Um mehr über die Arbeit mit Geheimnissen in Code Engine zu erfahren, siehe Arbeiten mit Geheimnissen.

Um IBM Cloud Container Registry oder Docker Hub-Zugang über die CLI hinzuzufügen, verwenden Sie den secret create --format registry befehl. Dieser Befehl erfordert den Namen des Registrierungsgeheimnisses, die URL des Registrierungsservers sowie den Benutzernamen und das Kennwort für den Zugriff auf den Registrierungsserver und lässt auch andere optionale Argumente zu. Eine vollständige Liste der Optionen finden Sie unter dem ibmcloud ce secret create befehl.

Der folgende Befehl erstellt beispielsweise einen Registrierungszugriff auf eine IBM Cloud Container Registry-Instanz namens myregistry, die sich auf dem Registrierungsserver us.icr.io befindet:

ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY

Beispielausgabe

Creating registry secret 'myregistry'...
OK

Die folgende Tabelle fasst die Optionen zusammen, die mit dem secret create --format registry befehl in diesem Beispiel verwendet werden. Weitere Informationen über den Befehl und seine Optionen finden Sie unter dem ibmcloud ce secret create befehl.

Befehlsbeschreibung
Option Beschreibung
--name

Der Name des geheimen Registry-Schlüssels. Verwenden Sie einen Namen, der innerhalb des Projekts eindeutig ist. Dieser Wert ist erforderlich.

  • Der Name muss mit einem alphanumerischen Kleinbuchstaben beginnen und enden.
  • Der Name darf maximal 253 Zeichen lang sein und Kleinbuchstaben, Zahlen, Punkte (.) und Bindestriche (-) enthalten.
--server Geben Sie die URL des Registry-Servers ein. Für Container Registry ist der Servername <region>.icr.io. Beispiel: us.icr.io. Für Docker Hub lautet der Wert https://index.docker.io/v1/.
--username Geben Sie den Benutzernamen für den Zugriff auf den Registry-Server ein. Der Name für Container Registry lautet iamapikey. Der Name für Docker Hub ist die Docker-ID.
--password Geben Sie das -Kennwort ein. Das Kennwort für Container Registry ist der API-Schlüssel. Für Docker Hub können Sie Ihr Docker-Hub-Kennwort oder ein Zugriffstoken verwenden.

Zugriff auf Container Registry mit Service-ID autorisieren

Bevor Sie einen Zugriff auf eine Service-ID in einem anderen Konto hinzufügen können, müssen Sie zunächst den Zugriff auf die Service-ID autorisieren.

Wenn Sie eine Service-ID erstellen, können Sie den Zugriff auf einen regionalen IBM Cloud Container Registry oder sogar einen bestimmten Namespace innerhalb des IBM Cloud Container Registry -Accounts beschränken.

Zugriff auf Container Registry mit Service-ID über die Konsole autorisieren

Zum Extrahieren oder Übertragen von Images aus oder in IBM Cloud Container Registry müssen Sie eine Service-ID erstellen, eine Zugriffsrichtlinie für die Service-ID erstellen und anschließend einen API-Schlüssel erstellen, um die Berechtigungsnachweise zu speichern.

Schritt 1 Erstellen oder identifizieren Sie eine Service-ID und berechtigen Sie sie für den IBM Cloud Container Registry-Service

  1. Starten Sie die Übersicht Zugriff (IAM).
  2. Wählen Sie Service-IDs aus.
  3. Wenn Sie über eine Service-ID verfügen, die Sie verwenden möchten, wählen Sie diese aus. Ist dies nicht der Fall, wählen Sie Erstellen aus, geben Sie einen Namen und eine Beschreibung ein, und klicken Sie auf Erstellen.
  4. Wählen Sie auf der Seite "Service-ID" im Abschnitt Zugriffsrichtlinien die Option Zugriff zuweisen.
  5. Gehen Sie im Abschnitt Service-ID zusätzliche Zugriffsberechtigungen zuweisen wie Folgt vor:
    1. Wählen Sie Container-Registry für den Typ des Zugriffs aus. Klicken Sie auf Weiter.
    2. Wählen Sie den Zugriffstyp aus: Alle Ressourcen oder Bestimmte Ressourcen. Wenn Sie Bestimmte Ressourcen angeben, können Sie Attribute auf der Basis von Ressourcengruppe, Region, Region, Ressourcentyp, Ressourcen-ID oder Ressourcenname hinzufügen, um den Zugriff weiter einzuschränken. Wenn Sie eine bestimmte Ressourcengruppe auswählen, stellen Sie sicher, dass Sie Anzeigezugriff für den Zugriff Ressourcengruppe auswählen. Klicken Sie auf Weiter.
    3. Wählen Sie im Abschnitt Rollen und Aktionen den Zugriffstyp aus, den Sie erteilen möchten. Wenn Sie für die Anwendungen und Jobs nur Images verwenden möchten, wählen Sie Leseberechtigter aus. Wenn Sie den Quellcode und die Images mit Push-Operation an Container Registryübertragen möchten, wählen Sie auch Writer aus. Klicken Sie auf Überprüfung.
    4. Klicken Sie auf Hinzufügen und anschließend auf Zuweisen.

Schritt 2: Erkennung von Container Registry aktivieren

Damit die Code Engine-Konsole die Container-Registry automatisch erkennen kann, müssen Sie die Service-ID beim IAM Identity Serviceauthentifizieren.

  1. Wählen Sie auf der Seite "Service-ID" im Abschnitt Zugriffsrichtlinien die Option Zugriff zuweisen.
  2. Gehen Sie im Abschnitt Service-ID zusätzliche Zugriffsberechtigungen zuweisen wie Folgt vor:
    1. Wählen Sie IAM Identity Service für die Art des Zugangs. Klicken Sie auf Weiter.
    2. Wählen Sie Bestimmte Ressourcen als Ressourcenbereich aus. Wählen Sie Ressourcentyp als Attributtyp aus, behalten Sie string equals als Operator bei und geben Sie serviceid als Wert ein. Klicken Sie auf Bedingung hinzufügen.
    3. Wählen Sie Ressourcen-ID als Attributtyp aus, behalten Sie string equals als Operator bei und geben Sie die ID Ihrer Service-ID an. Sie finden Ihre Service-ID auf der Detailseite für die Service-ID oder im Browser URL, wenn Sie ihn konfigurieren. Klicken Sie Weiter.
    4. Wählen Sie im Abschnitt Rollen und Aktionen den Plattformzugriff Operator aus. Rezension anklicken
    5. Klicken Sie auf Hinzufügen und anschließend auf Zuweisen.

Schritt 3. API-Schlüssel für Service-ID erstellen

Erstellen Sie einen API-Schlüssel für eine Service-ID.

  1. Wählen Sie auf der Seite 'Service-ID' die Option API-Schlüssel und anschließend Erstellen aus.

  2. Geben Sie einen Namen und eine optionale Beschreibung für den API-Schlüssel ein und klicken Sie auf Erstellen.

  3. Kopieren Sie den API-Schlüssel oder klicken Sie auf die Schaltfläche für den Download, um den Schlüssel zu speichern.

    Der API-Schlüssel wird nicht erneut angezeigt; stellen Sie deswegen sicher, dass Sie ihn notiert haben und bewahren Sie ihn an einem sicheren Ort auf.

Nachdem Sie nun Ihre Zugriffsrichtlinien für Ihre Service-ID und Ihren API-Schlüssel erstellt haben, können Sie Zugriff auf Code Engine hinzufügen, um Images aus Ihrer Container-Registry zu extrahieren.

Zugriff auf Container Registry über die Befehlszeilenschnittstelle autorisieren

Zum Extrahieren von Images aus IBM Cloud Container Registry in ein anderes Konto müssen Sie eine Service-ID, Zugriffsrichtlinien für die Service-ID und anschließend einen API-Schlüssel zum Speichern Ihrer Berechtigungsnachweise erstellen.

  1. Erstellen Sie mit dem Befehl iam service-id-create eine IBM Cloud IAM-Service-ID für das Projekt, das für die IAM-Richtlinien und die Berechtigungsnachweise des API-Schlüssels im geheimen Schlüssel für Image-Pull-Operationen verwendet wird. Stellen Sie sicher, dass Sie für die Service-ID eine Beschreibung angeben, mit der Sie die Service-ID später abrufen können, zum Beispiel durch das Einschließen des Projektnamens. Eine umfassende Liste für den Befehl iam service-id-create und seine Optionen enthält der Abschnitt über den Befehl ibmcloud iam service-id-create.

    Der folgende Befehl erstellt beispielsweise eine Service-ID mit dem Namen codeengine-myproject-id mit der Beschreibung Service ID for IBM Cloud Container Registry in Code Engine project myproject:

    ibmcloud iam service-id-create codeengine-myproject-id --description "Service ID for IBM Cloud Container Registry in Code Engine project my proj"
    
  2. Erstellen Sie mit dem Befehl iam service-policy-create eine angepasste IBM Cloud IAM-Richtlinie für Ihre Service-ID, von der Zugriff auf IBM Cloud Container Registry erteilt wird. Eine umfassende Liste für den Befehl iam service-policy-create und seine Optionen enthält der Abschnitt über den Befehl ibmcloud iam service-policy-create.

    Der folgende Befehl erstellt beispielsweise eine Richtlinie für die Service-ID codeengine-myproject-id mit der Rolle Reader:

    ibmcloud iam service-policy-create codeengine-myproject-id --roles Reader --service-name container-registry
    

    Die folgende Tabelle fasst die Optionen zusammen, die mit dem iam service-policy-create befehl in diesem Beispiel verwendet werden. Weitere Informationen über den Befehl und seine Optionen finden Sie unter dem ibmcloud iam service-policy-create befehl.

    iam service-policy-create-Befehlskomponenten
    Option Beschreibung
    <service_ID> Erforderlich. Ersetzen Sie den Wert durch die codeengine-<project_name>-id-Service-ID, die Sie zuvor erstellt haben.
    --roles <service_access_role> Erforderlich. Geben Sie die Servicezugriffsrolle für IBM Cloud Container Registry ein, die Sie für den Service-ID-Zugriff festlegen möchten. Gültige Werte sind Reader, Writer und Manager. Wenn Sie Images mit einer Pull-Operation abrufen, ist der Zugriff eines Reader ausreichend. Weitere Informationen finden Sie unter Berechtigungen für Image-Registrys einrichten.
    --service-name <container-registry> Erforderlich. Geben Sie container-registry ein, um eine IAM-Richtlinie für IBM Cloud Container Registry zu erstellen.
  3. Erstellen Sie mit dem Befehl iam-identity eine angepasste Servicerichtlinie, um Zugriff auf den Service iam service-policy-create zu ermöglichen, sodass der API-Schlüssel für die Service-ID von Code Engine abgerufen werden kann.

    Führen Sie zum Beispiel den folgenden Befehl aus, um eine Richtlinie für die Service-ID codeengine-myproject-id mit der Rolle Operator zu erstellen:

    ibmcloud iam service-policy-create codeengine-myproject-id --roles Operator --service-name iam-identity
    

    Die folgende Tabelle fasst die Optionen zusammen, die mit dem iam service-policy-create befehl in diesem Beispiel verwendet werden. Weitere Informationen über den Befehl und seine Optionen finden Sie unter dem ibmcloud iam service-policy-create befehl.

    iam service-policy-create-Befehlskomponenten
    Option Beschreibung
    <service_ID> Erforderlich. Ersetzen Sie den Wert durch die codeengine-<project_name>-id-Service-ID, die Sie zuvor erstellt haben.
    --roles <platform_access_role> Erforderlich. Geben Sie die Zugriffsrolle für die Plattform ein, für die Sie den Service-ID-Zugriff festlegen möchten. Mögliche Werte sind Administrator, Editor, Operator und Viewer. Für Ihre Service-ID ist Operator oder höher erforderlich.
    --service-name <iam-identity> Erforderlich. Geben Sie iam-identity zum Erstellen einer IAM-Richtlinie für IAM Identity Service ein.
  4. Erstellen Sie mit dem Befehl iam service-api-key-create einen API-Schlüssel für die Service-ID. Eine umfassende Liste für den Befehl iam service-api-key-create und seine Optionen enthält der Abschnitt über den Befehl ibmcloud iam service-api-key-create. Benennen Sie den API-Schlüssel ähnlich Ihrer Service-ID und geben Sie die Service-ID an, die Sie zuvor erstellt haben: codeengine-<project_name>-id. Stellen Sie sicher, dass Sie für den API-Schlüssel eine Beschreibung angeben, die Ihnen später das Abrufen des Schlüssels erleichtert.

    Der folgende Befehl erstellt zum Beispiel einen Schlüssel mit dem Namen codeengine-myproject-key für die Service-ID codeengine-myproject-id mit der Beschreibung API key for service ID codeengine-myproject-id for Code Engine myproject:

    ibmcloud iam service-api-key-create codeengine-myproject-key codeengine-myproject-id --description "API key for service ID codeengine-myproject-id for Code Engine myproject"
    

    Beispielausgabe

    Please preserve the API key! It cannot be retrieved after it's created.
    
    Name          codeengine-myproject-key
    Description   API key for service ID codeengine-myproject-id for Code Engine myproject
    Bound To      crn:v1:bluemix:public:iam-identity::a/1bb222bb2b33333ddd3d3333ee4ee444::serviceid:ServiceId-ff55555f-5fff-6666-g6g6-777777h7h7hh
    Created At    2019-02-01T19:06+0000
    API Key       i-8i88ii8jjjj9jjj99kkkkkkkkk_k9-llllll11mmm1
    Locked        false
    UUID          ApiKey-222nn2n2-o3o3-3o3o-4p44-oo444o44o4o4
    

    Der API-Schlüssel wird nicht erneut angezeigt; stellen Sie deswegen sicher, dass Sie ihn notiert haben und bewahren Sie ihn an einem sicheren Ort auf.

    Nachdem Sie nun Ihre Zugriffsrichtlinien für Ihre Service-ID und Ihren erstellten API-Schlüssel definiert haben, können Sie Zugriff auf Code Engine hinzufügen, um Images aus Ihrer Container-Registry zu extrahieren.

Steuern des Zugriffs auf Container Registry für Code Engine-Workloads

Angenommen, Sie möchten den Zugriff auf IBM Cloud Container Registry steuern, wenn Code Engine Images extrahiert. Beispiel: Sie möchten den Zugriff auf Container Registry auf bestimmte IP-Adressen steuern. Betrachten Sie die folgenden Ansätze.

  • Verwenden Sie eine kontextbasierte Einschränkung. Wenn Sie eine kontextbasierte Einschränkung verwenden und sich die IP-Adressen für Ihr Code Engine-Projekt ändern, müssen Sie Ihren Zugriff nicht ändern. Sie können den Zugriff auf Container Registry auf eine Netzzone beschränken, in der Ihre Netzzone Code Engine und alles umfasst, was Zugriff auf die Registry erfordert.

  • Inaktivieren Sie den öffentlichen Zugriff auf IBM Cloud Container Registry und stellen Sie sicher, dass Code Engine die privaten Endpunkte anstelle der öffentlichen Endpunkte verwendet. Siehe Verbindung zu Container Registry.

  • Um den Zugriff durch einen bestimmten IP-Bereich zu steuern, verwenden Sie einen API-Endpunkt zum Abrufen der IP-Adressen für Ihr bestimmtes Code Engine-Projekt. Es ist wichtig zu beachten, dass sich diese IP-Adressen ändern können. Sie müssen in diesem Fall die entsprechenden Schritte ausführen. Siehe Code Engine öffentliche und private IP-Adressen und Wie kann ich meine App Code Engine zu einer Zulassungsliste hinzufügen?

Hinweise zu Images in Ihrer Registry

Der Name Ihres Images, das für Ihre Anwendung bzw. Ihren Job verwendet wird, muss eines der folgenden Formate haben:

  • REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAG, wobei REGISTRY und TAG optional sind. Wird REGISTRY nicht angegeben, ist docker.io der Standardwert. Wenn TAG nicht angegeben ist, schließen Sie den Doppelpunkt (:) nicht ein. Der Standardwert für TAG ist latest.
  • REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEID, wobei REGISTRY optional ist Wenn REGISTRY nicht angegeben wird, lautet der Standardwert docker.io und ibm als Docker-Organisation.
Regeln für Bildnamen
Komponente Zulässige Zeichen Länge Zusätzliche Regeln
REGISTRY a-zA-Z0-9 -_. --__ 1-253 (0-127Periods)(label:1-63,noDashOnEnd)
NAMESPACE a-z 0-9 -_ --__ 4-30 (start/end with letterOrNumber)
DOCKERUSERorDOCKERORG a-z 0-9 4-30
REPOSITORY a-z 0-9 -_. / 2-255 (start/end with letterOrNumber)
TAG a-zA-Z0-9 -_. --__.. 0-128 (NOT start with periodOrDash)
IMAGEID a-z 0-9 : (startwith sha256: noOtherColon)

Die Teile des Imagenamens müssen die folgenden Kriterien erfüllen:

  • REGISTRY darf maximal 253 Zeichen lang sein und Klein-oder Großbuchstaben, Zahlen, Punkte (.), Bindestriche (-) und Unterstreichungszeichen (_) enthalten. Verwenden Sie keinen Gedankenstrich (.) als letztes Zeichen. Verwenden Sie nicht mehr als 127 Punkte (.) und die Bezeichnungen zwischen ihnen können zwischen 1 und 63 Zeichen lang sein.
  • NAMESPACE muss zwischen 4 und 30 Zeichen lang sein und mit einem Kleinbuchstaben oder einer Zahl beginnen und enden. NAMESPACE kann alphanumerische Zeichen in Kleinschreibung, Bindestriche (-) und Unterstreichungszeichen (_) enthalten.
  • DOCKERUSERorDOCKERORG kann für Docker-Registrys anstelle von NAMESPACE verwendet werden. Geben Sie Ihren Docker-Benutzernamen oder Ihre Docker-Organisation an. Ihr Docker und Ihre Organisation müssen zwischen 4 und 30 Zeichen lang sein und dürfen nur alphanumerische Zeichen oder Zahlen in Kleinschreibung enthalten.
  • REPOSITORY muss zwischen 2 und 255 Zeichen lang sein und mit einem Kleinbuchstaben oder einer Zahl beginnen und enden. REPOSITORY kann alphanumerische Kleinbuchstaben, Schrägstriche (/), Punkte (.), Bindestriche (-) und Unterstreichungszeichen (_) enthalten.
  • TAG muss zwischen 0 und 128 Zeichen lang sein und kann Groß-oder Kleinbuchstaben, Zahlen, Punkte (.), Bindestriche (-) und Unterstreichungszeichen (_) enthalten. TAG darf nicht mit einem Punkt oder Gedankenstrich beginnen. Wenn Sie keinen Doppelpunkt ( TAG) angeben, schließen Sie auch keinen Doppelpunkt ein.
  • IMAGEID hat das Präfix sha256: und kann Kleinbuchstaben und Zahlen enthalten.