Ali*_*irB 6 google-cloud-platform google-cloud-run
我正在努力为服务帐户启用部署到云运行。我的逻辑看起来是这样的:
gcloud auth activate-service-account \
cloud-run-deployer@my-project.iam.gserviceaccount.com \
--key-file=my-project-123123213.json
gcloud run deploy my-project-action \
--image "gcr.io/my-project/my-project-action:dev" \
--project my-project \
--verbosity debug \
--region us-central1 \
--allow-unauthenticated \
--platform managed
Run Code Online (Sandbox Code Playgroud)
这失败了:
HttpForbiddenError: HttpError accessing <https://us-central1-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/my-project/services/my-project-action?alt=json>: response: <{'status': '403', 'content-length': '126', 'x-xss-protection': '0', 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 'vary': 'Origin, X-Origin, Referer', 'server': 'ESF', '-content-encoding': 'gzip', 'cache-control': 'private', 'date': 'Wed, 01 Jan 2020 23:08:29 GMT', 'x-frame-options': 'SAMEORIGIN', 'alt-svc': 'quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000', 'content-type': 'application/json; charset=UTF-8'}>, content <{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
>
ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission
Run Code Online (Sandbox Code Playgroud)
我已按照https://cloud.google.com/run/docs/reference/iam/roles#additional-configuration的步骤操作我的服务帐户。例如。它具有项目级别roles/run.admin和roles/iam.serviceAccountUser. 我也尝试过给予它roles/editor或roles/owner用于该项目,但结果相同。123213123123-compute@developer.gserviceaccount.com我可以在我的用户上看到这cloud-run-deployer@my-project.iam.gserviceaccount.com是一个服务帐户用户。
如果我使用 进行身份验证,我可以使用相同的部署命令进行部署gcloud auth login。
使用cloud-run-deployer@my-project.iam.gserviceaccount.com相同的身份验证方法,我能够将新的 docker 映像推送到容器注册表,因此我认为身份验证过程有效,但我缺少一些权限或云运行部署的权限。
顺便说一句,我正在从cloud-sdkdocker 映像进行部署。
Chr*_*nde 12
我尝试重现这个问题,我可以说这对我有用。与 Google Cloud 中的其他服务一样,Google Cloud Run 的问题在于它们使用服务身份。
在执行过程中,Cloud Run 修订版使用服务帐号作为其身份。这意味着,当您的代码使用 Google Cloud 客户端库时,它会自动从当前 Cloud Run 修订版的运行时服务帐号获取并使用凭据。该策略称为“应用程序默认凭据”。
如此处所述,默认情况下:
Cloud Run 修订版使用Compute Engine 默认服务帐号(PROJECT_NUMBER-compute@developer.gserviceaccount.com),该帐号具有项目 > 编辑者 IAM 角色。这意味着默认情况下,您的 Cloud Run 修订版具有对 Google Cloud 项目中所有资源的读写访问权限。
这意味着您可以使用计算引擎默认服务帐户来进行部署(如果您愿意)。还建议通过分配具有更受限制的 IAM 角色的专用服务账户,为每个 Cloud Run 服务授予更精细的权限。
如果您想创建一个新的服务帐户并将其用作将容器部署到 Google Cloud Run 的帐户,您将需要:
创建一个具有执行问题中提到的部署所需权限的服务帐户。一般来说,您将需要:
run.services.create和run.services.update。iam.serviceAccounts.actAs最后一项是最重要的。由于您想使用非默认服务身份,因此帐户或部署者必须拥有iam.serviceAccounts.actAs正在部署的服务帐户的权限,如您在此处看到的。
--service-account,如下所示: gcloud run deploy my-project-action \
--image "gcr.io/my-project/my-project-action:dev" \
--project my-project \
--verbosity debug \
--region us-central1 \
--allow-unauthenticated \
--platform managed \
--service-account [SERVICE_ACCOUNT]
Run Code Online (Sandbox Code Playgroud)
它应该可以使用gcloud run deploy,但如果不行,你也可以尝试一下gcloud beta run deploy。
您可以在此处查看有关该--service-account标志的更多信息,但总而言之:
与服务修订关联的 IAM 服务账户的电子邮件地址。服务帐户代表正在运行的修订版本的身份,并确定修订版本具有哪些权限。如果未提供,修订将使用项目的默认服务帐户。
我希望它有帮助。
| 归档时间: |
|
| 查看次数: |
9194 次 |
| 最近记录: |