如何在不使用本地服务帐户密钥文件的情况下从 Cloud Run 服务访问 Google Cloud Storage 存储桶?

mar*_*186 3 google-cloud-storage google-cloud-platform google-cloud-run

我刚刚部署了一个 Cloud Run REST API 应用程序,该应用程序使用 Google Cloud Storage API 从存储桶以及该存储桶内的文件夹中获取最后一个文件。这是我正在使用的代码:

import os
import logging
from flask import Flask
from flask import request, jsonify, render_template
from google.oauth2 import service_account
from google.cloud import storage
from bson.json_util import dumps


app = Flask(__name__)

storage_client = storage.Client.from_service_account_json('sa.json')

@app.route('/')
# API Version 1.0
def index():
    """Welcome to Last File API Version 1.0."""
    button_text = "Add File"
    return render_template('main.html', button_text=button_text)

@app.route("/last_file_m_individual/", methods=["GET"])
def list_m_individual_files():
    """List all files in GCP bucket."""
    bucketName = request.args.get('bucketname')
    bucketFolder = request.args.get('bucketfolder')
    bucket = storage_client.get_bucket(bucketName)
    files = bucket.list_blobs(prefix=bucketFolder)
    fileList = [file.name for file in files if '.' in file.name]
    last_file_pep = fileList[-1]
    last_file_p = last_file_pep.split("/")
    last_file = last_file_p[-1]
    return last_file

@app.errorhandler(500)
def server_error(e):
    # Log the error and stacktrace.
    logging.exception('An error occurred during a request.')
    return 'An internal error occurred.', 500

if __name__ == "__main__":
    app.run(debug=True,host='0.0.0.0',port=int(os.environ.get('PORT', 8080)))
Run Code Online (Sandbox Code Playgroud)

如果本地没有服务帐户密钥文件,如何在 Google Cloud Storage 和 Cloud Run 之间进行服务到服务身份验证?

提前致谢。

Ste*_*ren 6

在 Cloud Run 上,由于容器内存在容器实例元数据服务器,Python 的 Cloud Storage 客户端库将自动获取Cloud Run 服务身份的凭据。在这里阅读更多内容