服务帐号需要哪些预定义 IAM 角色才能完成 Google Cloud Run 快速入门:构建和部署?

2023-11-25

我想将 Google Cloud Run 与 Google App Engine 和 Google Cloud Functions 进行比较。云跑快速入门:构建和部署似乎是一个很好的起点。

我的应用程序默认凭据太宽泛,无法在开发过程中使用。我想使用服务帐户,但我很难配置一个可以完成快速入门而不会出现错误的服务帐户。

问题:

我可以分配给必须正确执行这些命令的服务帐户的预定义角色的最小特权集是什么:

gcloud builds submit --tag gcr.io/{PROJECT-ID}/helloworld
gcloud beta run deploy --image gcr.io/{PROJECT-ID}/helloworld

当通过具有两个角色的服务帐户运行时,第一个命令失败并出现(看似虚假的)错误:Cloud Build Service Account and Cloud Run Admin。我还没有运行第二个命令。

编辑:该错误不是假的。该命令构建映像并将其复制到项目的容器注册表,然后无法将构建日志打印到控制台(权限不足)。

编辑:我运行了第二个命令。它失败了Permission 'iam.serviceaccounts.actAs' denied on {service-account}。我可以通过分配来解决这个问题Service Account User角色。但这允许部署命令充当项目的运行时服务帐户,该帐户具有Editor role 默认情况下。创建一个服务帐户(有效)Viewer and Editor角色并不比使用我的应用程序默认凭据好多少。

所以我应该更改运行时服务帐户权限。这Cloud Run 服务身份文档对最低特权访问配置有这样的说法:

这也会更改项目中所有服务的权限 作为 Compute Engine 和 Google Kubernetes Engine 实例。所以, 最小权限集必须包含所需的权限 适用于 Cloud Run、Compute Engine 和 Google Kubernetes Engine 项目。

不幸的是,文档没有说明这些权限是什么或者哪组预定义角色涵盖了这些权限。

到目前为止我所做的:

  1. 使用开发控制台创建新的 GCP 项目
  2. 使用开发控制台创建一个新的服务帐户Cloud Run Admin role
  3. 使用开发控制台为服务帐户创建(并下载)密钥
  4. 创建(并激活)gcloud项目的配置
$ gcloud config list
[core]
account = {service-account-name}@{project-id}.iam.gserviceaccount.com
disable_usage_reporting = True
project = {project-id}
[run]
region = us-central1
  1. 使用下载的密钥激活服务帐户
  2. 使用开发控制台启用Cloud Run API
  3. 使用开发控制台启用Container RegistrySettingsContainer Analysis API
  4. 创建一个示例应用程序并Dockerfile按照快速入门文档的指示
  5. Run gcloud builds submit --tag gcr.io/[PROJECT-ID]/helloworld
    ...由于缺少云构建权限而失败
  6. Add the Cloud Build Editor角色到服务帐户并重新提交构建
    ...由于缺少存储权限而失败。我没有仔细注意缺少的东西。
  7. Add the Storage Object Admin角色到服务帐户并重新提交构建
    ...由于缺少存储而失败bucket权限
  8. 替换服务帐户的Storage Object Admin角色与Storage Admin角色并重新提交构建
    ...失败了
Error: (gcloud.builds.submit) HTTPError 403:
<?xml version='1.0' encoding='UTF-8'?>
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
{service-account-name} does not have storage.objects.get access to
{number}.cloudbuild-logs.googleusercontent.com/log-{uuid}.txt.</Details>
</Error>
  1. 检查可用角色集和项目自动创建的服务帐户。意识到Cloud Build Service Account角色拥有更多的权限Cloud Build Editor。这让我很惊讶;遗产Editor角色具有“编辑所有资源的访问权限”。
  2. 去除Cloud Build Editor and Storage Admin服务帐户中的角色
  3. Add the Cloud Build Service Account角色到服务帐户并重新提交构建
    ...同样失败HTTP 403错误(缺少日志文件的访问权限)
  4. Check Cloud BuildHistory在开发控制台中;找到成功的构建!
  5. Check Container RegistryImages在开发控制台中;找到图像!

此时我想我可以完成 Google Cloud Run快速入门:构建和部署。但我不想在构建过程中继续处理(看似虚假的)错误消息。


Cloud Run PM 在这里:

我们可以将其分解为所需的两组权限:

# build a container image
gcloud builds submit --tag gcr.io/{PROJECT_ID}/helloworld

你需要:

  1. Cloud Build Editor and Cloud Build Viewer(根据@wlhee)
# deploy a container image
gcloud beta run deploy --image gcr.io/{PROJECT_ID}/helloworld

你需要做两件事:

  1. 授予您的服务帐户Cloud Run Deployer角色(如果您想更改 IAM 策略,例如公开部署服务,您需要Cloud Run Admin).
  2. 跟着附加部署说明授予该服务帐户部署您的服务帐户的能力
#1
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:{service-account-name}@{project-id}.iam.gserviceaccount.com" \
  --role="roles/run.developer"

#2
gcloud iam service-accounts add-iam-policy-binding \
  [email protected] \
  --member="serviceAccount:{service-account-name}@{project-id}.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

编辑:如上所述,后者授予您的服务帐户能够actAs运行时服务帐户。该服务帐户的角色取决于它需要访问的内容:如果 Run/GKE/GCE 唯一访问的是 GCS,则给它类似的内容Storage Object Viewer而不是编辑器。我们还在研究每个服务的身份,因此您可以创建一个服务帐户并使用具有最低权限的内容“覆盖”默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务帐号需要哪些预定义 IAM 角色才能完成 Google Cloud Run 快速入门:构建和部署? 的相关文章

随机推荐

  • Google PlusOne 按钮在 Chrome 上出现错误

    Google PlusOne 在 Chrome 上出现错误 Uncaught ReferenceError iframes is not defined fastbutton 19 Uncaught ReferenceError ifram
  • 如何使用 window.open 设置文件名

    我正在尝试下载由 JavaScript 计算的临时结果 假设我有一个字符串str 我想下载一个文件包含str并将其命名为data csv 我使用以下代码 window open data text csv charset utf 8 str
  • 多线程环境下的文件访问策略(Web App)

    我有一个文件 它是从 Web 服务获取并在 Web 应用程序中本地缓存的一些数据的 XML 表示形式 这个想法是这个数据是very静态的 但只是might改变 因此 我将其设置为缓存到一个文件 并在其上放置一个监视器以检查它是否已被删除 删
  • C# 使用 System.Linq 错误

    为什么 使用 System Linq 可能会导致以下错误 类型或命名空间名称 Linq 确实 命名空间 System 中不存在 参考System Core 然后还有其他人也合并了这个命名空间 但这是主要的在 Net 3 5 及更高版本上 如
  • ADT 插件无法安装:缺少要求:Android 开发工具

    我尝试在 eclipse helios windows 64 位经典上安装 ADT 插件 我收到这个错误 无法完成安装 因为找不到一项或多项所需的项目 正在安装的软件 Android开发工具16 0 1 v201112150204 2385
  • SQL Server 将字符串转换为日期时间

    这并不是询问如何在 MSSQL 中将任意字符串转换为日期时间 例如这个问题 我可以控制字符串格式 但我想知道使用日期字符串更新日期时间字段的 MSSQL 语法是什么 UPDATE MyTable SET MyDate CONVERT dat
  • PDO 更新不替换准备好的语句中的占位符[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下代码更新表格 如果我改变WHERE temp booking id temp booking id 使用实际的当前会话temp id 查询将运行 但将占位符添加到表中 例如 签出 作为值 dat
  • 使用huggingface Trainer 与分布式数据并行

    为了加快性能 我研究了 pytorch分布式数据并行并尝试将其应用于变压器Trainer The DDP 的 pytorch 示例指出这应该at least更快 DataParallel是单进程 多线程 只能在单机上运行 而Distribu
  • 我需要获取我的 firebase 数据库的最后一个子项

    i want to get last child from my firebase data structure in which i only know the reference of received and first child
  • Go 模块拉取旧版本的包

    我正在尝试使用 go 模块将新包添加到我的项目中 该包使用 github com docker docker client 并且在项目之外运行良好 当我跑步时go mod vendor它拉取版本 v1 13 1 的 docker 客户端包
  • 以非多态方式调用虚函数的成本是多少?

    我有一个纯抽象基类和两个派生类 struct B virtual void foo 0 struct D1 B void foo override cout lt lt D1 foo lt lt endl struct D2 B void
  • 如何在 Ubuntu 中的 Visual Studio Code 上开发(运行和调试)Odoo v11 模块?

    是否可以在 Visual Studio Code 上运行和调试 Odoo 如果是 请分享我的配置 视觉工作室代码是 Microsoft 为 Windows Linux 和 macOS 开发的源代码编辑器 它包括对调试 嵌入式 Git 控制
  • 如何在 AS3 中创建自定义 MouseEvent.CLICK 事件(将参数传递给函数)?

    这个问题不仅与 MouseEvent CLICK 事件类型有关 而且与 AS3 中已存在的所有事件类型有关 我阅读了很多有关自定义事件的内容 但直到现在我还不知道如何做我想做的事情 我将尝试解释一下 希望您能理解 这是我的情况的说明 for
  • 使用 ifort 进行数组复制时程序崩溃

    这个程序崩溃了Illegal instruction 4在 MacOSX Lion 和 ifort IFORT 12 1 0 20111011 上 program foo real pointer a b allocate a 5400 5
  • 在画布中拖动时图像闪烁

    我正在画布中拖动图像 但在拖动过程中图像会闪烁 我认为函数调用存在一些问题 我已经实现了 onmousedown onmouseup 和 onmousemove 事件的功能 我在拖动过程中将图像绘制到画布上 这是我的代码 div div
  • 如何在 C++ 中重复字符串多次?

    我想在 C 中的字符串开头插入 n 个空格 或任何字符串 有没有直接的方法可以使用 std strings 或 char 字符串来执行此操作 例如 在 Python 中你可以简单地做 gt gt gt 5 lolcat lolcat 在重复
  • 如何获取进程ID来杀死nohup进程? [关闭]

    Closed 这个问题是与编程或软件开发无关 目前不接受答案 我正在服务器上运行 nohup 进程 当我尝试杀死它时 我的腻子控制台会关闭 这是我尝试查找进程 ID 的方法 ps ef grep nohup 这是杀死命令 kill 9 17
  • 如何保持对话框中的沉浸模式?

    当我的活动显示自定义对话框时 如何维护新的沉浸模式 我使用下面的代码来维护对话框中的沉浸模式 但是使用该解决方案 当我启动自定义对话框时 导航栏会出现不到一秒钟 然后就会消失 以下视频更好地解释了该问题 当导航栏出现时 请查看屏幕底部 ht
  • Flutter:Streambuilder 导致 Firestore 上的读取次数过多

    我正在尝试构建一个简单的报价 Flutter 应用程序 在其中显示报价列 表并允许用户 喜欢 报价 我正在为此使用 Streambuilder 我的问题是 Firestore 使用仪表板显示的读取次数非常多 每个用户几乎 300 次 即使我
  • 服务帐号需要哪些预定义 IAM 角色才能完成 Google Cloud Run 快速入门:构建和部署?

    我想将 Google Cloud Run 与 Google App Engine 和 Google Cloud Functions 进行比较 云跑快速入门 构建和部署似乎是一个很好的起点 我的应用程序默认凭据太宽泛 无法在开发过程中使用 我