Auf dieser Seite erfahren Sie, wie Sie Berechtigungsprobleme beheben, die auftreten, wenn Sie Config Sync mit einem Google-Dienstkonto verwenden.
Fehlender Lesezugriff
Wenn Sie ein Google-Dienstkonto (spec.git.gcpServiceAccountEmail
oder spec.oci.gcpServiceAccountEmail
oderspec.helm.gcpServiceAccountEmail
) zur Authentifizierung bei Cloud Source Repositories oder Artifact Registry verwenden, erfordert das Google-Dienstkonto Folgenden Leser-Zugriff:
- Cloud Source Repositories:
roles/source.reader
- Artifact Registry:
roles/artifactregistry.reader
Wenn dem Dienstkonto diese Rollen fehlen, schlägt git-sync
, oci-sync
oder helm-sync
mit Fehlern wie den folgenden fehl:
failed to pull image us-docker.pkg.dev/...: GET https://us-docker.pkg.dev/v2/token?scope=repository...: DENIED: Permission \"artifactregistry.repositories.downloadArtifacts\" denied on resource \"projects/.../locations/us/repositories/...\" (or it may not exist)
"Err":"failed to render the helm chart: exit status 1, stdout: Error: failed to download ...
Gewähren Sie dem Dienstkonto den richtigen Leserzugriff, um dieses Problem zu beheben.
Fehlende IAM-Richtlinienbindung mit Workload Identity
Wenn Sie ein Google-Dienstkonto zur Authentifizierung verwenden, ist zwischen dem Google-Dienstkonto und dem Kubernetes-Dienstkonto eine IAM-Richtlinienbindung erforderlich. Wenn die IAM-Richtlinienbindung fehlt, erhalten Sie die folgende Fehlermeldung:
KNV2004: unable to sync repo Error in the git-sync container: ERROR: failed to call ASKPASS callback URL: auth URL returned status 500, body: "failed to get token from credentials: oauth2/google: status code 403: {\n \"error\": {\n \"code\": 403,\n \"message\": \"The caller does not have permission\",\n \"status\": \"PERMISSION_DENIED\"\n }\n}\n"
Erstellen Sie die folgende IAM-Richtlinienbindung, um das Problem zu beheben:
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
Dabei gilt:
PROJECT_ID
: Wenn Sie GKE Workload Identity verwenden, fügen Sie die Projekt-ID Ihrer Organisation hinzu. Wenn Sie Flotten-Workload Identity verwenden, können Sie zwei verschiedene Projekt-IDs verwenden. Fügen Sie inserviceAccount:PROJECT_ID
die Projekt-ID der Flotte hinzu, bei der Ihr Cluster registriert ist. Fügen Sie inGSA_NAME@PROJECT_ID
eine Projekt-ID für jedes Projekt hinzu, das Lesezugriff auf das Repository in Cloud Source Repositories hat.KSA_NAME
: das Kubernetes-Dienstkonto für den Abgleich. Wenn derRootSync
-Name für Stamm-Repositoriesroot-sync
ist, istKSA_NAME
root-reconciler
. Andernfalls ist esroot-reconciler-ROOT_SYNC_NAME
.Wenn der
RepoSync
-Name für Namespace-Repositoriesrepo-sync
ist, istKSA_NAME
ns-reconciler-NAMESPACE
. Andernfalls ist esns-reconciler-NAMESPACE-REPO_SYNC_NAME
.GSA_NAME
: Benutzerdefiniertes Google-Dienstkonto, das Sie zum Herstellen einer Verbindung zu Cloud Source Repositories verwenden möchten. Achten Sie darauf, dass das ausgewählte Google-Dienstkonto die Rollesource.reader
hat.
Hinweis: Zum Erstellen dieser Richtlinienbindung ist die Berechtigung iam.serviceAccounts.setIamPolicy
erforderlich.
Achten Sie darauf, dass Workload Identity auf Ihren registrierten Clustern aktiviert ist. Weitere Informationen finden Sie unter Cluster registrieren. Wenn sich Ihr Cluster in einem anderen Projekt als dem Flotten-Hostprojekt befindet, müssen Sie das Google-Dienstkonto mit dem Kubernetes-Dienstkonto im Flotten-Hostprojekt binden.
Fehlender cloud-platform
-Bereich für den Zugriff auf Cloud Source Repositories
Wenn Sie einem Google-Dienstkonto Zugriff auf Ihr Git-Repository in Cloud Source Repositories gewähren, muss der schreibgeschützte Bereich in Zugriffsbereiche für die Knoten im Cluster enthalten sein.
Der schreibgeschützte Bereich kann hinzugefügt werden, indem Sie cloud-source-repos-ro
in die Liste --scopes
aufnehmen, die beim Erstellen des Clusters angegeben wird, oder indem Sie den Bereich cloud-platform
beim Erstellen des Clusters verwenden. Beispiel:
gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
Wenn der schreibgeschützte Bereich fehlt, wird ein Fehler wie der folgende angezeigt:
Error in the git-sync container: {"Msg":"unexpected error syncing repo, will retry","Err":"Run(git clone -v --no-checkout -b main --depth 1 https://source.developers.google.com/p/PROJECT_ID/r/csr-auth-test /repo/source): exit status 128: { stdout: \"\", stderr: \"Cloning into '/repo/source'...\\nremote: INVALID_ARGUMENT: Request contains an invalid argument\\nremote: [type.googleapis.com/google.rpc.LocalizedMessage]\\nremote: locale: \\\"en-US\\\"\\nremote: message: \\\"Invalid authentication credentials. Please generate a new identifier: https://source.developers.google.com/new-password\\\"\\nremote: \\nremote: [type.googleapis.com/google.rpc.RequestInfo]\\nremote: request_id: \\\"fee01d10ba494552922d42a9b6c4ecf3\\\"\\nfatal: unable to access 'https://source.developers.google.com/p/PROJECT_ID/r/csr-auth-test/': The requested URL returned error: 400\\n\" }","Args":{}}
Fehlender storage-ro
-Bereich für den Zugriff auf Artifact Registry
Bei Verwendung von Artifact Registry werden Image-Ebenen in Cloud Storage-Buckets gespeichert. Wenn Sie einem Google-Dienstkonto Zugriff auf Ihr OCI-Image oder Helm-Diagramm in Artifact Registry gewähren, muss der schreibgeschützte Bereich in den Zugriffsbereichen für die Knoten im Cluster enthalten sein.
Der schreibgeschützte Bereich kann hinzugefügt werden, indem Sie storage-ro
in die Liste --scopes
aufnehmen, die beim Erstellen des Clusters angegeben wird, oder indem Sie den Bereich cloud-platform
beim Erstellen des Clusters verwenden. Beispiel:
gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
Wenn der schreibgeschützte Bereich fehlt, wird ein Fehler wie der folgende angezeigt:
Error in the oci-sync container: {"Msg":"unexpected error fetching package, will retry","Err":"failed to pull image us-docker.pkg.dev/...: GET https://us-docker.pkg.dev/v2/token?scope=repository%3A...%3Apull\u0026service=us-docker.pkg.dev: UNAUTHORIZED: failed authentication","Args":{}}
Die Fehlermeldung enthält möglicherweise nicht alle Details zur Ursache des Fehlers. Sie stellt aber einen Befehl bereit, der die Logs des Containers git-sync
ausgibt, die weitere Informationen enthalten können.
Wenn Sie die APIs RootSync
oder RepoSync
aktiviert haben, führen Sie den folgenden Befehl aus:
kubectl logs -n config-management-system -l app=reconciler -c git-sync
Wenn Sie die APIs RootSync
oder RepoSync
nicht aktiviert haben, führen Sie den folgenden Befehl aus:
kubectl logs -n config-management-system -l app=git-importer -c git-sync
Hinweis: APIs RootSync
und RepoSync
sind standardmäßig aktiviert, wenn Sie Config Sync mit der Google Cloud Console oder der Google Cloud-Befehlszeile installiert haben, und lassen sich nicht deaktivieren.
Nächste Schritte
- Wenn weiterhin Probleme auftreten, prüfen Sie, ob es sich bei Ihrem Problem um ein bekanntes Problem handelt.