标签: google-cloud-iam

gcloud 使用本地密钥和项目限制计算 ssh

我们有一个用户可以通过 SSH 连接到谷歌云平台上的虚拟机。

他的密钥被添加到虚拟机,他可以使用 SSH

gcloud compute ssh name-of-vm

但是,以这种方式连接将始终让 gcloud 尝试更新项目范围的元数据

更新项目 ssh 元数据...失败

失败,因为他只有访问和管理此 VM 的权限

然而很烦人的是,每次他必须以这种方式连接时,他都必须等待 GCP 尝试更新元数据,这是不允许的,然后检查机器上的 sshkeys。

  1. 命令中是否有一个标志可以跳过检查/更新项目范围的 ssh 密钥?

是的,我们可以在实例上“阻止项目范围内的 ssh 密钥”,但这意味着其他项目管理员无法再登录。

我还尝试尽量减少对该用户的访问。

  1. 但是,理想情况下,如果允许他通过 SSH 连接到机器、启动和停止实例并将数据存储到存储桶中,他应该拥有什么权利?

ssh google-cloud-platform gcloud google-cloud-iam

5
推荐指数
1
解决办法
2433
查看次数

如何正确授权对 Google Cloud Storage API 的请求?

我正在尝试使用 Google Cloud Storage JSON API 通过 http 调用从存储桶中检索文件。

我在与存储桶位于同一项目中的 GCE 中的 Container 中卷曲,并且服务帐户具有对存储桶的读取访问权限

这是请求的模式:

https://storage.googleapis.com/{bucket}/{object}
Run Code Online (Sandbox Code Playgroud)

根据 API 控制台,我不需要任何特别的东西,因为服务帐户提供了应用程序默认凭据。但是,我一直有这个:

Anonymous caller does not have storage.objects.get
Run Code Online (Sandbox Code Playgroud)

我还尝试为项目创建一个 API 密钥并将其附加到 url ( https://storage.googleapis.com/{bucket}/{object}?key={key}) 但我仍然遇到相同的 401 错误。

如何授权查询此 API 的请求?

google-cloud-storage google-cloud-iam

5
推荐指数
1
解决办法
2195
查看次数

gcloud 项目所有者权限被拒绝

所以我试图在谷歌云的人工智能平台上运行一个训练作业,用于通过命令行用张量流编写的图像分类器:

gcloud ai-platform jobs submit training my_job \
          --module-name trainer.final_task \
          --staging-bucket gs://project_bucket \
          --package-path trainer/ \
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误:(gcloud.ai-platform.jobs.submit.training) User [myemail@gmail.com] does not have permission to access project [my_project] (or it may not exist): Permission denied on 'locations/value' (or it may not exist).

我不明白这是怎么可能的,因为我在 gcloud 上拥有该项目(使用该电子邮件地址),甚至在 IAM 策略绑定上明确链接到它。有谁之前经历过这个吗?

额外信息:

  • 我以个人身份使用 gcloud,不涉及任何组织。因此,IAM 策略绑定中链接的唯一成员是我和 gcloud 服务帐户。

  • gcloud ai-platform local train当使用相同参数进行本地训练(使用 )时,该代码可以完美运行。

google-cloud-platform gcloud google-cloud-iam gcp-ai-platform-training

5
推荐指数
1
解决办法
5429
查看次数

为 Google 服务帐户电子邮件创建别名?

我已经与我的 Google 服务帐户电子邮件共享了一个 Google 表格,它看起来像:

myappname-service@myappname-266229.iam.gserviceaccount.com

这允许我的应用程序访问该 Google 表格。

我希望能够使用别名为丑陋的自动生成的服务帐户电子邮件 ( myappname-service@myappname-266229.iam.gserviceaccount.com)的自定义电子邮件地址(例如 google@myappname.com)共享 Google 表格。

我怎么能去做这件事?

编辑:

用于与 Google API 交互的代码示例

from google_auth_httplib2 import AuthorizedHttp
from google.oauth2 import service_account
import pygsheets

def _get_gc():
    scope = ['https://www.googleapis.com/auth/spreadsheets']
    credentials = service_account.Credentials.from_service_account_file(
        settings.GOOGLE_SERVICE_AUTH_FILE,
        scopes=scope,
    )
    http = AuthorizedHttp(credentials, http=HTTP)
    logger.info('Created GC creds, returning...')
    return pygsheets.authorize(custom_credentials=credentials, http=http)


def do_something(url):
    gc = _get_gc()
    spreadsheet = gc.open_by_url(url)

Run Code Online (Sandbox Code Playgroud)

google-authentication google-sheets google-cloud-iam

5
推荐指数
1
解决办法
381
查看次数

使用 Roles/storage.legacyBucketWriter 在存储桶中读/写是否不好?

我发现自己使用了很多Roles/storage.legacyBucketWriter,它具有以下权限:

  • 存储桶.get
  • 存储.对象.创建
  • 存储.对象.删除
  • 存储.对象.列表

也许没关系,但使用一个名称中带有遗产的角色对我来说感觉很奇怪......

我也不想创建自定义角色,因为这似乎有点矫枉过正,因为这个角色适合需要。

是的,有一个角色Roles/storage.objectAdmin但它缺少storage.buckets.get权限。

你怎么认为 ?

google-cloud-storage google-cloud-platform google-cloud-iam

5
推荐指数
1
解决办法
7532
查看次数

即使授予“服务帐户令牌创建者”角色后也无法模拟 GCP ServiceAccount

我的 Google Cloud Platform (GCP) 项目中有 2 个 ServiceAccounts

  • 所有者
  • 执行人

所有者 ServiceAccount 附加了 1 个项目范围的角色:

  • “所有者” - 项目

执行者 ServiceAccount 仅附加了 2 个特定角色(如下所示):

  • “服务帐户令牌创建者” - 在所有者 ServiceAccount 上
  • “服务帐户用户”- 在所有者 ServiceAccount 上

在此输入图像描述


现在,我有了 Executor ServiceAccount 的 JSON 密钥文件。我将使用该凭证文件来“模拟”所有者 ServiceAccount。然后我将运行gcloud命令。


这就是我正在做的事情。

#!/bin/bash

# --------------------------------------------------------------

export GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/my-executor-sa-key.json"
echo $GOOGLE_APPLICATION_CREDENTIALS
cat $GOOGLE_APPLICATION_CREDENTIALS

OWNER_EMAIL="owner@my-gcp-project.iam.gserviceaccount.com"
echo $OWNER_EMAIL

# --------------------------------------------------------------

CLUSTER="my-k8s-cluster"
ZONE="asia-east1-a"
PROJECT="my-gcp-project"

MY_COMMAND="gcloud container clusters get-credentials ${CLUSTER} --zone ${ZONE} --project ${PROJECT} --impersonate-service-account=${OWNER_EMAIL}"
echo $MY_COMMAND

# --------------------------------------------------------------

`$MY_COMMAND`

# --------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

运行上述命令后,这是我得到的输出


# -------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

impersonation service-accounts google-cloud-platform gcloud google-cloud-iam

5
推荐指数
1
解决办法
1万
查看次数

我无法部署 Firebase 功能,因为我没有“服务帐户用户”角色

我正在尝试像这样部署 Firebase 功能:

firebase deploy --only functions
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

错误:缺少部署功能所需的权限。您必须拥有服务帐户 xyz@appspot.gserviceaccount.com 的 iam.serviceAccounts.ActAs 权限。要解决此错误,请要求项目所有者通过以下 URL 为您的帐户分配“服务帐户用户”角色: https: //console.cloud.google.com/iam-admin/iam?xyz

我已经通过访问授予自己服务帐户用户权限

身份 -> 服务帐户 -> xyz@appspot.gserviceaccount.com -> 权限 -> + 授予访问权限

我已在 中添加了链接的电子邮件和服务帐户GOOGLE_APPLICATION_CREDENTIALS。我仍然遇到同样的错误。

有任何想法吗?

firebase service-accounts google-cloud-functions google-cloud-iam google-cloud-identity

5
推荐指数
1
解决办法
2590
查看次数

服务帐户没有 storage.objects.get 访问 Google Cloud Storage 对象的权限

我已经设置了一个新的 Firestore 环境,当尝试通过云功能上传然后从存储中读取数据时,出现以下错误:

project_id@appspot.gserviceaccount.com does not have storage.objects.get access to the Google Cloud Storage object

我在网上查看并在 Google 云控制台中添加了Storage Admin此服务帐户的 IAM 权限,但我仍然遇到同样的错误。

以前有人遇到过这个问题吗?我也尝试过只Owner向服务帐户授予角色,但仍然遇到相同的错误。

google-cloud-storage firebase google-cloud-functions google-developers-console google-cloud-iam

5
推荐指数
1
解决办法
2万
查看次数

(Terraform、GCP)错误 403:列出消费者容器服务的权限被拒绝 [projects/335478934851]

GCP上,我尝试使用下面的Terraform代码启用“身份和访问管理(IAM)API”

provider "google" {
  credentials = file("myCredentials.json")
  project     = "myproject-173831"
  region      = "asia-northeast1"
}

resource "google_project_service" "project" {
  service = "iam.googleapis.com"
}
Run Code Online (Sandbox Code Playgroud)

但我收到了这个错误:

读取或编辑 Project Service 时出错:请求List Project Services myproject-173831返回错误:无法列出项目 myproject-173831 启用的服务:googleapi:错误 403:列出使用者容器服务的权限被拒绝 [projects/335478934851]

然后我就无法启用它

在此输入图像描述

所以现在,我尝试添加一个角色来解决上面的这个错误,但是有太多角色可供选择:

在此输入图像描述

我需要选择什么角色?

google-cloud-platform terraform devops google-cloud-iam terraform-provider-gcp

5
推荐指数
1
解决办法
6737
查看次数

JSON 格式的 Google Cloud 服务帐号密钥中的哪些字段应保持私有?

这是我来自 Google 的 JSON 服务帐户密钥的形状。

{
  "type": "service_account",
  "project_id": "",
  "private_key_id": "",
  "private_key": "",
  "client_email": "",
  "client_id": "",
  "auth_uri": "",
  "token_uri": "",
  "auth_provider_x509_cert_url": "",
  "client_x509_cert_url": "",
}
Run Code Online (Sandbox Code Playgroud)

哪些字段应该保密?我的意思是,我会将其中的大部分添加到我的 Git 存储库中,并将私有位添加为环境变量。

保护private_key够了吗?

例如:

帐户.ts

{
  "type": "service_account",
  "project_id": "VALUE",
  "private_key_id": "VALUE",
  "private_key": process.env.PRIVATE_KEY,  // Populating it via env variables
  "client_email": "VALUE",
  "client_id": "VALUE",
  "auth_uri": "VALUE",
  "token_uri": "VALUE",
  "auth_provider_x509_cert_url": "VALUE",
  "client_x509_cert_url": "VALUE",
}
Run Code Online (Sandbox Code Playgroud)

我也应该隐藏吗private_key_id

security service-accounts google-cloud-platform google-cloud-iam

5
推荐指数
1
解决办法
685
查看次数