当前位置: 首页 > 知识库问答 >
问题:

谷歌云——如何按标签或名称授予对一组机密的访问权限?

龚凯泽
2023-03-14

我希望能够基于命名约定,或者更好地基于标签,授予谷歌云中的服务号对多个秘密的访问权限。

到目前为止,GCP似乎只提供基于组织、文件夹、项目或机密级别的访问权限,除此之外,您无法对IAM的设置有任何更细致的了解。看这里

我想也许GCP的IAM条件会让我在这里有更多的灵活性,但我也没有任何运气。使用下面的地形-我的SA仍然可以访问项目级别的所有机密。

resource "google_project_iam_member" "access_secrets" {
project = var.project_id
role    = "roles/secretmanager.secretAccessor"
member  = "serviceAccount:${google_service_account.service-a.email}"
provider = google-beta
  
condition {
   title       = "all-service-a-secrets"
   description = "All Service A secrets"
   expression  = "resource.name.startsWith('projects/my-project/secrets/service-a-secrets')"
  }
}

由于主要使用AWS,我觉得权限更灵活一些。看来,也许答案是更自由地使用项目,但我还没有找到很多关于利用GCP项目的最佳方法的意见。

共有3个答案

海翼
2023-03-14

这目前不可能实现,但已列入2020年的路线图。

燕星鹏
2023-03-14

我正在使用IAM条件策略根据命名约定授予对机密的访问权限。

例如,以下条件策略仅授予用户对以“dev-myapp1-”开头的秘密的访问权限

resource "google_project_iam_binding" "SecretCreator" {
  project = "my-project-id"
  role    = "projects/my-project-id/roles/SecretCreator"

  members = [
    "user:user.name@example.com",
  ]

resource "google_project_iam_binding" "SecretManagerAdmin" {
  project = "my-project-id"
  role    = "roles/secretmanager.admin"

  members = [
    "user:user.name@example.com",
  ]

  condition {
    title       = "dev-myapp1-*"
    expression  = "resource.name.startsWith(\"projects/123456789012/secrets/dev-myapp1-\")" 
    # "123456789012" is the Project Number. You need to use Project Number in expression not the Project ID
    #You can get the Project Number by running the command : gcloud projects describe my-project-id
  }
}

resource "google_project_iam_binding" "SecretListViewer" {
  project = "my-project-id"
  role    = "projects/my-project-id/roles/SecretListViewer"

  members = [
    "user:user.name@example.com",
  ]

}

resource "google_project_iam_binding" "SecretManagerViewer" {
  project = "my-project-id"
  role    = "roles/secretmanager.viewer"

  members = [
    "user:user.name@example.com",
  ]

}

您可能需要在项目中创建两个自定义角色才能使用此条件策略。您可以使用下面的地形模板在项目中创建自定义角色。

resource "google_project_iam_custom_role" "SecretListViewer" {
  role_id     = "SecretListViewer"
  title       = "SecretListViewer"
  description = "SecretListViewer"
  permissions = ["secretmanager.secrets.list"]
}

resource "google_project_iam_custom_role" "SecretCreator" {
  role_id     = "SecretCreator"
  title       = "SecretCreator"
  description = "SecretCreator"
  permissions = ["secretmanager.secrets.create"]
}

有了这个,用户应该能够创建任何名称的秘密,但不能添加内容,或查看或使用它,如果名称不是以"dev-myapp1-"开头。他将有充分的权限来管理"dev-myapp1-"的秘密。但他将无法查看内容或管理其他秘密。

夹谷山
2023-03-14

现在可以使用资源实现这一点(不确定何时实现)。名称startsWith——然而,这让我大吃一惊,你必须在URL中使用数字项目ID,而不是项目名称。

 类似资料:
  • 我有一个具有统一访问控制的Google云存储桶,我在权限中添加了“诱惑者”。它说该对象是公共的,但当我尝试打开链接时,仍会收到此消息:“匿名调用方没有storage.objects.get access to the Google Cloud storage object”错误代码为“401”。我希望任何用户都能够访问该链接。我该怎么做?提前谢谢! 向你问好本

  • 使用IAM策略模拟器时,似乎必须提供对完整密钥arn的访问(),而不是别名() 有没有更好的办法来管理这个? 我知道我可以使用密钥策略管理对CMKs的访问,并且不允许从IAM进行访问,但是您不能在KMS密钥策略中使用组作为

  • 我创建了一个服务帐户,并为其分配了访问云功能的权限: gcloud beta函数add-iam-policy-binding MyFunction--member=serviceaccount:cf-access@my-project.iam.gserviceaccount.com--role=roles/cloudfunctions.admin 产出: 现在,我下载了服务帐户json文件。 所以

  • 问题内容: 我看过许多类似的问题,因此表明我已经检查了基础知识。当然,这并不意味着我没有错过任何显而易见的东西。:-) 我的问题是:为什么我拒绝具有特权的用户访问权限,而我却已经在其中输入密码并被授予访问权限?(为了完整起见,我尝试输入错误的密码只是为了确保MySQL客户端在程序启动时拒绝我访问。) 背景: 通过ssh登录到运行MySQL服务器的计算机的外壳,我以root用户身份登录: 太棒了 我

  • 我正在尝试在Android设备上使用一个简单的电话差距应用程序。因此,我遵循了所有步骤,创建了一个项目,该应用程序成功地与GCM服务器通信,并使用我的项目编号获取注册ID。 问题是我不能从服务器端与GCM通信。我最初是在Perl中这样做的,但是即使是GCM文档中的curl example也返回“401”。 他们的API访问密钥被列入了白名单,我试着删除它并创建新的几次。甚至尝试使用浏览器密钥而不是