创建GCP service账号并管理权限

2023-10-05 01:30

本文主要是介绍创建GCP service账号并管理权限,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

列出当前GCP项目的所有service account

我们可以用gcloud 命令
gcloud iam service-accounts list

 gcloud iam service-accounts list
DISPLAY NAME                            EMAIL                                               DISABLED
terraform                               terraform@jason-hsbc.iam.gserviceaccount.com        False
vm-common                               vm-common@jason-hsbc.iam.gserviceaccount.com        False
terraform2                              terraform2@jason-hsbc.iam.gserviceaccount.com       False
Compute Engine default service account  912156613264-compute@developer.gserviceaccount.com  False

当然在gcp console 上也可以查看
在这里插入图片描述


创建1个新的gcp service account

gcloud iam service-accounts create SA_NAME
–description=“DESCRIPTION”
–display-name=“DISPLAY_NAME”

gcloud iam service-accounts create pubsub-publisher-a --description="be used to publish message to topicA"  --display-name="pubsub publisher a"
Created service account [pubsub-publisher-a].gcloud iam service-accounts list
DISPLAY NAME                            EMAIL                                                  DISABLED
terraform                               terraform@jason-hsbc.iam.gserviceaccount.com           False
vm-common                               vm-common@jason-hsbc.iam.gserviceaccount.com           False
pubsub publisher a                      pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com  False
terraform2                              terraform2@jason-hsbc.iam.gserviceaccount.com          False
Compute Engine default service account  912156613264-compute@developer.gserviceaccount.com     False

新的service account 被创建出来了。

当然, 在gcp console 也可以利用UI 创建它.

在这里插入图片描述



分配service account权限

gcloud pubsub topics add-iam-policy-binding projects/jason-hsbc/topics/TopicA --member=serviceAccount:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com --role=roles/pubsub.publisher

上面语句是1个例子, 分配某个pubsub topic(TopicA) 的publish 权限。

gcloud pubsub topics add-iam-policy-binding projects/jason-hsbc/topics/TopicA --member=serviceAccount:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com --role=roles/pubsub.publisher
Updated IAM policy for topic [TopicA].
bindings:
- members:- serviceAccount:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.comrole: roles/pubsub.publisher
etag: BwYGwRVxij4=
version: 1




下面的例子是把storage admin 分配给这个service account

gcloud projects add-iam-policy-binding jason-hsbc --member=serviceAccount:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com --role=roles/storage.admin

gcloud projects add-iam-policy-binding jason-hsbc --member=serviceAccount:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com --role=roles/storage.adminUpdated IAM policy for project [jason-hsbc].

注意上面两个例子是有区别的


第一种 是分配资源粒度的权限

例如 分配某个pubsub subscription 的读权限
某个 BQ table的权限等


第二种是分配项目级别的权限, 通常是reader , editor 和 owner

例如上面的storage admin, pubsub admin等.




其实 还有第三种

就是定义谁(另1个 account) 对这个service account的权限

包括seviceAccountUser等。这个很重要
例如我要用terraform account 去部署1个 cloud run service, 而这个service 必须用 pubsub-publisher-a account 去启动(以获得推送消息权限), 则terraform account必须拥有对于 pubsub-publisher-a的 serviceAccountUser权限

不过较真的话, 这个第3种也是属于第一种(资源粒度), service account 也是一种资源

命令:
gcloud iam service-accounts add-iam-policy-binding pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com --member=serviceAccount:terraform@jason-hsbc.iam.gserviceaccount.com --role=roles/iam.serviceAccountUser

例子:

❯ gcloud iam service-accounts add-iam-policy-binding pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com --member=serviceAccount:terraform@jason-hsbc.iam.gserviceaccount.com --role=roles/iam.serviceAccountUserUpdated IAM policy for serviceAccount [pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com].
bindings:
- members:- serviceAccount:terraform@jason-hsbc.iam.gserviceaccount.comrole: roles/iam.serviceAccountUser
etag: BwYGwZ2IcnA=
version: 1



查看service account的权限

上面已经对权限大概分了类

对于第一种 分配资源粒度的权限

我暂时找不到直接gcloud 命令or UI 查看某个service account对什么资源的权限细节。

但是我们可以查看某个资源的 service account 权限列表

具体点来讲,上面我们已经分配 TopicA 的publisher 权限给 service account pubsub-publisher-a .

1.基于pubsub-publisher-a 去查看 它的TopicA权限我暂时不知道方法
2.基于 TopicA去查看 权限, 是可以见到 pubsub-publisher-a 在其列表内的。

方法1
gcloud 命令

gcloud pubsub topics get-iam-policy projects/jason-hsbc/topics/TopicA
bindings:
- members:- serviceAccount:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.comrole: roles/pubsub.publisher
etag: BwYGwRVxij4=
version: 1

方法2, 通过gcp console
在这里插入图片描述



查看 第二种 项目级别的权限

这个相对简单。

方法一:
gcloud 命令:
gcloud projects get-iam-policy jason-hsbc
–flatten=“bindings[].members”
–format=‘table(bindings.role)’
–filter=“bindings.members:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com”

gcloud projects get-iam-policy jason-hsbc  \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members:pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com"
ROLE
roles/storage.admin

可以看出, 它是列不出资源粒度权限的, 但是可以把storage admin列出来

方法二: gcp console
在这里插入图片描述

查看 第三种 service account 的 User

gcloud command
gcloud iam service-accounts get-iam-policy pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com


❯ gcloud iam service-accounts get-iam-policy pubsub-publisher-a@jason-hsbc.iam.gserviceaccount.com
bindings:
- members:- serviceAccount:terraform@jason-hsbc.iam.gserviceaccount.comrole: roles/iam.serviceAccountUser
etag: BwYGwZ2IcnA=
version: 1

UI上也可以:
在这里插入图片描述
至于为何 上面terraform 账户也拥有 对 pubsub publish a 的owner权限? 因为 terraform 被我设置成了project owenr, 就继承过来了。

这篇关于创建GCP service账号并管理权限的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/3101

相关文章

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c