GCP Python ID -Token -Authentifizierung mit imitiertem Servicekonto ohne Herunterladen von Anmeldeinformationen DateiPython

Python-Programme
Guest
 GCP Python ID -Token -Authentifizierung mit imitiertem Servicekonto ohne Herunterladen von Anmeldeinformationen Datei

Post by Guest »

Wie in der Frage, wie kann ich das ID -Token eines ID -Tokens eines verkoteten Dienstkontos abrufen, ohne die Datei für Service -Konto -Anmeldeinformationen aus der GCP IAM -Konsole herunterzuladen. Es geht darum, einen Servicecode auf meinem lokalen Computer zu testen, indem GCP -Client -LIBS und authentifiziert externe IAP -Dienste über das imitierte Servicekonto authentifiziert werden, so dass derselbe Code auch in der bereitgestellten Umgebung auf GCP (dessen Metadata -Server verfügbar ist) funktionieren muss. < /p>
Abrufen des Zugriffsstokens (Sie können diesen Teil lesen) < /h1>
Ich habe kürzlich die Lösung herausgefunden, aber aber für den Zugangstoken; Hier sind die Schritte: < /p>

[*] Geben Sie Ihrem Benutzerkonto die Rolle des Token -Erstellers auf dem Servicekonto (nämlich svc@proj.iam.gserviceAccount.com < /Code>) < /p>
< /li>
Führen Sie dies auf Ihrem Terminal aus und melden Sie sich an < /p>

Code: Select all

gcloud auth application-default login --impersonate-service-account svc@proj.iam.gserviceaccount.com
Hier können Sie feststellen, dass die Anmeldeinformationen in den Pfad /users/youruser/.config/gcloud/application_default_credentials.json nun die verkoteten Anmeldeinformationen sein:
< Br />

Code: Select all

 {
"delegates": [],
"service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/svc@proj.iam.gserviceaccount.com:generateAccessToken",
"source_credentials": {
"account": "",
"client_id": "xxxxxxxxxxxxx.apps.googleusercontent.com",
"client_secret": "xxxxxxxxxxxxxxxxx",
"refresh_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"type": "authorized_user",
"universe_domain": "googleapis.com"
},
"type": "impersonated_service_account"
}
< /code>
Anstelle der einfachen alten Benutzerkonto-Anmeldeinformationen wie folgt: < /pt>
 {
"account": "",
"client_id": "xxxxxxxxxxxxx.apps.googleusercontent.com",
"client_secret": "xxxxxxxxxxxxxxxxx",
"quota_project_id": "proj",
"refresh_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"type": "authorized_user",
"universe_domain": "googleapis.com"
}
Setzen Sie die env var google_application_credentials auf den kürzlich angemeldeten Pfad (oder alternativ mit dotenv libs in Ihrem Projekt)

Code: Select all

export GOOGLE_APPLICATION_CREDENTIALS=/Users/youruser/.config/gcloud/application_default_credentials.json
< /code>
< /li>
  Dieser Code wird nun das imitierte Servicekonto erkannt und sein Zugriffs -Token abrufen: < /p>
 import google.auth
import google.auth.transport.requests
from google.auth import credentials

creds, project_id = google.auth.default(scopes=scopes, **kwargs)
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
# use `creds` accordingly
< /code>
< /li>
< /ol>
 Abzweigung des ID -Tokens (die Frage) < /h1>
Solche Schritte für die Access Token funktioniert nicht beim Abrufen des ID -Tokens. Ich bin mir nicht sicher, ob ich die richtige Funktion verwende (google.oauth2.id_token.fetch_id_token
) oder wenn mir etwas fehlt. Hier ist der Code: < /p>

Code: Select all

import google.auth.transport.requests
import google.oauth2.id_token

"""
From https://google-auth.readthedocs.io/en/master/user-guide.html#identity-tokens
"""
request = google.auth.transport.requests.Request()
creds = google.oauth2.id_token.fetch_id_token(request, aud)
< /code>
Hier ist der Fehler: < /p>
google.auth.exceptions.DefaultCredentialsError: Neither metadata server or valid service account credentials are found.
Ich kann mir vorstellen im Creds JSON). Darüber hinaus gibt es keine GCLOUD-Authuzelanwendungs-Default-Identitäts-Token , nur Druck-access-gequerdig .
Zurück zur Frage, ist es möglich? Oder die einzige Möglichkeit besteht darin, die Datei für Service -Account -Anmeldeinformationen herunterzuladen, die ironischerweise gegen Googles Empfehlung entspricht und den Zweck der Identitätswechsel besiegt?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post