警告:您似乎无权访问项目[project]或它不存在

时间:2019-11-06 15:27:54

标签: gcloud google-cloud-iam

我运行以下命令:

gcloud auth activate-service-account --key-file key.json
gcloud config set project my-project

由于某种原因,我收到此错误:

  

警告:您似乎无权访问项目[project]或它不存在。

我在IAM上扮演以下角色:

  • App Engine管理员
  • 云构建编辑器
  • Cloud Scheduler Admin
  • 存储对象创建者
  • 存储对象查看器

有人知道为什么会这样吗?有什么我想念的东西吗?

6 个答案:

答案 0 :(得分:21)

解决此问题的方法可能是在您的Google Cloud Console中启用Cloud Resource Manager API。转到https://console.developers.google.com/apis/api/cloudresourcemanager.googleapis.com/overview?project=<project-id>,然后单击启用。

答案 1 :(得分:4)

当我开始使用Google CLoud Platform时遇到此错误。

问题是我配置/设置了一个不存在的项目(my-kube-project) 作为我的默认项目,请使用以下命令:

gcloud config set project my-kube-project

这是我的解决方法

我必须先列出现有项目:

gcloud projects list

然后我复制了想要的项目的ID,这次再次运行命令:

gcloud config set project gold-magpie-258213

效果很好。

注意:您不能更改项目的 ID Number 的ID,只能更改名称 >。

仅此而已。

我希望这会有所帮助

答案 2 :(得分:1)

尝试通过CircleCI中配置的服务帐户将应用程序部署到Google App Engine并通过将以下角色(权限)附加到我的服务角色来解决该问题时,我遇到了相同的错误:

  • App Engine Deployer
  • App Engine服务管理员
  • 云构建编辑器
  • 存储对象创建者
  • 存储对象查看器

我还启用了 App Engine Admin API ,但不是 Cloud Resource Manager API

答案 3 :(得分:0)

您是这样传递吗?

gcloud auth activate-service-account [ACCOUNT] --key-file key.json 

还是您将帐户留空?该帐户必须是您将用于访问的服务帐户。您也可以像这样指定项目。

gcloud auth activate-service-account [ACCOUNT] --key-file key.json --project=[PROJECT ID]

让我知道。

更新:

只需测试一下,它就可以像我提到的那样工作。

您可以执行--key-file=key.json--key-file key.json

答案 4 :(得分:0)

我认为这是错误的警告消息。尽管该帐户具有我的GCP项目权限并可以成功执行必要的操作,但我仍在其服务帐户上看到相同的警告消息。

由于不相关的问题,您可能会看到此错误。就我而言,我试图从持续集成环境(Circle CI)部署到AppEngine,但是我没有启用App Engine Admin API。启用API后,便可以成功部署。

答案 5 :(得分:0)

<块引用>

警告:您似乎无权访问项目 [$PROJECT_ID] 或它不存在。

警告出现,如果没有至少一个角色授予包含 resourcemanager.projects.get 权限的服务帐户。

换句话说,如果以下命令的结果为空,警告出现:

  1. 收集给定 $SERVICE_ACCOUNT 的所有角色(这适用于任何帐户,而不仅仅是服务帐户):

    gcloud projects get-iam-policy $PROJECT_ID \
    --flatten='bindings[].members' \
    --format='table(bindings.role)' \
    --filter="bindings.members:${SERVICE_ACCOUNT}"
    
    
    #=>
    
    ROLE
    . . .
    
  2. 对于上面收集的每个 $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 并通过 {{ 过滤所有角色可能更容易1}}。

注意:如果您遇到问题,请务必阅读授予资源 here 访问权限的要求。