【发布时间】:2021-07-02 20:33:04
【问题描述】:
我不知道在这里设置什么。恕我直言,整个政策、约束力和成员的东西非常令人困惑。有这些角色吗?总之……
尝试从云功能访问机密管理器。云功能是使用 Terraform 设置的:
module "mds_reporting_cloud_function" {
source = "terraform-google-modules/scheduled-function/google"
version = "2.0.0"
project_id = var.function_gcp_project
job_name = var.function_name
job_description = var.function_description
job_schedule = var.function_cron_schedule
function_entry_point = "main"
function_source_directory = "${path.module}/../../../../src"
function_name = var.function_name
region = var.function_gcp_region
bucket_name = var.function_name
function_description = var.function_description
function_environment_variables = var.function_environment_variables
function_runtime = "python38"
topic_name = var.function_name
}
resource "google_cloudfunctions_function_iam_binding" "binding" {
project = var.function_gcp_project
region = var.function_gcp_region
cloud_function = var.function_name
role = "roles/secretmanager.secretAccessor"
members = [
"serviceAccount:${var.function_gcp_project}@appspot.gserviceaccount.com"
]
}
我的理解是,如果没有为云功能指定服务帐户,它将使用默认的 App Engine 服务帐户。
绑定应将角色“绑定”到 App Engine 服务帐户的现有 IAM 政策。
但是,它会抛出这个错误:
Error:
Error applying IAM policy for cloudfunctions cloudfunction "projects/alpine-proton-280612/locations/europe-west3/functions/mds-reporting-cloud-function":
Error setting IAM policy for cloudfunctions cloudfunction "projects/alpine-proton-280612/locations/europe-west3/functions/mds-reporting-cloud-function":
googleapi: Error 400: Role roles/secretmanager.secretAccessor is not supported for this resource.
不知道该怎么做。
【问题讨论】:
-
您的角色分配是向后的。您正在尝试将服务帐户
secretAccessor授予该功能。函数不提供秘密服务。如果您尝试修改服务帐号并为其授予额外角色,请将权限授予项目资源,而不是功能资源。 -
提示:使用 Terraform 修改项目资源时要小心。可以通过覆盖(删除)现有角色将自己锁定在项目之外。创建一次性测试项目。
-
查看@guillaume 的回答。他的方法是更好地在 Secret Manager 资源上授予
secretAccessor。 -
@John Hanley,非常感谢您的解释!
标签: google-cloud-platform google-cloud-functions terraform google-iam google-secret-manager