Google cloud platform GCP服务\帐户\访问\尝试使用部署管理器部署实例时被拒绝

Google cloud platform GCP服务\帐户\访问\尝试使用部署管理器部署实例时被拒绝,google-cloud-platform,service-accounts,google-cloud-iam,google-deployment-manager,Google Cloud Platform,Service Accounts,Google Cloud Iam,Google Deployment Manager,我是google cloud platform deployment manager的新手,我正在尝试部署一个实例,该实例附带了我需要的服务帐户和必要的api。我在实例模板中附加服务帐户和api的代码如下: - email: <service-account-email@developer.gserviceaccount.com> scopes: - https://www.googleapis.com/auth/cloud-platform

我是google cloud platform deployment manager的新手,我正在尝试部署一个实例,该实例附带了我需要的服务帐户和必要的api。我在实例模板中附加服务帐户和api的代码如下:

     - email: <service-account-email@developer.gserviceaccount.com>
       scopes:
       - https://www.googleapis.com/auth/cloud-platform
       - https://www.googleapis.com/auth/compute
       - https://www.googleapis.com/auth/servicecontrol
       - https://www.googleapis.com/auth/service.management.readonly
       - https://www.googleapis.com/auth/logging.write
       - https://www.googleapis.com/auth/monitoring.write
       - https://www.googleapis.com/auth/trace.append
       - https://www.googleapis.com/auth/devstorage.read_write
-电子邮件:
范围:
- https://www.googleapis.com/auth/cloud-platform
- https://www.googleapis.com/auth/compute
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/trace.append
- https://www.googleapis.com/auth/devstorage.read_write
执行代码部署实例后,我遇到以下错误消息:

- code: RESOURCE_ERROR
  location: /deployments/gcpnetwork/resources/instance name
  message: "{\"ResourceType\":\"compute.v1.instance\",\"ResourceErrorCode\":\"SERVICE_ACCOUNT_ACCESS_DENIED\"\
    ,\"ResourceErrorMessage\":\"The user does not have access to service account '<service-account-email@developer.gserviceaccount.com>'.\
    \  User: 'service-account-id-number@cloudservices.gserviceaccount.com'.  Ask a project owner\
    \ to grant you the iam.serviceAccountUser role on the service account\"}"
-代码:资源\u错误
位置:/deployments/gcpnetwork/resources/instance name
消息:{\'ResourceType\':\'compute.v1.instance\',\'ResourceErrorCode\':\'服务\帐户\访问\拒绝\'\
,\“ResourceErrorMessage\”:\“用户无权访问服务帐户“”\
\用户:'服务帐户id-number@cloudservices.gserviceaccount.com’问问项目负责人\
\授予您服务帐户\“}上的iam.serviceAccountUser角色

我已在I AM-IAM&Admin控制台下为服务帐户和服务帐户用户分配了适当的权限,但没有获胜的希望。我也是项目所有者,可以完全访问所有GCP资源。我有什么遗漏或做错的吗?我还试图模拟服务帐户,但仍然不起作用,请帮助澄清这一点。

您用于创建实例的标识没有角色
角色/iam.serviceAccountUser
。创建和管理使用服务帐户的实例需要此角色


我设法找到了解决问题的方法,而没有像错误所暗示的那样通过IAM用户角色。该错误是由于尝试直接在部署管理器的实例模板中附加服务帐户造成的。这会导致部署管理器认为,在部署实例时,您正在尝试创建一个新的服务帐户,但事实并非如此,因为我试图在现有项目中使用默认的服务帐户。因此,通过以下方式直接附加服务帐户电子邮件:

 - email: <service-account-email@developer.gserviceaccount.com>
   scopes:
   - https://www.googleapis.com/auth/cloud-platform
   - https://www.googleapis.com/auth/compute
   - https://www.googleapis.com/auth/servicecontrol
   - https://www.googleapis.com/auth/service.management.readonly
   - https://www.googleapis.com/auth/logging.write
   - https://www.googleapis.com/auth/monitoring.write
   - https://www.googleapis.com/auth/trace.append
   - https://www.googleapis.com/auth/devstorage.read_write
 - email: default
   scopes:
   - https://www.googleapis.com/auth/compute
   - https://www.googleapis.com/auth/servicecontrol
   - https://www.googleapis.com/auth/service.management.readonly
   - https://www.googleapis.com/auth/logging.write
   - https://www.googleapis.com/auth/monitoring.write
   - https://www.googleapis.com/auth/trace.append
   - https://www.googleapis.com/auth/devstorage.read_write
 - email: default
   scopes:
   - https://www.googleapis.com/auth/cloud-platform
这允许部署管理器在现有项目中选择默认服务帐户。还请注意,具有范围
-https://www.googleapis.com/auth/cloud-platform
在范围列表中,您可以访问所有实例api。因此,通过删除
-https://www.googleapis.com/auth/cloud-platform
从范围列表中选择并以这种方式使用:

 - email: <service-account-email@developer.gserviceaccount.com>
   scopes:
   - https://www.googleapis.com/auth/cloud-platform
   - https://www.googleapis.com/auth/compute
   - https://www.googleapis.com/auth/servicecontrol
   - https://www.googleapis.com/auth/service.management.readonly
   - https://www.googleapis.com/auth/logging.write
   - https://www.googleapis.com/auth/monitoring.write
   - https://www.googleapis.com/auth/trace.append
   - https://www.googleapis.com/auth/devstorage.read_write
 - email: default
   scopes:
   - https://www.googleapis.com/auth/compute
   - https://www.googleapis.com/auth/servicecontrol
   - https://www.googleapis.com/auth/service.management.readonly
   - https://www.googleapis.com/auth/logging.write
   - https://www.googleapis.com/auth/monitoring.write
   - https://www.googleapis.com/auth/trace.append
   - https://www.googleapis.com/auth/devstorage.read_write
 - email: default
   scopes:
   - https://www.googleapis.com/auth/cloud-platform
这是我所需要的,因为我不想访问所有的实例api。但如果您希望访问所有实例api,则只需通过以下方式指定云平台范围的默认值:

 - email: <service-account-email@developer.gserviceaccount.com>
   scopes:
   - https://www.googleapis.com/auth/cloud-platform
   - https://www.googleapis.com/auth/compute
   - https://www.googleapis.com/auth/servicecontrol
   - https://www.googleapis.com/auth/service.management.readonly
   - https://www.googleapis.com/auth/logging.write
   - https://www.googleapis.com/auth/monitoring.write
   - https://www.googleapis.com/auth/trace.append
   - https://www.googleapis.com/auth/devstorage.read_write
 - email: default
   scopes:
   - https://www.googleapis.com/auth/compute
   - https://www.googleapis.com/auth/servicecontrol
   - https://www.googleapis.com/auth/service.management.readonly
   - https://www.googleapis.com/auth/logging.write
   - https://www.googleapis.com/auth/monitoring.write
   - https://www.googleapis.com/auth/trace.append
   - https://www.googleapis.com/auth/devstorage.read_write
 - email: default
   scopes:
   - https://www.googleapis.com/auth/cloud-platform

我希望这一点足够清楚,可以帮助任何遇到同样问题的人。

我查看了谷歌文档,并遵循了您的建议,但仍然失败。我为默认服务帐户和云api服务添加了两个角色,但仍然拒绝服务帐户的访问。为了澄清,我从IAM控制台添加了角色,还创建了一个自定义角色,并将其直接添加到服务帐户中。我的问题是如何操作。@ElisiusLegodi问题中的错误消息非常具体。这意味着您没有将角色应用于正确的标识。使用CLI并列出分配给服务帐户的角色。在你的问题中公布这些细节。注意:所有者是一个旧角色,不具有所有权限。我运行了服务帐户和云服务帐户的以下代码,以查看附加到每个帐户的权限。也许您可以帮助我确定需要添加或删除哪些权限
gcloud项目获取iam策略项目id \--flant=“bindings[].members”\--format='table(bindings.role)\--filter=“bindings.members:*******-compute@developer.gserviceaccount.com"
输出:
ROLE roles/compute.admin roles/owner roles/storage.admin
云服务帐户的输出是:
ROLE roles/compute.admin roles/compute.imageUser roles/compute.instanceAdmin.v1 roles/compute.networkAdmin roles/compute.osadmin roles/editor roles/iam.serviceAccountTokenCreatorroles/iam.serviceAccountUser roles/servicebroker.admin roles/storage.admin
错误消息指定缺少所需角色的服务帐户的名称。该服务帐户缺少您正在运行deployment manager的项目中的角色。把这些细节放在你的问题中,而不是作为评论。在末尾附近添加“更新”部分。记住两条。项目和角色。由于您正在屏蔽服务帐户电子邮件(这不是必需的),我无法分辨哪个是哪个。另一项。您的问题列出了范围。作用域不授予权限,它们用于限制分配给计算实例的权限。分配给服务帐户的角色是权限的起始集。您正在将这些权限限制为指定范围内的等效权限。而是向服务帐户授予所需的权限。然后对实例使用scope
云平台
。在IAM开发之前,传统角色(如
Owner
)和权限(如Compute Engine
Scopes
)是旧方法。你不正确地把它们混在一起了。