gpt4 book ai didi

google-cloud-platform - 从 GCP 中的云功能访问 secret 管理器。要使用哪些 IAM 设置?

转载 作者:行者123 更新时间:2023-12-02 02:07:22 30 4
gpt4 key购买 nike

我不知道要在这里设置什么。恕我直言,整个政策、绑定(bind)和成员的内容非常困惑。有这些角色吗?无论如何...

尝试从云功能访问 secret 管理器。云功能是使用 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 服务帐户。

绑定(bind)应将角色“绑定(bind)”到 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.

不确定要做什么。

最佳答案

最好的解决方案是仅在 secret 上授予 Cloud Functions 服务帐户访问 secret 的权限。为此使用 Secret Manager IAM地形资源

resource "google_secret_manager_secret_iam_binding" "binding" {
project = var.function_gcp_project
secret_id = google_secret_manager_secret.your-secret.secret_id
# If your secret is not created by terraform, use this format for the id projects/{{project}}/secrets/{{secret_id}}
role = "roles/secretmanager.secretAccessor"
members = [
"serviceAccount:${var.function_gcp_project}@appspot.gserviceaccount.com"
]
}

重要提示:

  • 您也可以在 project level 授予此角色, 但它不太安全,因为该函数将有权访问项目的所有 secret
  • 您使用 App Engine(和云功能)默认服务帐户。它也不是那么安全。实际上,任何 App Engine 服务和具有自定义服务帐户的 Cloud Functions 都将默认使用此服务帐户,因此将能够访问 secret 。喜欢 custom service account for your Cloud Functions
  • John 的第二条评论非常重要。 Terraform 具有多个级别的 IAM 角色的写入和替换。请记住(适用于所有 IAM_XXX terraform 模块)
    • Policy 替换整个资源的所有可能角色的所有帐户(在项目中,这可能是戏剧性的!)
    • 绑定(bind)替换特定角色的所有账号
    • 成员 仅在特定角色上添加帐户。什么都不删除。

关于google-cloud-platform - 从 GCP 中的云功能访问 secret 管理器。要使用哪些 IAM 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68231005/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com