首页 > 编程问答 >在存储桶中创建文件的最小权限原则

在存储桶中创建文件的最小权限原则

时间:2024-08-05 04:28:42浏览次数:12  
标签:python google-cloud-storage

我试图向服务帐户授予一组有限的权限,同时允许在特定存储桶上创建文件。我没有创建自定义角色,而是考虑使用存储桶上预定义的角色。 roles/storage.objectCreator 之后,我通过模拟 SA 运行以下代码行:

但是,当我执行工作流时,我收到权限被拒绝的错误:

storage_client = storage.Client("project")
bucket_name = "bucket"
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob("test.txt")
blob.upload_from_string("Hello World")

我原以为这就足够了,但似乎还不够。我知道我可以创建自定义角色并定义我想要授予它的权限集。但是,是否可以在将范围限制在

[email protected] does not have storage.buckets.get access to the Google Cloud Storage bucket. Permission 'storage.buckets.get' denied on resource (or it may not exist)

角色的情况下上传文件?也许通过编辑 python 代码而不是实例化存储桶对象? objectCreator role? Maybe by editing the python code and not instantiating the bucket object?


是对的, roles/storage.objectCreator 角色应该足以让服务账号在一个 bucket 中创建对象。但是,遇到的错误信息表明服务账号缺少读取 bucket 的权限:

[email protected] does not have storage.buckets.get access to the Google Cloud Storage bucket. Permission 'storage.buckets.get' denied on resource (or it may not exist)

发生这种情况是因为的代码首先尝试使用 storage_client.get_bucket(bucket_name) 获取 bucket 对象。此操作需要 storage.buckets.get 权限,而 roles/storage.objectCreator 角色不包含此权限。

有以下几种解决方案:

1. 授予额外的 storage.buckets.get 权限:

可以授予服务账号 roles/storage.objectViewer 角色,该角色包含 storage.buckets.get 权限。这将允许的代码成功获取 bucket 对象并上传文件。

2. 修改代码以避免获取 bucket 对象:

可以修改代码,直接使用 bucket 名称和对象名称创建 Blob 对象,而无需先获取 bucket 对象:

from google.cloud import storage

storage_client = storage.Client()
bucket_name = "bucket"
blob_name = "test.txt"

blob = storage_client.bucket(bucket_name).blob(blob_name)
blob.upload_from_string("Hello World")

此方法不需要 storage.buckets.get 权限,因为没有直接获取 bucket 对象。

3. 使用自定义角色:

如果想严格控制权限,可以创建一个自定义角色,并仅授予 storage.objects.create storage.objects.update 权限。这将允许服务账号创建和更新对象,而无需任何其他权限。

总结:

推荐使用第二种方法,因为它更简洁并且遵循最小权限原则。如果需要对 bucket 执行其他操作,则可以选择第一种或第三种方法。

标签:python,google-cloud-storage
From: 78832062

相关文章

  • python字典
    字典概念一种数据结构,用于储存键值对键:值=key:value键会有对应的值,键是用来查找值的(字→键,释义→值)字典名={}要在字典里放入多个键值对,就用"{}"把它们包住,键和值之间用":"表示对应,键值对之间用","分隔。用法如果我们要获取某个键的值,在字典名后面跟方括......
  • python+flask计算机毕业设计健康管理系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,随着人们生活水平的提高和健康意识的增强,健康管理已成为社会关注的焦点。传统的健康管理方式往往依赖于纸质记录和医生的口头建议,这......
  • python+flask计算机毕业设计实验室信息化管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今快速发展的科技时代,实验室作为科研与教学的核心场所,其管理效率和信息化水平直接影响到研究成果的质量和速度。传统的实验室管理方式......
  • python+flask计算机毕业设计中国诗词鉴赏网站(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景中国诗词作为中华文化的重要组成部分,承载着千年的历史与文化底蕴。从古至今,诗词一直是文人墨客表达情感、描绘景象的重要工具。然而,随着时......
  • python+flask计算机毕业设计装修公司管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,随着城市化进程的加速和人们生活水平的提高,装修行业迎来了前所未有的发展机遇。然而,传统装修公司管理方式存在诸多弊端,如信息不透明......
  • Python基础算法笔记
    整理自B站视频https://www.bilibili.com/video/BV1uA411N7c5递归1.汉诺塔问题#n个圆盘,从a经过b移动到cdefhanoi(n,a,b,c):ifn>0:#将n-1个圆盘从a经过c移动到bhanoi(n-1,a,c,b)#将最底层的圆盘从a移动到cprint("mov......
  • 24412-Python链接LDAP(Kerbores)认证的Impala
    24412-Python链接LDAP(Kerbores)认证的Impala必须安装pyImpala才行pipinstallimpylaPython3.x链接LDAP(Kerbores)认证的Impala代码fromimpala.dbapiimportconnectimpala_host="172.10.194.101"impala_port="25004"impala_user='huabingood_test&......
  • Python_DAG-有向无环图-igraph
    DAG-有向无环图-igraph安装pipinstallpython-igraphpipinstallpycairopiplist发现Python安装的有igraph包有两个:igraph、python-igraph有向图 有向图(Digraph)是图论中的一种图结构,其中的边(弧)具有方向性,表明从一个节点(顶点)到另一个节点的单向关系。与无向图不同,无向......
  • 【Python系列】深入理解 Python 中的 `nonlocal` 关键字
    ......
  • [python][代码]Python分页工具类
    这段Python代码定义了一个名为Pagination的类,用于实现数据的分页功能。下面是代码的逐行解释:#encoding:utf-8:指定文件的编码格式为UTF-8。importmath:导入Python的数学模块,用于访问数学函数和常量。定义了Pagination类,它继承自object(在Python3中,所有类都隐式地继承自......