Ich versuche, die Anwendung Standardanmeldeinformationen für die Container-Engine für die Python-IAM-API zu verwenden. Aber ich bekomme den folgenden Fehler, der auf unzulängliche Authentifizierungsbereiche zeigt. In meinem Projekt ist die IAM-API aktiviert und der Code funktioniert lokal. Also ich bin mir nicht sicher, was ich vermisse.Anwendung Standardanmeldeinformationen funktioniert nicht auf Google Container Engine
Meine Fehlermeldung:
22:26:16.000
ERROR:root:<HttpError 403 when requesting https://iam.googleapis.com/v1/projects/henry-dev/serviceAccounts/[email protected]/keys?alt=json returned "Request had insufficient authentication scopes.">
{
metadata: {…}
textPayload: "ERROR:root:<HttpError 403 when requesting https://iam.googleapis.com/v1/projects/henry-dev/serviceAccounts/[email protected]/keys?alt=json returned "Request had insufficient authentication scopes.">
"
insertId: "116wpgtg3n4zndx"
log: "simplekubeserver"
}
22:26:16.000
HttpError: <HttpError 403 when requesting https://iam.googleapis.com/v1/projects/henry-dev/serviceAccounts/[email protected]/keys?alt=json returned "Request had insufficient authentication scopes.">
{
metadata: {…}
textPayload: "HttpError: <HttpError 403 when requesting https://iam.googleapis.com/v1/projects/henry-dev/serviceAccounts/[email protected]/keys?alt=json returned "Request had insufficient authentication scopes.">
"
insertId: "116wpgtg3n4znej"
log: "simplekubeserver"
}
My-Code, die lokal, aber nicht auf GKE funktioniert:
from oauth2client.client import GoogleCredentials
def _iam_service():
credentials = GoogleCredentials.get_application_default()
return discovery.build(serviceName='iam',
version='v1',
credentials=credentials)
def list_keys(project_id, service_account_id):
full_name = 'projects/{0}/serviceAccounts/{1}'.format(project_id, service_account_id)
keys = _iam_service().projects().serviceAccounts().keys()
request = keys.list(name=full_name)
return request.execute()
Eine Sache, die ich zu beheben tat, um zu bekommen, welche Service-Konto verwendet wird.
print credentials.service_account_email
Lokal zeigt dies das korrekte Dienstkonto, das ich verwende. Während auf GKE, erhalte ich keine, aber erwartet, so etwas wie [email protected]
Im source code, ich sehe:
_get_application_default_credential_GCE()
_get_application_default_credential_GAE()
Aber nichts explizit für GKE. Also nehme ich an, dass der für GCE verwendet wird.
This doc erwähnt, dass dies auf Container Engine funktionieren sollte.
Application Default Credentials are best suited for cases
when the call needs to have the same identity and authorization level
for the application independent of the user. This is the recommended
approach to authorize calls to Google Cloud Platform APIs, particularly
when you're building an application that is deployed to Google App
Engine, **Google Container Engine**, or Google Compute Engine virtual
machines.
übergeben Vielen Dank, dass für mich durch Erstellen eines neuen Clusters mit dem Cloud-Plattform-Bereich aktiviert. Es wäre toller, wenn der Bereich geändert werden könnte, ohne einen neuen Cluster erstellen zu müssen. –
Sie können die Bereiche in einem ausgeführten Cluster ändern, indem Sie einen neuen Knotenpool (mit den gewünschten Bereichen) erstellen und dann den alten löschen. Aber es sieht so aus, als wärst du schon vorbei :). Froh, dass es für dich funktioniert hat. –