Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En esta página, se describe cómo acceder a Docker o Helm con el asistente de credenciales del servicio administrado de Harbor (MHS) o los secretos de la CLI.
Para brindar flexibilidad, Google Distributed Cloud (GDC) con aislamiento de red proporciona dos métodos para autenticarse con Docker y Helm desde tu instancia del registro de Harbor. El primer método consiste en usar el auxiliar de credenciales de Managed Harbor Service (MHS) y tu identidad de GDC para acceder a la CLI de Docker o Helm. Después de autenticarte con GDC, puedes acceder al cliente de Docker y realizar operaciones de Docker sin tener que crear ni administrar secretos de CLI separados en Harbor.
El segundo método es usar secretos de la CLI. Después de autenticarte con Identity-Aware Proxy (IAP) y acceder a la interfaz de Harbor por primera vez, usa la CLI de Docker o Helm para acceder a Harbor. Las CLIs de Docker y Helm no pueden controlar el redireccionamiento para IAP, por lo que Harbor proporciona un secreto de CLI para usar cuando se accede desde Docker o Helm. Este método solo está disponible cuando Harbor usa la autenticación de IAP.
Antes de comenzar
Para configurar la autenticación de Docker y Helm para las instancias del registro de Harbor, debes tener lo siguiente:
El auxiliar de credenciales de MHS docker-credential-mhs instalado en el entorno El asistente de credenciales se incluye de forma predeterminada en el paquete de la CLI de gcloud. Para obtener más información, consulta la descripción general de la CLI de gcloud.
El rol de identidad y acceso necesario. Pídele al administrador de IAM de la organización que te otorgue el rol de visualizador de instancias de Harbor (harbor-instance-viewer).
Accede a Docker con tu identidad de GDC
Usa el auxiliar de credenciales de MHS con tu identidad de GDC para acceder a la CLI de Docker. Para autenticarte con Docker, sigue estos pasos:
Accede al servidor de la API de Management con la CLI de GDC siguiendo las instrucciones en Acceder.
Configura Docker para que use el auxiliar de credenciales de MHS docker-credential-mhs:
Opcional: Verifica que el asistente de credenciales se haya configurado correctamente. Para ello, verifica que la entrada mhs se haya agregado a ~/.docker/config.json:
catDOCKER_CONFIG_PATH
Reemplaza DOCKER_CONFIG_PATH por la ruta de acceso a tu archivo de configuración de Docker. Por ejemplo: ~/.docker/config.json.
Un resultado correcto para esta operación se ve de la siguiente manera:
Login Succeeded
Accede a Docker o Helm con secretos de la CLI
Para acceder a Docker o Helm con secretos de la CLI, sigue estos pasos:
Accede a Harbor con una cuenta de usuario de IAP.
Haz clic en tu nombre de usuario y selecciona Perfil de usuario.
Para copiar el secreto de la CLI asociado a tu cuenta, haz clic en content_copyCopiar.
Opcional: Para mostrar botones para generar automáticamente o crear manualmente un nuevo secreto de la CLI, haz clic en los puntos suspensivos more_horiz de tu perfil de usuario.
Si generaste un nuevo secreto de la CLI, haz clic en content_copyCopiar para copiarlo.
Ahora puedes usar tu secreto de la CLI como contraseña cuando accedas a Harbor desde la CLI de Docker o Helm:
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[[["\u003cp\u003eThis document outlines two methods for authenticating with Docker and Helm for Harbor registry instances within Google Distributed Cloud (GDC) air-gapped environments.\u003c/p\u003e\n"],["\u003cp\u003eThe first method involves using the Managed Harbor Service (MHS) credential helper along with your GDC identity, enabling direct sign-in to the Docker or Helm CLI without managing separate secrets.\u003c/p\u003e\n"],["\u003cp\u003eThe second method utilizes CLI secrets generated within the Harbor interface, which are necessary because Docker and Helm CLIs do not support Identity-Aware Proxy (IAP) redirection.\u003c/p\u003e\n"],["\u003cp\u003eTo use the MHS credential helper method, you must have the \u003ccode\u003edocker-credential-mhs\u003c/code\u003e installed and the Harbor Instance Viewer role, after which you can sign into docker and perform operations such as pushing and pulling images.\u003c/p\u003e\n"],["\u003cp\u003eCLI secrets, used in the alternative method, can be copied from the user profile section in Harbor and are non-expiring unless manually rotated.\u003c/p\u003e\n"]]],[],null,["# Sign in to Docker and Helm\n\nThis page describes how to sign in to Docker or Helm using the Managed Harbor Service (MHS) credential helper or CLI secrets.\n\nTo provide flexibility, Google Distributed Cloud (GDC) air-gapped provides two methods to authenticate with Docker and Helm from your Harbor registry instance. The first method is using the Managed Harbor Service (MHS) credential helper and your GDC identity to sign in to the Docker or Helm CLI. After authenticating with GDC, you can sign in to the Docker client and perform Docker operations, without having to create or manage separate CLI secrets in Harbor.\n\nThe second method is using CLI secrets. After you authenticate using Identity-Aware Proxy (IAP) and sign in to the Harbor interface for the first time, use the Docker or Helm CLI to access Harbor. The Docker and Helm CLIs cannot handle redirection for IAP, so Harbor provides a CLI secret to use when signing in from Docker or Helm. This method is only available when Harbor uses IAP authentication.\n\nBefore you begin\n----------------\n\nTo configure Docker and Helm authentication for Harbor registry instances, you must have the following:\n\n- The MHS credential helper `docker-credential-mhs` installed in the environment. The credential helper is included by default in the gdcloud CLI bundle. For more information, see [gdcloud CLI overview](/distributed-cloud/hosted/docs/latest/gdch/resources/gdcloud-overview).\n- The necessary identity and access role. Ask your Organization IAM Admin to grant you the Harbor Instance Viewer (`harbor-instance-viewer`) role.\n\nSign in to Docker with your GDC identity\n----------------------------------------\n\nUse the MHS credential helper with your GDC identity to sign into the Docker\nCLI. To authenticate with Docker, follow these steps:\n\n1. Sign in to the Management API server with GDC CLI by following the\n instructions in\n [Sign in](/distributed-cloud/hosted/docs/latest/gdch/platform/pa-user/iam/sign-in).\n\n2. Configure Docker to use the MHS credential helper `docker-credential-mhs`:\n\n TENANT_PROJECT=\u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e\n HARBOR_INSTANCE_NAME=\u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_NAME\u003c/var\u003e\n REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)\n\n docker-credential-mhs configure-docker --registries=${REGISTRY}\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e: the name of your tenant project. This is the same project name you provided when [creating your Harbor instance](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/create-harbor-instances#create-a-harbor-registry-instance).\n - \u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_NAME\u003c/var\u003e: the name of the Harbor instance that is created in [Create Harbor registry instances](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/create-harbor-instances).\n3. Follow the instructions in\n [Configure Docker to trust the Harbor root CA](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/configure-docker-trust#configure-docker-to-trust-harbor-root-ca).\n\n4. Optional: Verify that the credential helper is successfully configured\n by verifying the `mhs` entry is added to `~/.docker/config.json`:\n\n cat \u003cvar translate=\"no\"\u003eDOCKER_CONFIG_PATH\u003c/var\u003e\n\n Replace \u003cvar translate=\"no\"\u003eDOCKER_CONFIG_PATH\u003c/var\u003e with the path to your docker config file. For\n example, `~/.docker/config.json.`\n\n The output is similar to the following: \n\n {\n \"auths\": {\n \"10.200.0.1\": {\n \"auth\": \"YWRtaW46YWRtaW4=\"\n },\n \"10.200.16.5:10443\": {\n \"auth\": \"YWRtaW46ZEROVVJCVWE1a1FBcE4xQQ==\"\n }\n },\n \"credHelpers\": {\n \"asia.gcr.io\": \"gcloud\",\n \"eu.gcr.io\": \"gcloud\",\n \"gcr.io\": \"gcloud\",\n \"marketplace.gcr.io\": \"gcloud\",\n \"myinstance-e2e-test-user.org-1.zone1.google.gdch.test\": \"mhs\",\n \"staging-k8s.gcr.io\": \"gcloud\",\n \"us-central1-docker.pkg.dev\": \"gcloud\",\n \"us.gcr.io\": \"gcloud\"\n }\n }\n\n This example shows a successful output of `\"myinstance-e2e-test-user.org-1.zone1.google.gdch.test\": \"mhs\"`.\n5. Configure the tenant project in `gdcloud`:\n\n TENANT_PROJECT=\u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e\n gdcloud config set project $TENANT_PROJECT\n\n The following output is shown: \n\n Updated property [core/project].\n\n6. Identify a Harbor project that you have management access to.\n [Create a Harbor project](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/create-harbor-projects)\n if one does not exist.\n\n7. Perform Docker operations, such as an image push or pull:\n\n TENANT_PROJECT=\u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e\n HARBOR_INSTANCE_NAME=\u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_NAME\u003c/var\u003e\n REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)\n HARBOR_PROJECT=\u003cvar translate=\"no\"\u003eHARBOR_PROJECT_NAME\u003c/var\u003e\n\n # Push image\n docker pull nginx\n docker tag nginx ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest\n docker push ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest\n\n # Pull image\n docker pull ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest\n\n A successful output is similar to the following: \n\n # Push image\n root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker push ${REGISTRY}/harbor-project/nginx:latest\n The push refers to repository [myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx]\n e4e9e9ad93c2: Pushed\n 6ac729401225: Pushed\n 8ce189049cb5: Pushed\n 296af1bd2844: Pushed\n 63d7ce983cd5: Pushed\n b33db0c3c3a8: Pushed\n 98b5f35ea9d3: Pushed\n latest: digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc size: 1778\n\n # Pull image\n root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker pull ${REGISTRY}/harbor-project/nginx:latest\n latest: Pulling from harbor-project/nginx\n Digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc\n Status: Image is up to date for myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx:latest\n\n If the operation is unsuccessful, you might see the following output: \n\n E1025 19:21:39.322290 1273587 get.go:24] failed to get user name: user is not logged in or login expired, please login again\n\n In this example, the GDC authentication session has expired and you must sign\n in to GDC again. For more information, see\n [Sign in](/distributed-cloud/hosted/docs/latest/gdch/platform/pa-user/iam/sign-in).\n\nSign into Helm with your GDC identity\n-------------------------------------\n\nUse the MHS credential helper with your GDC identity to sign into the Helm CLI.\n\nTo authenticate with Helm, follow these steps:\n\n1. After authenticating with GDC, retrieve your user credentials from the\n credential helper:\n\n echo $REGISTRY | docker-credential-mhs get\n\n The output is similar to the following: \n\n {\"Username\":\"tokenreview$fop-infrastructure-operator@example.com\",\"Secret\":\"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw\"}\n\n2. Sign in to the Helm CLI with the credentials. When prompted to enter the\n credentials, use the credentials returned by the credential helper.\n\n helm registry login $REGISTRY\n Username: tokenreview$fop-infrastructure-operator@example.com\n Password: STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw\n\n A successful output for this operation looks like the following: \n\n Login Succeeded\n\nSign in to Docker or Helm with CLI secrets\n------------------------------------------\n\nTo sign in to Docker or Helm with CLI secrets, follow these steps:\n\n1. Sign in to Harbor with an IAP user account.\n2. Click your username and select **User Profile**.\n3. To copy the CLI secret associated with your account, click content_copy **Copy**.\n4. Optional: To display buttons for\n automatically generating or manually creating a new CLI secret, click the more_horiz ellipses in your user profile.\n\n | **Note:** A user can only have one CLI secret. When a new secret is generated or created, the old secret becomes invalid.\n5. If you generated a new CLI secret, click content_copy **Copy** to copy it.\n\n6. You can now use your CLI secret as the password when signing in to\n Harbor from the Docker or Helm CLI:\n\n docker login -u \u003cvar translate=\"no\"\u003eUSERNAME\u003c/var\u003e -p \u003cvar translate=\"no\"\u003eCLI_SECRET\u003c/var\u003e \u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_URL\u003c/var\u003e\n\nReplace the following:\n\n- \u003cvar translate=\"no\"\u003eUSERNAME\u003c/var\u003e: the Harbor account username\n- \u003cvar translate=\"no\"\u003eCLI_SECRET\u003c/var\u003e: the generated CLI secret.\n- \u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_URL\u003c/var\u003e: the URL of the Harbor instance.\n\n| **Note:** The CLI secret does not expire, unless you manually rotate it. The CLI secret is not associated with the user identity token. Signing out from Harbor or the GDC console does not revoke the CLI secret."]]