我想将 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
项目。
不幸的是,文档没有说明这些权限是什么或者哪组预定义角色涵盖了这些权限。
到目前为止我所做的:
- 使用开发控制台创建新的 GCP 项目
- 使用开发控制台创建一个新的服务帐户
Cloud Run Admin
role
- 使用开发控制台为服务帐户创建(并下载)密钥
- 创建(并激活)
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
- 使用下载的密钥激活服务帐户
- 使用开发控制台启用
Cloud Run API
- 使用开发控制台启用
Container Registry
→Settings
→Container Analysis API
- 创建一个示例应用程序并
Dockerfile
按照快速入门文档的指示
- Run
gcloud builds submit --tag gcr.io/[PROJECT-ID]/helloworld
...由于缺少云构建权限而失败
- Add the
Cloud Build Editor
角色到服务帐户并重新提交构建
...由于缺少存储权限而失败。我没有仔细注意缺少的东西。
- Add the
Storage Object Admin
角色到服务帐户并重新提交构建
...由于缺少存储而失败bucket权限
- 替换服务帐户的
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>
- 检查可用角色集和项目自动创建的服务帐户。意识到
Cloud Build Service Account
角色拥有更多的权限Cloud Build Editor
。这让我很惊讶;遗产Editor
角色具有“编辑所有资源的访问权限”。
- 去除
Cloud Build Editor
and Storage Admin
服务帐户中的角色
- Add the
Cloud Build Service Account
角色到服务帐户并重新提交构建
...同样失败HTTP 403
错误(缺少日志文件的访问权限)
- Check
Cloud Build
→History
在开发控制台中;找到成功的构建!
- Check
Container Registry
→Images
在开发控制台中;找到图像!
此时我想我可以完成 Google Cloud Run快速入门:构建和部署。但我不想在构建过程中继续处理(看似虚假的)错误消息。