我正在使用 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",
]
}
您可能需要在项目中创建两个自定义角色才能使用此条件策略。您可以使用以下 terraform 模板在项目中创建自定义角色。
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-”管理机密的完全权限。但他将无法查看内容或管理其他机密。