Ответ зависит от вашей среды и способа создания / получения учетных данных.
Что такое учетные данные Google Cloud?
Учетные данные Google Cloud являются OAuth 2.0маркер.Этот токен имеет как минимум Access Token
и, необязательно, Refresh Token
, Client ID Token
и поддерживающие параметры, такие как expiration
, Service Account Email
или Client Email
и т. Д.
Важный элемент вGoogle Cloud APIs является Access Token
.Этот токен разрешает доступ к облаку.Этот токен может использоваться в таких программах, как curl
, в таких программах, как python
и т. Д., И для него не требуется SDK.Access Token
используется в заголовке HTTP Authorization
.
Что такое токен доступа?
токен доступа - это непрозрачное значение, созданное Google, котороеполученный из подписанного JWT, более правильно называется JWS.JWT состоит из структуры Json заголовка и утверждений (полезной нагрузки).Эти две структуры Json подписаны закрытым ключом учетной записи службы.Эти значения кодируются и объединяются в base64 для создания ключа доступа.
Формат токена доступа: base64(header) + '.' + base64(payload) + '.' + base64(signature)
.
Вот пример JWT:
Заголовок:
{
"alg": "RS256",
"typ": "JWT",
"kid": "42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a"
}
Полезная нагрузка:
{
"iss": "myservice@myproject.iam.gserviceaccount.com",
"iat": 1493833746,
"aud": "myservice.appspot.com",
"exp": 1493837346,
"sub": "myservice@myproject.iam.gserviceaccount.com"
}
Использование токена доступа:
Пример, запускающий экземпляр виртуальной машины.Замените PROJECT_ID, ZONE и INSTANCE_NAME.Этот пример для Windows.
curl -v -X GET -H "Authorization: Bearer <access_token_here>" ^
https://www.googleapis.com/compute/v1/projects/%PROJECT_ID%/zones/%ZONE%/instances/%INSTANCE_NAME%/start
Compute Engine Service Account:
Ответ Дастина для этого случая верный, но я приведу для полноты с некоторой дополнительной информацией.
Эти учетные данные автоматически создаются для вас GCP и получаются из метаданных экземпляра виртуальной машины.Разрешения контролируются Cloud API access scopes
в консоли Google.
Однако эти учетные данные имеют некоторые ограничения.Чтобы изменить учетные данные, сначала необходимо остановить инстанс виртуальной машины.Кроме того, поддерживаются не все разрешения (роли).
from google.auth import compute_engine
cred = compute_engine.Credentials()
Учетные данные учетной записи службы:
Пока вы не поймете все типы учетных данных и их варианты использования,это учетные данные, которые вы будете использовать для всего, кроме gcloud
и gsutil
.Понимание этих учетных данных значительно упростит работу с Google Cloud при написании программ.Получить учетные данные из файла Json учетной записи службы Google очень просто.Единственный элемент, на который следует обратить внимание, это то, что срок действия учетных данных истекает (как правило, 60 минут), и их необходимо обновлять или создавать заново.
gcloud auth print-access-token
НЕ рекомендуется.Учетные данные учетной записи службы рекомендуются Google.
Эти учетные данные создаются консолью, gcloud или с помощью программ / API.Разрешения назначаются кредиторам IAM и действуют внутри Compute Engine, App Engine, Firestore, Kubernetes и т. Д., А также в других средах вне Google Cloud.Эти учетные данные загружаются из Google Cloud и хранятся в файле Json.Обратите внимание на параметр scopes
.Это определяет разрешения, которые предоставляются полученному объекту учетных данных.
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = 'service-account-credentials.json'
from google.oauth2 import service_account
cred = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
Учетные данные Google OAuth 2.0:
Эти учетные данные получены из полного потока OAuth 2.0.Эти учетные данные создаются при запуске браузера для доступа к учетным записям Google для авторизации доступа.Этот процесс намного сложнее и требует значительного количества кода для реализации и требует встроенного веб-сервера для обратного вызова для авторизации.
Этот метод предоставляет дополнительные функции, такие как возможность запуска всего в браузереНапример, вы можете создать браузер файлов облачного хранилища, но будьте осторожны, чтобы понять последствия для безопасности.Этот метод используется для поддержки входа в Google и т. Д. Мне нравится использовать этот метод для аутентификации пользователей перед тем, как разрешить размещение на веб-сайтах и т. Д. Возможности безграничны с правильно авторизованными идентификаторами и областями OAuth 2.0.
Пример кода с использованием google_auth_oauthlib
:
from google_auth_oauthlib.flow import InstalledAppFlow
flow = InstalledAppFlow.from_client_secrets_file(
'client_secrets.json',
scopes=scope)
cred = flow.run_local_server(
host='localhost',
port=8088,
authorization_prompt_message='Please visit this URL: {url}',
success_message='The auth flow is complete; you may close this window.',
open_browser=True)
Пример кода с использованием библиотеки requests_oauthlib
:
from requests_oauthlib import OAuth2Session
gcp = OAuth2Session(
app.config['gcp_client_id'],
scope=scope,
redirect_uri=redirect_uri)
# print('Requesting authorization url:', authorization_base_url)
authorization_url, state = gcp.authorization_url(
authorization_base_url,
access_type="offline",
prompt="consent",
include_granted_scopes='true')
session['oauth_state'] = state
return redirect(authorization_url)
# Next section of code after the browser approves the request
token = gcp.fetch_token(
token_url,
client_secret=app.config['gcp_client_secret'],
authorization_response=request.url)