标签: google-iam

GKE 元数据服务器如何在 Workload Identity 中工作

我最近一直在使用GKE Workload Identity功能。我有兴趣更详细地了解该gke-metadata-server组件的工作原理。

  1. GCP 客户端代码(gcloud或其他语言 SDK)适用于 GCE 元数据方法
  2. http://metadata.google.internal/path
  3. (猜测)GKE_METADATA_SERVER我的节点池上的设置将其配置为解析到该gke-metadata-server节点上的pod。
  4. (猜测)gke-metadata-server带有 --privileged 和主机网络的pod 可以确定源(pod IP?)然后查找 pod 及其服务帐户以检查iam.gke.io/gcp-service-account注释。
  5. (猜测)代理使用 pod 的“伪”身份集(例如[PROJECT_ID].svc.id.goog[[K8S_NAMESPACE]/[KSA_NAME]])调用元数据服务器,以获取在其 Kubernetes 服务帐户上注释的服务帐户的令牌。
  6. 如果此帐户对服务帐户具有令牌创建者/工作负载 ID 用户权限,则来自 GCP 的响应可能是成功的并且包含令牌,然后将令牌打包并设置回调用 Pod,以便对其他 Google API 进行身份验证调用。

我想现在对我来说主要的难题是验证调用 Pod 的身份。最初我认为这会使用 TokenReview API,但现在我不确定 Google 客户端工具如何知道使用安装到 pod 中的服务帐户令牌......

编辑后续问题:

Q1:在第 2 步和第 3 步之间,是否metadata.google.internal通过GKE_METADATA_SERVER节点池上的设置将请求路由到 GKE 元数据代理?

Q2:元数据服务器pod为什么需要主机联网?

问题 3:在此处的视频中:https : //youtu.be/s4NYEJDFc0M?t=2243假定 pod 进行 GCP …

google-cloud-platform kubernetes google-kubernetes-engine google-iam

10
推荐指数
1
解决办法
3413
查看次数

如何在服务帐户上启用“iam.serviceAccounts.actAs”权限?

我正在尝试按照本指南使用非默认服务帐户部署服务,它说我需要“iam.serviceAccounts.actAs正在部署的服务帐户的权限”。我使用的服务帐户是@cloudbuild.gserviceaccount.com,但我在项目的“权限”页面上看不到添加它的选项。

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

10
推荐指数
1
解决办法
7164
查看次数

委托人(用户或服务帐户)缺少资源的 IAM 权限“cloudtasks.tasks.create”

当我尝试将任务添加到队列时,会抛出上述错误消息。这是我的设置和有关此问题的信息:

  • 项目编号:my-project
  • 服务帐户 ID:my-service-account
  • 任务队列名称:my-queue
  • 任务队列位置:asia-northeast1(Cloud Task 目前处于测试阶段的少数位置之一)

另外,让我们确认以上所有内容都存在并且正在运行。

当我通过发布到来检查我的服务帐户角色时https://cloudresourcemanager.googleapis.com/v1/projects/my-project:getIamPolicy

我收到类似于以下内容的回复:

{
    "status": 200,
    "data":
    {
        "version": 1,
        "etag": "BwV6nNWJg4E=",
        "bindings": [
        {
            "role": "roles/cloudtasks.admin",
            "members": [
                "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
            ]
        },
        {
            "role": "roles/cloudtasks.enqueuer",
            "members": [
                "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
            ]
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,my-service-account有以下2个角色:

  1. 角色/cloudtasks.admin
  2. 角色/cloudtasks.enqueuer

这两个角色都具有cloudtasks.tasks.create内置的权限。

当我尝试使用以下命令将任务添加到云任务时:

POST https://cloudtasks.googleapis.com/v2beta3/projects/my-project/locations/asia-northeast1/queues/my-queue/tasks+ 任务负载

我收到以下错误消息:

{
    "status": 403,
    "data":
    {
        "error":
        {
            "code": 403,
            "message": "The principal (user or service account) lacks IAM permission \"cloudtasks.tasks.create\" …
Run Code Online (Sandbox Code Playgroud)

google-api google-cloud-platform google-iam

9
推荐指数
1
解决办法
6906
查看次数

同意设置为内部的 Google 项目/谁是“我组织的成员”以及如何管理成员?

免责声明: https: //console.cloud.google.com/support/community引导至此处。谷歌的文档太可怕了,所以如果我没有被低估到 dev/null 的深度,就试一试吧

\n\n

出于迫在眉睫的需要,我正在将一个监控 Gmail 帐户的私人应用程序迁移到 OAuth 2,作为此过程的一部分,有必要创建一个OAuth 同意屏幕。由于此应用程序仅在内部使用,因此为应用程序类型选择“内部”是最有意义的 - 描述如下:

\n\n
\n

只有您组织中拥有 Google 帐户的用户才能授予对此应用请求的范围的访问权限。

\n
\n\n

此项目的用户包括两个“所有者”\xe2\x80\x94(本人使用我的个人 Gmail 帐户)和\n另一位属于公司 G Suite 帐户的员工。

\n\n

我的问题是谁有资格成为“我的组织中的用户”?这是基于项目业主吗?我的非 G-Suite 帐户(该项目的所有者)是否符合资格?G Suite 帐户中包含一名成员是否会自动关联其他员工帐户?是否可以在任何地方实际查看这些用户或直接管理他们?

\n\n

我实际上想添加另外几个帐户,但仍保持应用程序的私密性,但我对 Google 如何确定哪些 Gmail 帐户能够授权该应用程序感到困惑。

\n\n

更新:澄清一下,当我以与项目所有者位于同一域的 G Suite 成员身份登录并访问同意页面时,一切都很好。但是,我们在同一个 G Suite 帐户中管理了位于不同域下的其他成员,对于这些成员,我收到以下消息:

\n\n
\n

错误 403: org_internal \n 此客户端仅限于其组织内的用户。

\n
\n\n

此外,我什至无法使用我自己的电子邮件(应用程序的创建者和所有者)授予访问权限。我想知道如何添加自己和其他 G Suite 成员,以便能够在不公开该应用程序的情况下授予对该应用程序的访问权限。下面建议我将它们(或其域)添加到 Google Cloud IAM,但我不清楚如何使其正常工作。我自己的电子邮件确实已存在于 IAM 中且具有“所有者”角色,显然这不满足要求。

\n

google-oauth google-cloud-platform google-iam google-cloud-iam google-workspace

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

Google Cloud Run 身份验证服务到服务

我在 GCP Cloud Run 上部署了两个服务 (API)。打电话给他们service-one.myDomain.comservice-two.myDomain.com。我希望在调用 service-2 时对 service-one 进行身份验证,而不管任何用户在做什么。

我已阅读并实施了 GCP Cloud Run 文档中关于 Authenticating service-to-service ( https://cloud.google.com/run/docs/authenticating/service-to-service ) 的说明,但service-one.myDomain.com未能成功调用service-two.myDomain.com接收401:未经授权的响应。

关于如何service-one成功拨打电话的任何想法service-two

这是我的设置:

IAM 和服务帐户:

在 google IAM 上,我创建了两个服务帐户并授予它们“Cloud Run Invoker” ( roles/run.invoker) 角色: service-one@myproject.iam.gserviceaccount.com service-two@myproject.iam.gserviceaccount.com

在 Cloud Run 中,我将服务帐户从“默认计算服务帐户”更改为我创建的服务帐户。我service-one@myproject.iam.gserviceaccount.comservice-one.myDomain.comservice-two@myproject.iam.gserviceaccount.comservice-two.myDomain.com

OIDC 身份验证令牌:

service-one.myDomain.com我调用元数据服务器以从以下 url 获取令牌 (jwt): http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://service-two.myDomain.com请求标头设置为{'Metadata-Flavor': 'Google'}请求成功并且我收到的令牌被解码为具有以下有效负载:

{
  "alg": "RS256",
  "kid": "9cef5340642b157fa8a4f0d874fe7543872d82db",
  "typ": "JWT" …
Run Code Online (Sandbox Code Playgroud)

google-authentication google-oauth google-cloud-platform google-iam google-cloud-run

8
推荐指数
1
解决办法
2270
查看次数

从云功能调用Cloud Run:IAM认证

我通过 Google Cloud Run 部署了一个小型 HTTP 端点。当我关闭身份验证时它工作正常。

我现在想将其打开,以便只能由我的 Firebase 云函数调用。如果我理解正确的话,我只需在 Cloud Run 的 IAM 设置中添加正确的服务帐户邮件地址作为“Cloud Run 调用者”即可。但哪个地址是正确的呢?

我已尝试在 Firebase 控制台 -> 项目设置 -> 服务帐户中找到的所有地址。

firebase google-cloud-platform google-cloud-functions google-iam google-cloud-run

8
推荐指数
2
解决办法
3889
查看次数

无法创建新的云功能 - cloud-client-api-gae

我无法使用 GUI 在 GCP 项目中创建云功能,但具有 GCF、SA 和 IAM 的管理员角色。

这是错误消息:

缺少服务帐户 serviceaccountname@DOMAIN.iam.gserviceaccount.com 上的 cloud-client-api-gae 的必要权限 iam.serviceAccounts.actAs。将角色“roles/iam.serviceAccountUser”授予服务帐户 serviceaccountname@DOMAIN.iam.gserviceaccount.com 上的 cloud-client-api-gae。

cloud-client-api-gae不是我的 IAM 列表上的 SA 或用户。它一定是生活在图形用户界面下的生物。

我已经启用了 GCF、AppEngine 的 API,并且我有Service Account Admin角色。

当我用谷歌搜索 时,实际上得到了 0 个搜索结果cloud-client-api-gae

google-app-engine google-cloud-platform google-cloud-functions google-iam

8
推荐指数
1
解决办法
2244
查看次数

云函数/云任务未经身份验证错误

我正在尝试获取云函数来创建将调用云函数的云任务。简单的。

流程和用例与官方教程非常接近。

我还查看了 Doug Stevenson 的这篇文章,特别是其中的安全部分。

16 (UNAUTHENTICATED)不幸的是,我在 Cloud Task 中不断收到错误。

在此输入图像描述

如果我可以相信我在控制台中看到的内容,那么 Cloud Task 似乎没有将 OIDC 令牌附加到请求中:

在此输入图像描述

然而,在我的代码中我确实有这个oidcToken对象:

const { v2beta3, protos } = require("@google-cloud/tasks");
import {
  PROJECT_ID,
  EMAIL_QUEUE,
  LOCATION,
  EMAIL_SERVICE_ACCOUNT,
  EMAIL_HANDLER,
} from "./../config/cloudFunctions";


export const createHttpTaskWithToken = async function (
  payload: {
    to_email: string;
    templateId: string;
    uid: string;
    dynamicData?: Record<string, any>;
  },
  {
    project = PROJECT_ID,
    queue = EMAIL_QUEUE, 
    location = LOCATION, 
    url = EMAIL_HANDLER, 
    email = EMAIL_SERVICE_ACCOUNT,
  } = {} …
Run Code Online (Sandbox Code Playgroud)

service-accounts google-cloud-platform google-cloud-functions google-iam google-cloud-tasks

8
推荐指数
1
解决办法
913
查看次数

Google Cloud容器引擎(GKE)上的IAM和RBAC冲突

上下文

通过Google Cloud IAM功能管理对Google Cloud(GKE)kubernetes群集的访问;

  1. 管理员邀请新用户(使用他们的Google帐户/登录信息)并为其分配角色.

    下面的示例角色是"Container Engine Viewer",它允许用户访问kubernetes集群并运行所有"视图"操作.

  2. 用户可以gcloud auth login在其本地计算机上使用,然后gcloud container clusters get-credentials对Google IAM进行身份验证,并让该gcloud工具将其写入kubernetes配置文件,准备使用群集.

  3. 然后,用户可以使用它kubectl来访问群集.通过上面的例子,读取工作...写入/更改不; 都好!

问题

GKE kubernetes集群的IAM角色非常简单,"Admin,Read/Write,Read".

为了对kubernetes集群进行更细粒度的控制,应集群中使用Kubernetes RBAC ,允许我将用户限制为单个命名空间,单个API端点,单个操作等.

但是,没有为用户指定IAM角色; 用户无法对群集进行身份验证(RBAC是授权,而不是身份验证).

然而,我可以设置的最低权限IAM角色是"Container Engine Viewer",因此无论我使用Kubernetes RBAC实施的限制如何,我的所有用户仍然具有完全读取权限.

有没有人找到一种方法来确保GKE中的所有权限来自RBAC,基本上取消了IAM的权限?

google-compute-engine kubernetes google-kubernetes-engine google-iam kubernetes-security

7
推荐指数
1
解决办法
1192
查看次数

组织管理员不知何故无权在 GCP 中创建文件夹?

我很确定这是 GCP 目前的一个实际错误。我是 GCP 组织的组织管理员(我已对此进行了四次检查,并且我已使用正确的帐户登录)。

但是,当我转到“管理资源”并尝试创建新文件夹时,它不允许我选择组织作为位置,因为我“没有所需的 resourcemanager.folders.create 权限”。如果我尝试在组织内的项目中创建文件夹,则会收到“未知错误”。

我是最初创建组织和所有项目的用户,也是该域中唯一存在的 G-Suite 用户。

google-cloud-platform google-iam google-cloud-iam gcp-iam

7
推荐指数
1
解决办法
3828
查看次数