首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用自定义服务帐户在GCP中创建VM时,KMS权限出现400错误

使用自定义服务帐户在GCP中创建VM时,KMS权限出现400错误
EN

Stack Overflow用户
提问于 2021-07-16 03:47:53
回答 1查看 942关注 0票数 0

我正在使用Terraform创建一个VM实例和网络,Compute磁盘,它连接到上述实例,该磁盘的快照和一个KMS密钥环和密钥来加密数据。

我使用自己创建的服务帐户对GCP进行身份验证,使用以下块:

credentials = file("gcp-account.json")

该帐户具有下列权限:

Encrypter/Decrypter

  • Compute

  • Cloud管理

  • Cloud CryptoKey管理

  • 计算网络Admin

  • Editor

然后,在google_compute_snapshotgoogle_compute_disk块中,我为请求提供了kms_key_self_link和服务帐户,以使用新创建的KMS密钥和我的自定义服务帐户加密数据:

代码语言:javascript
运行
AI代码解释
复制
kms_key_self_link       = var.kms_key_selflink
kms_key_service_account = var.service_account

我在google_compute_instance块中做了同样的事情,并在boot_diskattached_disk中提供了kms_key_self_link,并指定VM应该为请求使用自定义服务帐户:

代码语言:javascript
运行
AI代码解释
复制
  service_account {
    email  = var.service_account
    scopes = []
  }

然后,在运行terraform apply时,我会得到以下错误:

错误:错误创建实例: googleapi: error 400:当使用密钥项目/{项目名称}/位置/密钥环/{密钥环名称}/加密键/{密钥名}:资源项目/{项目名称}/位置/{位置}/密钥环/{密钥环}/{密钥名}:‘(或者可能不存在)时,云KMS错误。

当我授予

角色/cloudkms.cryptoKeyEncrypterDecrypter.加密密钥

对Compute Engine Service Agent的权限,则脚本运行良好。

代码语言:javascript
运行
AI代码解释
复制
data "google_iam_policy" "kms_key_encrypt_decrypt" {
  binding {
    role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

    members = ["serviceAccount:service{{PROJECT_NUMBER}}@computesystem.iam.gserviceaccount.com"]
  }
}

resource "google_kms_crypto_key_iam_policy" "crypto_key" {
  crypto_key_id = google_kms_crypto_key.key.id
  policy_data   = data.google_iam_policy.kms_key_encrypt_decrypt.policy_data
}

但是,我更喜欢使用我的所有资源,只使用我的自定义服务帐户来处理请求,而不以任何方式涉及默认的Compute服务代理。

我检查了Compute Engine Service Agent分配了哪些角色,只有一个:

计算引擎服务代理

并将完全相同的角色分配给我的自定义服务帐户。这没什么用。后来我注意到,这个问题只发生在VM的boot_disk中:

代码语言:javascript
运行
AI代码解释
复制
  boot_disk {
    kms_key_self_link = var.kms_key_selflink

    initialize_params {
      image = var.vm_image
      type  = var.gce_disk_type
    }
  }

当我注释掉kms_key_self_link块中的boot_disk时,其他资源(快照、计算磁盘、附加磁盘)也可以使用kms_key_self_link和自定义服务帐户,而不会出现任何问题。如果我将kms_key_self_link参数留在boot_disk中,问题仍然存在,我需要指定默认代理来解决这个问题。

是否有一种方法可以让我的所有资源只使用自定义服务帐户而不涉及默认的Compute服务代理,而我只是在脚本中遗漏了一些东西,或者默认代理需要保留一些操作?

EN

回答 1

Stack Overflow用户

发布于 2021-07-30 02:25:41

因此,通过提供的答案,如果没有Compute服务代理的参与,就不可能获得所有的资源。它一定有

角色/cloudkms.cryptoKeyEncrypterDecrypter.加密密钥

角色授予,而不管使用的任何其他自定义服务帐户。下面是我在Terraform代码中使用的策略,用于授予它必要的权限:

代码语言:javascript
运行
AI代码解释
复制
data "google_iam_policy" "kms_key_encrypt_decrypt" {
  binding {
    role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

    members = ["serviceAccount:service{{PROJECT_NUMBER}}@computesystem.iam.gserviceaccount.com"]
  }
}

resource "google_kms_crypto_key_iam_policy" "crypto_key" {
  crypto_key_id = google_kms_crypto_key.key.id
  policy_data   = data.google_iam_policy.kms_key_encrypt_decrypt.policy_data
}

感谢大家的回答。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68408499

复制
相关文章
载入java VM时windows出现错误:2 的解决方法
该安装包运行时需用到JAVA运行环境(JRE),JDK默认的安装路径是C:\Program Files\Java,有些安装包默认从此处找JRE环境变量,如果你的JDK是自定义安装目录的话,就会出现上述错误。
全栈程序员站长
2022/07/25
9K0
载入java VM时windows出现错误:2 的解决方法
通过Kyverno使用KMS、Cosign和工作负载身份验证容器镜像
随着软件供应链攻击的增加,保护我们的软件供应链变得更加重要。此外,在过去几年中,容器的采用也有所增加。有鉴于此,对容器镜像进行签名以帮助防止供应链攻击的需求日益增长。此外,我们今天使用的大多数容器,即使我们在生产环境中使用它们,也容易受到供应链攻击。在传统的 CI/CD 工作流中,我们构建镜像并将其推入注册中心。供应链安全的一个重要部分是我们构建的镜像的完整性,这意味着我们必须确保我们构建的镜像没有被篡改,这意味着保证我们从注册中心中提取的镜像与我们将要部署到生产系统中的镜像相同。证明镜像没有被篡改的最简单和最好的方法之一(多亏了 Sigstore)是在构建之后立即签名,并在允许它们部署到生产系统之前验证它。这就是 Cosign 和 Kyverno 发挥作用的地方。
CNCF
2022/04/19
5K0
在eclipse中使用Tomcat8.5时,出现了如下错误:
在建立Tomcat服务时,eclipse会自动生成一个Servers的项目. 在这个项目中,找到你部署项目的服务文件夹. 在这个文件夹下有一个"server.xml"文件,打开这个文件,删除里面对应项目的Context节点即可。
兮动人
2021/06/11
3.8K0
在eclipse中使用Tomcat8.5时,出现了如下错误:
如何创建MySQL用户帐户和授予权限
MySQL是最流行的开源关系数据库管理系统。 MySQL服务器允许我们创建大量用户帐户并授予适当的权限,以便用户可以访问和管理数据库。
星哥玩云
2022/08/18
2.7K0
如何创建MySQL用户帐户和授予权限
【SAP SD系列】销售订单创建保存时,出现错误
在创建销售订单时,保存之后,出现如下显示: 点放大镜出现: 出现上面红色错误的时候 怎么解决 解决办法如下: 这个是开启配置了销售订单的合法控制   属于外贸关税的配置里面的   要关闭订单类型的合法控制检查即可 路径:销售分销-外贸关税-合法控制 凭证控制 把合法控制 由 C 改为 空
matinal
2020/11/17
4.7K0
【SAP SD系列】销售订单创建保存时,出现错误
使用el-upload进行服务端直传时出现错误
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 问题(BUG)集合 🌈 每日一语:BUG不再来临 🌈 项目场景: 使用el-upload标签获取Java服务端签名直传 ---- 问题描述 第一次发送给oss的请求不会携带上数据而第二次就会携带上一次的数据 <el-upload class="avatar-uploader" action="# :data="policyOb
才疏学浅的木子
2022/11/13
2.9K0
使用el-upload进行服务端直传时出现错误
使用 kubeadm 在 GCP 部署 Kubernetes
最近在准备 CKA 考试,所以需要搭建一个 Kubernetes 集群来方便练习.GCP 平台新用户注册送 300 刀体验金,所以就想到用 kubeadm 在 GCP 弄个练练手,既方便又省钱.
用户2443625
2019/01/02
2.3K0
创建您自己的虚拟服务帐户
虚拟服务帐户允许您创建访问令牌,其中用户 SID 是服务 SID,例如NT SERVICE\TrustedInstaller。虚拟服务帐户不需要配置密码,这使其成为限制服务的理想选择,而不必处理默认服务帐户并使用 WSH 锁定它们或使用密码指定域用户。
Khan安全团队
2022/01/18
9790
在Windows 10上使用Hyper-V创建VM
如果您运行的是Windows 10并且系统硬件支持Hyper-V,则可以创建一个独立的存储空间来部署自己的虚拟机并使用它。您可以同时创建一个或多个虚拟机并运行它们。
CloudZ
2018/01/10
1.8K0
在Windows 10上使用Hyper-V创建VM
如果您运行的是Windows 10并且您的系统硬件支持Hyper-V,那么你可以创建一个独立的存储空间来部署自己的虚拟机并使用它。您可以创建一个或多个虚拟机并同时运行它们。
用户1159036
2018/01/10
3.3K0
在Windows 10上使用Hyper-V创建VM
kms 使用
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX (基本不需要这个步骤)
用户6036164
2019/08/14
1.8K0
使用java(jdbc)向mysql中添加数据时出现“unknown column……”错误
这里的date变量其实我是用SimpleDate类设置的是一个字符串类型的数据了,根据上面的叙述,得知这个“+date+”还是需要使用单引号引起来的,如下:
roobtyan
2019/02/21
5.3K0
angular2中在使用路由懒加载时候出现的错误
ERROR in Cannot use 'in' operator to search for 'providers' in null 出现这个问题的原因是,在使用懒加载的时候,没有指定module,没有找到相关的提供信息。 const routes: Routes = [ {path:'login',component:loginComponent}, { path: 'about', loadChildren: './home/home/home.module'},] 以上是修改之前报错的代码:
杭州前端工程师
2018/06/15
5.3K0
ovirt 上创建vm模板的创建与使用
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/79977816
shaonbean
2019/05/26
1.9K0
在使用Vue2.0中使用axios库时,遇到415错误
解决办法:在axios的第三个参数config中,设置请求头信息'Content-Type': 'application/json;charset=UTF-8'
Arebirth
2020/06/19
3.5K0
Typecho评论时可能出现的错误
根据URL得知应该是在发评论的时候出现的错误。很奇怪,因为很久之前这位博友jiuki's blog也给我反馈过一次。说明这问题不是偶然出现的,所以必须要解决才行。
Melody132
2020/03/13
1.6K0
Java|怎么解决postman模拟请求时400错误
在springboot项目中为了测试我们的接口是否正确,我们会利用postman进行测试接口是否正确,当我们在测试时会出现很多错误,最近在测试一个接口时出现了一个400的错误,下面我们就来一起解决它吧!
算法与编程之美
2020/03/12
3K0
在TKE中创建服务-Service
在k8s中 service是搭配着pod使用,service定义了一个服务的入口地址,通过访问service地址访问到对应的pod。
马凌鑫
2019/04/10
3.3K0
Confluence 6 找到在创建 XML 备份的时候出现的错误
错误可能是因为数据库突然不可访问而产生。如果你在你的日志中看到了错误  'Couldn't backup database data' ,这个指南将会帮助你更正这个错误。我们强烈推荐你备份 Confluence 数据库和 Confluence 的 home 目录这种备份方式来备份你的 Confluence 服务器。你可以使用 Restoring Data from other Backups 的方法来恢复你的备份,如果需要的话。如果你对数据库 SQL 并不熟悉的话,我们建议你联系你的数据库管理员来获得相关的帮助。
HoneyMoose
2019/01/31
1.1K0
在 Vue 中创建自定义输入
基于组件的库或框架(如 Vue )可以创建 可重用组件 ,它能在各自应用程序中相互传递数据,这些框架能确保这些数据是一致的,并且(希望)简化了它们的使用方式。
疯狂的技术宅
2019/03/28
6.6K0

相似问题

用KMS键在Terraform中为GCP创建VM时出错(错误创建实例: googleapi: Error 503)

16

Google Directory API -使用服务帐户时出现错误400

11

创建GCP服务帐户密钥时被拒绝的权限

16

在创建新的计算实例但服务帐户具有权限时,GCP中出现权限错误

112

如何禁用GCP服务帐户以创建VM实例?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档