服务帐户需要哪些预定义的IAM角色才能完成Google Cloud Run QuickStart:Build and Deploy? [英] What predefined IAM roles does a service account need to complete the Google Cloud Run Quickstart: Build and Deploy?

查看:13
本文介绍了服务帐户需要哪些预定义的IAM角色才能完成Google Cloud Run QuickStart:Build and Deploy?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将Google Cloud Run与Google App Engine和Google Cloud功能进行比较。云运行Quickstart: Build and Deploy似乎是一个很好的起点。

我的应用程序默认凭据范围太广,无法在开发期间使用。我想使用服务帐户,但我很难配置一个可以正确完成快速入门的帐户。

问题:

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

gcloud builds submit --tag gcr.io/{PROJECT-ID}/helloworld
gcloud beta run deploy --image gcr.io/{PROJECT-ID}/helloworld
第一个命令在通过具有两个角色的服务帐户运行时失败,并出现(看似虚假的)错误:Cloud Build Service AccountCloud Run Admin。我尚未运行第二个命令。

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

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

因此,我应该更改运行时服务帐户权限。Cloud RunService Identity文档对最低特权访问配置有以下说明:

这还会更改项目中所有服务的权限 作为Compute Engine和Google Kubernetes引擎实例。所以呢, 最小权限集必须包含所需的权限 对于云运行、计算引擎和Google Kubernetes引擎 项目。

遗憾的是,文档没有说明这些权限是什么,也没有说明哪组预定义的角色涵盖了这些权限。

<%s>

我到目前为止所做的工作:

  1. 使用开发控制台新建GCP项目
  2. 使用开发控制台创建具有Cloud Run Admin角色的新服务帐户
  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. 运行gcloud builds submit --tag gcr.io/[PROJECT-ID]/helloworld
    .由于缺少云构建权限而失败
  6. Cloud Build Editor角色添加到服务帐户并重新提交内部版本
    .由于缺少存储权限而失败。我没有仔细注意丢失的东西。
  7. Storage Object Admin角色添加到服务帐户并重新提交内部版本
    .由于缺少存储存储桶权限而失败
  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 EditorStorage Admin角色
  3. Cloud Build Service Account角色添加到服务帐户并重新提交内部版本
    .失败,并返回相同的HTTP 403错误(缺少对日志文件的获取访问权限)
  4. 查看开发控制台中的Cloud BuildHistory,找到构建成功!
  5. 在开发控制台勾选Container RegistryImages,查找图片!

在这一点上,我想我可以完成Google Cloud RunQuickstart: Build and Deploy。但是我不想在我的构建过程中继续使用(看似虚假的)错误消息。

推荐答案

云运行PM这里:

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

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

您需要:

  1. Cloud Build EditorCloud 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. 按照Additional Deployment Instructions授予该服务帐户部署您的服务帐户的能力
#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 
  PROJECT_NUMBER-compute@developer.gserviceaccount.com 
  --member="serviceAccount:{service-account-name}@{project-id}.iam.gserviceaccount.com" 
  --role="roles/iam.serviceAccountUser"
编辑:如前所述,后者授予您的服务帐户actAs运行时服务帐户的能力。此服务帐户的角色取决于它需要访问的内容:如果唯一运行/GKE/GCE访问的是GCS,那么给它类似于Storage Object Viewer而不是Editor。我们还在处理每个服务的标识,因此您可以创建服务帐户,并用最低权限的内容"覆盖"默认值。

这篇关于服务帐户需要哪些预定义的IAM角色才能完成Google Cloud Run QuickStart:Build and Deploy?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆