创建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

相关文章

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in