当前位置: 首页 > ops >正文

gcloud cli 使用 impersonate模拟 服务帐号

什么是模拟服务帐号

众所周知, gcloud 登陆的方式有两种

  1. 使用个人帐号, 通常是1个邮箱地址
  2. 使用一个service account 通常是1个 json key 文件

所谓模式服务帐号意思就是, 让操作人员用个人帐号登陆, 但是登陆后所有的操作都是基于另个service account的权限

为什么需要模拟服务帐号

  1. 让操作人员使用服务帐号所有的权限
  2. 让操作人员没有对应的jsonkey file也能使用service account
  3. 让所有的操作的日志记录的操作者 为服务帐号

所需要的权限

假如 我的个人帐号是jason1.pan@maplequad.com
要模拟的sa 是terraform@jason-hsbc@gserviceaccount.com

简单来讲就是让个人帐号具有sa的 roles/iam.serviceAccountTokenCreator 的权限

检查

gateman@MoreFine-S500: github$ gcloud iam service-accounts get-iam-policy terraform@jason-hsbc.iam.gserviceaccount.com   --format=json
{"etag": "ACAB"
}

可见, 并没有

方法有两种

  1. 就是分配该权限给个人帐号
  2. 让个人帐号拥有gcp project owner权限

这里用的是第一种

gateman@MoreFine-S500: github$ gcloud iam service-accounts add-iam-policy-binding terraform@jason-hsbc.iam.gserviceaccount.com     --member="user:jason1.pan@maplequad.com"     --role="roles/iam.serviceAccountTokenCreator"     --project=jason-hsbc
Updated IAM policy for serviceAccount [terraform@jason-hsbc.iam.gserviceaccount.com].
bindings:
- members:- user:jason1.pan@maplequad.comrole: roles/iam.serviceAccountTokenCreator
etag: BwY-I5F2wxU=
version: 1
gateman@MoreFine-S500: github$ gcloud iam service-accounts get-iam-policy terraform@jason-hsbc.iam.gserviceaccount.com   --format=json
{"bindings": [{"members": ["user:jason1.pan@maplequad.com"],"role": "roles/iam.serviceAccountTokenCreator"}],"etag": "BwY-I5F2wxU=","version": 1
}

如何模拟服务帐号

首先登陆个人 帐号
gcloud auth login
gateman@MoreFine-S500: github$ gcloud config list
[core]
account = jason1.pan@maplequad.com
disable_usage_reporting = False
project = jason-hsbcYour active configuration is: [default]
使用gcloud config set auth/impersonate_service_account 命令模拟
gateman@MoreFine-S500: github$ gcloud config set auth/impersonate_service_account terraform@jason-hsbc.iam.gserviceaccount.com
Updated property [auth/impersonate_service_account].
gateman@MoreFine-S500: github$ gcloud config list
[auth]
impersonate_service_account = terraform@jason-hsbc.iam.gserviceaccount.com
[core]
account = jason1.pan@maplequad.com
disable_usage_reporting = False
project = jason-hsbcYour active configuration is: [default]

测试

gateman@MoreFine-S500: github$ gcloud compute instances list
WARNING: This command is using service account impersonation. All API calls will be executed as [terraform@jason-hsbc.iam.gserviceaccount.com].
WARNING: This command is using service account impersonation. All API calls will be executed as [terraform@jason-hsbc.iam.gserviceaccount.com].
NAME                                         ZONE            MACHINE_TYPE    PREEMPTIBLE  INTERNAL_IP              EXTERNAL_IP    STATUS
instance-windows                             europe-west1-c  c3-standard-4                192.168.4.2                             TERMINATED
gke-my-cluster1-my-node-pool1-5cad8c5c-7bv1  europe-west2-a  n2d-highmem-4                192.168.3.30                            RUNNING
gke-my-cluster1-my-node-pool1-5cad8c5c-zjgf  europe-west2-a  n2d-highmem-4                192.168.3.29                            RUNNING
tf-vpc0-subnet0-gpu-vm0                      europe-west2-a  n1-highmem-8    true         192.168.0.56                            TERMINATED
gke-my-cluster1-my-node-pool1-f7d2eb2b-jf2k  europe-west2-b  n2d-highmem-4                192.168.3.31                            RUNNING
gke-my-cluster1-my-node-pool1-f7d2eb2b-zb06  europe-west2-b  n2d-highmem-4                192.168.3.33                            RUNNING
gke-my-cluster1-my-node-pool1-8902d932-dchn  europe-west2-c  n2d-highmem-4                192.168.3.34                            RUNNING
gke-my-cluster1-my-node-pool1-8902d932-x0kk  europe-west2-c  n2d-highmem-4                192.168.3.32                            RUNNING
instance-1                                   europe-west2-c  e2-standard-2                192.168.0.2                             TERMINATED
instance-2                                   europe-west2-c  e2-standard-4   true         192.168.0.3                             TERMINATED
instance-20241201-042218                     europe-west2-c  n2d-highmem-4                192.168.0.54                            TERMINATED
instance-3-jenkins                           europe-west2-c  n1-standard-4                192.168.0.6                             TERMINATED
k8s-master                                   europe-west2-c  n2d-highmem-2   true         192.168.0.3              34.142.35.168  TERMINATED
k8s-node0                                    europe-west2-c  n2d-highmem-4   true         192.168.0.6                             TERMINATED
k8s-node1                                    europe-west2-c  n2d-highmem-4   true         192.168.0.44                            TERMINATED
k8s-node2                                    europe-west2-c  n2d-highmem-4   true         192.168.0.43                            TERMINATED
k8s-node3                                    europe-west2-c  n2d-highmem-4   true         192.168.0.45                            TERMINATED
tf-vpc0-subnet0-main-server                  europe-west2-c  n2d-standard-4  true         192.168.0.35             34.39.2.90     RUNNING
tf-vpc0-subnet0-mysql0                       europe-west2-c  e2-standard-2   true         192.168.0.42                            RUNNING
tf-vpc0-subnet0-vm0                          europe-west2-c  n2-highmem-4    true         192.168.0.51                            RUNNING
tf-vpc0-subnet0-vm1                          europe-west2-c  e2-small        true         192.168.0.7                             TERMINATED
tf-vpc0-subnet0-vm2                          europe-west2-c  e2-small        true         192.168.0.27                            TERMINATED
tf-vpc0-subnet0-vm20                         europe-west2-c  e2-small        true         192.168.0.33                            TERMINATED
tf-vpc0-subnet0-vm21                         europe-west2-c  e2-small        true         192.168.0.193                           TERMINATED
tf-vpc0-subnet0-vm22                         europe-west2-c  n2-highmem-4    true         192.168.0.192                           TERMINATED
tf-vpc0-subnet0-vm3                          europe-west2-c  e2-small        true         192.168.0.29                            TERMINATED
tf-vpc0-subnet0-vpc1-subnet0-vm0             europe-west2-c  e2-small        true         192.168.0.9,192.168.8.3                 TERMINATED
tf-vpc0-subnet1-vm0                          europe-west2-c  e2-small        true         192.168.1.2                             TERMINATED
tf-vpc0-subnet1-vm1                          europe-west2-c  e2-small        true         192.168.1.6                             TERMINATED
tf-vpc1-subnet0-vm0                          europe-west2-c  e2-small        true         192.168.8.2                             TERMINATED

题外:roles/iam.serviceAccountTokenCreator 和 roles/iam.serviceAccountUser的区别

roles/iam.serviceAccountTokenCreator 用于服务帐号模拟

而roles/iam.serviceAccountUser 用于资源绑定

例如当帐号a 想绑定帐号b到1个gcp 资源(例如vm的绑定帐号) 则a必须具有b的 roles/iam.serviceAccountUser 权限

http://www.xdnf.cn/news/20269.html

相关文章:

  • 2025年财会专业人士职业发展认证路径分析
  • 从“帮写文案”到“管生活”:个人AI工具的边界在哪?
  • Transformer架构(详解)
  • 记一次:mysql的json及json数组使用组合使用
  • 【基础-单选】关于UIAbility的启动模式,下列说法错误的是:
  • Redis 事务与 Lua 脚本:原子操作实战指南
  • LeetCode 2461.长度为K子数组中的最大和
  • 【FastDDS】 Entity Policy 之 标准Qos策略
  • OpenHarmony之USB Manager 架构深度解析
  • 【视网膜分割】AFMIP-Net:一种新型的自适应特征调制和隐式提示网络
  • AI、人工智能础: 实体命名!
  • 郭平《常变与长青》读书笔记(第一章)
  • QT之实现点击按钮启动另一个桌面应用程序
  • 【开题答辩全过程】以 停车场管理系统的设计与实现为例,包含答辩的问题和答案
  • 点晴模切ERP与MES系统整合:模切工厂数字化转型关键
  • 内网后渗透攻击--linux系统(横向移动)
  • Python趣味入门:打印与计算初体验
  • 垃圾收集器分类
  • 「数据获取」《中国电力统计年鉴》(1993-2024)(含中国电力年鉴)
  • 分布式数据库的历史演变与核心原理
  • SpringBoot配置文件
  • 【CSP-S】数据结构 ST 表详解
  • 植物大战僵尸融合版安装包,下载安装教程
  • PCDN工作原理的详细步骤
  • Netty从0到1系列之EventLoopGroup
  • Kafka面试精讲 Day 10:事务机制与幂等性保证
  • CUDA默认流的同步行为
  • 项目升级--kafka消息队列的应用
  • 状压 dp --- 数据范围小
  • 雪球科技Java开发工程师笔试题