Как вы упомянули, в настоящее время GCP аутентифицируется с использованием служебной учетной записи, учетных данных JSON и токенов API. Вместо хранения учетных данных в корзине S3 вы можете использовать AWS Secrets Manager или AWS Systems Manager Parameter Store для хранения учетных данных GCP, а затем извлечь их в записной книжке Jupyter. Таким образом, учетные данные могут быть защищены, и файл учетных данных будет создан из диспетчера секретов только при необходимости.
Это пример кода, который я использовал ранее для подключения к BigQuery из экземпляра SageMaker.
import os
import json
import boto3
from google.cloud.bigquery import magics
from google.oauth2 import service_account
def get_gcp_credentials_from_ssm(param_name):
# read credentials from SSM parameter store
ssm = boto3.client('ssm')
# Get the requested parameter
response = ssm.get_parameters(Names=[param_name], WithDecryption=True)
# Store the credentials in a variable
gcp_credentials = response['Parameters'][0]['Value']
# save credentials temporarily to a file
credentials_file = '/tmp/.gcp/service_credentials.json'
with open(credentials_file, 'w') as outfile:
json.dump(json.loads(gcp_credentials), outfile)
# create google.auth.credentials.Credentials to use for queries
credentials = service_account.Credentials.from_service_account_file(credentials_file)
# remove temporary file
if os.path.exists(credentials_file):
os.remove(credentials_file)
return credentials
# this will set the context credentials to use for queries performed in jupyter
# using bigquery cell magic
magics.context.credentials = get_gcp_credentials_from_ssm('my_gcp_credentials')
Обратите внимание, что исполняющая роль SageMaker должна иметь доступ к SSM и, конечно, другой необходимый маршрут для подключения к GCP. Я не уверен, что это лучший способ. Надеюсь, у кого-то есть лучший способ.