当前位置: 首页 > 知识库问答 >
问题:

如何从云运行服务访问Google云存储桶而不使用本地服务帐户密钥文件?

施招
2023-03-14

我刚刚部署了一个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)))

如果没有本地的服务帐户密钥文件,我如何在Google云存储和云运行之间进行服务对服务的身份验证?

提前道谢。

共有1个答案

韩弘壮
2023-03-14

在Cloud Run上,Python的Cloud Storage client library将自动获取Cloud Run服务标识的凭据,这要归功于容器中存在的容器实例元数据服务器。在此阅读更多信息

 类似资料:
  • 我已经创建了一个Google云平台服务帐户,,具有存储管理员()角色。 现在,我希望限制此帐户,使其只能访问特定的谷歌云存储(GCS)存储桶()。 现在的问题是,可以访问所有GCS存储桶。我无法从其他GCS存储桶中删除,因为被继承。 那我该怎么办?

  • 我正在尝试使用django-storages为带有服务帐户json文件的google云存储桶授予权限。但是,只有当我向所有具有对象视图权限的用户授予访问权限时,才能访问桶中的项目。我如何限制桶的公共访问。

  • 我正试图从Python脚本中获得一个服务帐户来在Google Cloud Storage中创建Blob,但我遇到了凭据问题。 如果我将环境变量设置为 然后重新运行脚本。但是,我希望它在创建帐户的脚本的一个实例中运行,并继续在桶中创建必要的文件。如果我知道我的json凭据文件在哪里,我如何访问my_bucket。

  • 我正在调查AWS/Google云基础架构系统是否可以混合,我的要求之一是从一个系统到另一个系统的安全和简单的身份验证。目前,我需要从一个Google Cloud VM实例连接到一个受限的AWS S3 bucket。 我的问题通常是:有没有办法做到这一点,什么是最好的方法。我相信每个人都希望有机会使用多个云提供商为他们的基础设施提供高安全性、易用性和维护性。 经过一些研究,我发现唯一可能的方法是通过

  • 我想使用gsutil和服务帐户在命令行上访问Goolge播放报告。有一个云存储URI,格式为gs://bucket\u name,我可以用我的用户帐户列出和下载报告,但不能用我创建的服务帐户。错误总是相同的: 我已向服务帐户授予了所有必需的权限,因此我不明白为什么用户帐户可以使用,而服务帐户却无法使用。 所以如果你知道如何帮助我,我会非常感谢你。

  • 我正在尝试编写一个Java程序,将Vault导出数据下载到Google云存储桶中,因为导出数据在两周后被删除。Vault数据与典型的GCS存储桶和对象标识关联,因此可能存储在GCS中。似乎有两个Java客户端库,com。谷歌。云存储和com。谷歌。应用程序编程接口。服务。存储,它似乎完成了我需要的功能,但以不同的方式工作,并使用不同的身份验证源(凭据对象)。如果我使用com。谷歌。应用程序编程接口