我希望能够基于命名约定,或者更好地基于标签,授予谷歌云中的服务号对多个秘密的访问权限。
到目前为止,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项目的最佳方法的意见。
这目前不可能实现,但已列入2020年的路线图。
我正在使用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-"的秘密。但他将无法查看内容或管理其他秘密。
现在可以使用资源实现这一点(不确定何时实现)。名称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访问密钥被列入了白名单,我试着删除它并创建新的几次。甚至尝试使用浏览器密钥而不是