谷歌云平台服务帐号无法访问项目
Posted
技术标签:
【中文标题】谷歌云平台服务帐号无法访问项目【英文标题】:Google Cloud Platform Service Account is Unable to Access Project 【发布时间】:2020-03-03 03:16:15 【问题描述】:我遇到以下警告:
警告:您似乎无权访问项目 [$PROJECT] 或它不存在。
在本地运行以下命令后:
激活并设置服务帐号:
gcloud auth activate-service-account \
$SERVICE_ACCOUNT \
--key-file=key.json
#=>
Activated service account credentials for: [$SERVICE_ACCOUNT]
选择$PROJECT
作为上述服务帐号:
gcloud config set project $PROJECT
#=>
Updated property [core/project].
WARNING: You do not appear to have access to project [$PROJECT] or it does not exist.
我自己的 GCP 帐户与以下角色相关联:
App 引擎管理员 Cloud Build 编辑器 Cloud Scheduler 管理员 存储对象创建器 存储对象查看器为什么这个服务账号不能set
$PROJECT
?是否有我缺少的角色或权限?
【问题讨论】:
我在尝试gcloud config set project my-project
时看到了同样的情况。我昨天使用的密钥运行良好,我没有对 IAM 进行任何更改。我还验证了我正在使用的密钥的 ID 是在控制台中列出的服务帐户中指定的。
值得注意的是,这是一个警告,而不是错误。尽管收到您详细说明的警告,但我仍然可以成功使用有问题的密钥。收到警告后与 GCP 交互时,您的密钥是否有效?
@eversMcc 是对的。它最终只是一个错误,并且由于与我的gcloud app deploy
命令完全不同的原因而无法正常工作。
【参考方案1】:
此问题的解决方案可能是通过单击启用在您的 Google Cloud Console here 中启用 Cloud Resource Manager API。
【讨论】:
这个解决方案比我选择的答案更适合我。 @bryan 我认为这是正确的答案。 正确答案!【参考方案2】:我认为这是一条错误的警告信息。尽管我的服务帐户对我的 GCP 项目具有权限并且可以成功执行必要的操作,但我在我的服务帐户上看到了相同的警告消息。
由于不相关的问题,您可能会看到此错误。就我而言,我试图从持续集成环境 (Circle CI) 部署到 AppEngine,但我没有启用 App Engine Admin API。启用 API 后,我就能够成功部署。
【讨论】:
你是对的 - 它最终只是一个错误,并且由于我的 gcloud app deploy 命令完全不同的原因而无法正常工作 同意并确认 - 这通常发生在某些内容无效并且仅显示此奇怪的通用错误消息时。当环境变量无效或丢失时,通常会发生这种情况。 就我而言,事实证明我提供了错误的项目名称。 呸,这也发生在我身上!此警告之后的错误才是真正的问题。【参考方案3】:我在开始使用 Google 云平台时遇到了这个错误。
问题是我配置/设置了一个不存在的项目 (my-kube-project
)
使用以下命令作为我的默认项目:
gcloud config set project my-kube-project
我是这样解决的:
我必须先列出我现有的项目:
gcloud projects list
然后我复制了我想要的项目的ID,这次再次运行命令:
gcloud config set project gold-magpie-258213
而且效果很好。
注意:您不能更改项目的ID或编号的ID,您只能更改名称 >.
就是这样。
我希望这会有所帮助
【讨论】:
这对我有用!【参考方案4】:我在尝试通过在 CircleCI 中配置的服务帐户将应用部署到 Google App Engine 时遇到了同样的错误,并通过将以下角色(权限)附加到我的服务角色来解决该错误:
App Engine 部署者 App Engine 服务管理员 Cloud Build 编辑器 存储对象创建器 存储对象查看器我还启用了 App Engine Admin API,但没有Cloud Resource Manager API。
【讨论】:
【参考方案5】:警告:您似乎无权访问项目 [$PROJECT_ID] 或它不存在。
警告将出现如果没有至少一个角色被授予包含resourcemanager.projects.get
权限的服务帐户。
换句话说,如果以下命令的结果为空,警告将出现:
收集给定$SERVICE_ACCOUNT
的所有角色(这适用于任何帐户,而不仅仅是服务帐户):
gcloud projects get-iam-policy $PROJECT_ID \
--flatten='bindings[].members' \
--format='table(bindings.role)' \
--filter="bindings.members:$SERVICE_ACCOUNT"
#=>
ROLE
. . .
对于上面收集的每个$ROLE
,要么:
gcloud iam roles describe $ROLE \
--flatten='includedPermissions' \
--format='value(includedPermissions)' \
--project=$PROJECT_ID | grep \
--regexp '^resourcemanager.projects.get$'
如果$ROLE
是自定义 (projects/$PROJECT_ID/roles/$ROLE
),或者:
gcloud iam roles describe roles/$ROLE \
--flatten='includedPermissions' \
--format='value(includedPermissions)' | grep \
--regexp '^resourcemanager.projects.get$'
如果$ROLE
是策划 (roles/$ROLE
)。
注意:自定义角色和精选角色的 gcloud
命令格式之间的区别在于,难以列出与单个帐户关联的所有角色相关的所有权限。
如果您已确认没有与服务帐户关联的角色包含resourcemanager.projects.get
权限,则:
至少更新一个与具有resourcemanager.projects.get
权限的服务帐户关联的自定义角色:
gcloud iam roles update $ROLE \
--add-permissions=resourcemanager.projects.get \
--project=$PROJECT_ID
#=>
description: $ROLE_DESCRIPTION
etag: . . .
includedPermissions:
. . .
- resourcemanager.projects.get
. . .
name: projects/$PROJECT_ID/roles/$ROLE
stage: . . .
title: $ROLE_TITLE
警告:确保在更新时在此处使用--add-permissions
标志,因为--permissions
标志将删除自定义角色曾经拥有的任何其他权限。
创建自定义角色:
gcloud iam roles create $ROLE \
--description="$ROLE_DESCRIPTION" \
--permissions=resourcemanager.projects.get \
--project=$PROJECT_ID \
--title='$ROLE_TITLE'
#=>
Created role [$ROLE].
description: $ROLE_DESCRIPTION
etag: . . .
includedPermissions:
- resourcemanager.projects.get
name: projects/$PROJECT_ID/roles/$ROLE
stage: . . .
title: $ROLE_TITLE
并将其与服务帐户关联:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$SERVICE_ACCOUNT \
--role=projects/$PROJECT_ID/roles/$ROLE
#=>
Updated IAM policy for project [$PROJECT_ID].
auditConfigs:
. . .
将服务帐户与已包含resourcemanager.projects.get
权限的策划角色相关联,这已在上面讨论过。
如果您想知道哪些精选角色已经包含 resourcemanager.projects.get
权限并且不想制作复杂的 shell 循环,则使用 here 并通过 Permission:resourcemanager.projects.get
过滤所有角色可能会更容易。
注意:如果您遇到问题,请务必阅读授予资源访问权限的要求here。
【讨论】:
以上是关于谷歌云平台服务帐号无法访问项目的主要内容,如果未能解决你的问题,请参考以下文章