Blog
So gewähren Sie Zugriff auf die Google Container Registry

Google Cloud bietet eine Docker-Image-Registry, die Sie zum Speichern Ihrer privaten Docker-Images verwenden können. Obwohl es sich bei
um einen separaten Google-Dienst handelt, sind damit keine spezifischen IAM-Rollen verbunden, mit denen
Sie den Zugriff auf Ihre Registry steuern können. Stattdessen verwenden Sie die Google Cloud Storage Rollen und Berechtigungen für den Bucket, der
implizit für Sie erstellt wird. In diesem Blog zeigen wir Ihnen, wie Sie den Container-Registry-Speicher-Bucket in
Ihrem Projekt erstellen und den Zugriff darauf gewähren.
Erstellen des Speicherbereiches
GCR erstellt einen Bucket "artifacts.[PROJECT-ID].appspot.com" für Sie, in dem es Ihre Bilder speichert, die Sie an die Domain "gcr.io" pushen. Wenn Sie an eine der regionalen Registraturen pushen, lautet der Name "[REGION].artifacts.[PROJEKT-ID].appspot.com". Der Registry-Speicher-Bucket wird nur erstellt, wenn Sie ein Docker-Image pushen.
Authentifizierung
Um ein Image auf Ihre private Docker-Registry zu übertragen, müssen Sie sich zunächst authentifizieren. Es gibt mehrere Methoden, aber die einfachste ist die Verwendung des Google Container Registry Credential Helper für Docker. Sie installieren ihn, indem Sie Folgendes eingeben:
gcloud components install docker-credential-gcr
docker-credential-gcr configure-docker
Ein Bild verschieben
Um den zugrundeliegenden Cloud-Speicher-Bucket zu erstellen, müssen Sie zunächst ein Image pushen. In diesem Beispiel pushen Sie das neueste NGiNX-Image in Ihre private Registry:
PROJECT=$(gcloud config --quiet get-value project)
docker pull nginx:latest
docker tag nginx:latest gcr.io/$PROJECT/nginx:latest
docker push gcr.io/$PROJECT/nginx:latest
Nachdem das Image gepusht wurde, wird der Registry-Storage-Bucket erstellt:
gsutil ls gs://artifacts.$PROJECT.appspot.com
Zugang gewähren
Wenn Sie die Dokumentation zur Zugriffskontrolle lesen, werden Sie feststellen, dass es keine
spezifischen IAM-Rollen oder Berechtigungen gibt, die mit dem Container Registry Service verbunden sind. Sie können jedoch IAM-Rollen für den zugrunde liegenden Speicher-Bucket verwenden, um die Zugriffskontrolle einzurichten. Um Lesezugriff auf die Registry zu erhalten, binden Sie die Rolle "Storage Object Viewer" an die Identitäten, denen Sie Zugriff gewähren möchten. In
gewährt in diesem Beispiel die Identität "allUsers" öffentlichen Lesezugriff:
gsutil iam ch allusers:objectViewer gs://artifacts.$PROJECT.appspot.com
Anstatt den öffentlichen Zugriff zu gewähren, können Sie die Rolle auch einem bestimmten Benutzer, einer Google-Gruppe, einem Dienstkonto oder einer Domäne zuweisen. Um
die Berechtigung zu erteilen, auch Bilder in das Repository zu verschieben, erteilen Sie die Rolle Storage Object Admin:
gsutil ls gs://artifacts.$PROJECT.appspot.com
Beachten Sie, dass es keine Möglichkeit gibt, den Zugriff auf einzelne Bilder im Projekt zu kontrollieren.
Infrastruktur als Code
Wie Sie vielleicht wissen, machen wir bei binx.io nie etwas über die Konsole und vermeiden einzelne CLI-Befehle, wie wir es oben getan haben. Fügen Sie also das folgende Snippet zu Ihrem Terraform-Projekt hinzu und Sie sind bereit, den Zugriff auf Ihre
Google Container Registry zu verwalten:
/* ensure that the image registry bucket is created by pushing an empty image to it */
resource "null_resource" "docker-registry" {
provisioner "local-exec" {
command = <<EOF
gcloud components install docker-credential-gcr &&
docker-credential-gcr configure-docker &&
(echo 'FROM scratch'; echo 'LABEL maintainer=binx.io') |
docker build -t gcr.io/${var.project}/scratch:latest - &&
docker push gcr.io/${var.project}/scratch:latest
EOF
}
depends_on = ["google_project_service.containerregistry"]
}
resource “google_storage_bucket_iam_binding” “binding” {
role = “roles/storage.viewer”
bucket = “artifacts.${var.project}.appspot.com”
members = [
“allUsers”,
]
depends_on = [“null_resource.docker-registry”]
}
resource “google_project_service” “containerregistry” {
service = “containerregistry.googleapis.com”
disableondestroy = false
}
Zusammenfassung
Google Cloud bietet eine private Docker Image Registry, die Sie zum Speichern Ihrer eigenen Docker-Images verwenden können. Sie können den Zugriff
auf Ihre Registry gewähren, indem Sie entweder den "Storage Object Viewer" oder den "Storage Object Admin" an den zugrundeliegenden Speicher-Bucket binden, um nur Lese- bzw. Lese-/Schreibzugriff zu ermöglichen.
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



