我创建了一个简单的 Google Cloud Run 帮助程序(不处理任何个人数据,也不使用任何存储设施),并在网站内为其实现了一个公共界面(使用 HTML 请求)。我不打算添加任何用户身份验证,并且我还开源了 Cloud Run 容器中的代码。
我是否应该采取任何进一步的措施来保护容器免受恶意用户的侵害?有人可能会因为请求而使应用程序超载,从而超出容器的免费调用限制(导致我自己被计费)吗?我主要只是想确保我永远不会为 Cloud Run 应用程序付费,因为它只是充当有限数量用户的小型帮助工具。
谢谢。
我们正在尝试从计算引擎访问云运行服务 URL。
Cloud Run 服务以内部入口模式部署。
目前,在访问服务 URL 时,其状态为“禁止访问”。
然而,当入口模式设置为所有我可以访问但只想通过我的计算引擎在谷歌网络中访问它。
我什至将计算引擎的计算服务帐户添加为云运行权限中的成员。
有什么解决办法吗?
更新
项目设置 我有一个共享 vpc 设置(目前只有 us-central1 子网共享),其中主机项目的虚拟机尝试访问云运行 url。从主机项目的虚拟机执行 Curl 失败,并显示“访问被禁止”。
但是,我尝试在存在云运行服务的同一项目中创建临时虚拟机。我仍然从这个虚拟机中看到同样的错误。
根据文档,设置内部入口将允许直接访问项目中的任何入口。但这似乎并没有发生。
我什至为计算引擎的服务帐户添加了Roles/run.invoker角色作为云运行服务中的成员。
Cloud Run 正在使用宿主项目的无服务器 vpc 连接器。
今天部署新的云运行映像失败,并出现以下错误:
ERROR: (gcloud.run.deploy) Annotation 'run.googleapis.com/vpc-access-connector' is not supported on resources of kind 'Service'. Supported kinds are: Revision, Job
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为注释已经有一段时间没有改变了。
我尝试为用户删除(Firebase Auth)创建一个触发器,该触发器应该调用我的 Cloud Run 实例,但似乎即使在 10 分钟后它也不会触发。这就是我创建触发器的方式:
gcloud eventarc triggers create on-delete-user \
--event-filters="methodName=google.firebase.auth.user.v1.deleted" \
--event-filters="serviceName=identitytoolkit.googleapis.com" \
--event-filters="type=google.cloud.audit.log.v1.written" \
--destination-run-service=grpc-v1-dev \
--destination-run-path=/api.v1.DeleteUserEvent \
--service-account user@projectId.iam.gserviceaccount.com \
--location europe-west4 \
--project projectId \
--format json
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
更新:我还尝试使用我在日志中看到的方法名称。
gcloud eventarc triggers create on-delete-user-2 \
--event-filters="type=google.cloud.audit.log.v1.written" \
--event-filters="serviceName=identitytoolkit.googleapis.com" \
--event-filters="methodName=google.cloud.identitytoolkit.v1.AccountManagementService.DeleteAccount" \
--destination-run-service=grpc-v1-dev \
--destination-run-path=/api.v1.DeleteUserEvent \
--service-account user@projectId.iam.gserviceaccount.com \
--location europe-west4 \
--project projectId \
--format json
Run Code Online (Sandbox Code Playgroud)
更新2:
我也尝试使用控制台创建它,但仍然没有事件。
UPDATE3:我确实从日志中获取事件google.cloud.identitytoolkit.v1.AccountManagementService.DeleteAccount,并且我的云实例接收到调用,但我收到的数据与此处的模型无关。
我一直在尝试创建一个公共云运行调用程序策略并将其绑定到我的 cb_app 云运行服务,以便可以公开它。我创建了一个自定义服务并为其分配了云管理员角色。但出现这个错误
Error: Error creating Service: googleapi: Error 403: Permission 'iam.serviceaccounts.actAs' denied on service account app-worker@samuel-django-project.iam.gserviceaccount.com (or it may not exist).
这是配置
resource "google_cloud_run_service_iam_member" "domain" {
service = google_cloud_run_service.cb_app.name
location = google_cloud_run_service.cb_app.location
role = "roles/run.admin"
member = "serviceAccount:${var.service_account}"
}
#create service account to run service
resource "google_service_account" "cb_app" {
account_id = "app-worker"
display_name = "app worker"
}
Run Code Online (Sandbox Code Playgroud)
在应用程序服务中,我有这个
spec {
# Use locked down Service Account
service_account_name = google_service_account.cb_app.email
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题有什么想法吗?
service-accounts terraform google-iam terraform-provider-gcp google-cloud-run
我有一个奇怪的问题。当我提交到 github 代码的特定开发分支时,我为云运行设置了持续交付。
当我提交时,我看到它注意到更改并构建代码,但它不会自动将其部署到云运行实例。
我必须手动选择编辑并部署新修订版,然后选择创建的映像。
我该怎么做才能自动部署?
我们(作为一家公司)每天都会经历巨大的峰值。我们使用 Pub/Sub -> Cloud Run 组合。
我们遇到的问题是,当高流量到来时,Pub/Sub 会尝试同时将消息推送到 Cloud/Run,而无需任何流量控制。结果?
429:由于没有可用实例,请求被中止。
尽管这被标记为警告,但每个 4xx HTTP 响应都会导致消息重试传递。
因此,消息返回队列并等待。如果消息重复此过程并且仍然获取实例,Cloud Run 会再次返回 429,并且消息会发送回队列。此过程重复 x 次(取决于我们在最大传递尝试中设置的值)。之后,消息进入死信队列。
我们希望避免这种情况,最好不要收到任何 429,这样消息就不会来回传输,并且不会最终出现在死信订阅中,因为它不是我们想要的应用程序错误之一保留在那里,而是由 Pub/Sub 不控制流程并与 Cloud Run 协调引起的警告。
Pub/Sub 和推送订阅(Cloud Run 需要使用)都没有任何流量控制功能。
有没有办法控制发送到 Cloud Run 的消息数量以避免收到 429 响应?而且,当 Cloud Run 明显达到实例限制时,为什么 Pub/Sub 还要尝试交付。最好的方法是将消息保留在队列中,直到实例释放为止。
大多数答案可能会建议增加实例的限制。我们已经设置了 1000。这将无法扩展,因为即使我们将限制设置为 1500 并且出现巨大的峰值,我们也会超过限制并再次收到 429 条消息。
我能想到的唯一选择是一些流量控制。到目前为止,我们已经了解了 Cloud Tasks,但我们不确定这是否可以帮助我们。理想情况下,我们不想引入任何新服务,但如果有必要,我们会这样做。
感谢您提供的所有提示和时间!:)
google-cloud-platform google-cloud-pubsub google-cloud-tasks google-cloud-run
我已经构建了一个容器化的 python 应用程序,该应用程序使用.env文件和使用 compose build 编译的docker-compose.yml文件在本地运行没有问题。
然后我就可以像这样在 Dockerfile 中使用变量。
ARG APP_USR
ENV APP_USR ${APP_USR}
ARG APP_PASS
ENV APP_PASS ${APP__PASS}
RUN pip install https://${APP_USR}:${APP_PASS}@github.org/*****/master.zip
Run Code Online (Sandbox Code Playgroud)
我正在通过同步的 bitbucket 存储库部署到云运行,并在“修订”>“秘密和变量”下定义,(如下所述: https: //cloud.google.com/run/docs/configuring/environment-variables)但我无法弄清楚如何在构建过程中访问 Dockerfile 中的这些变量。
据我了解,我需要创建一个 cloudbuild.yaml 文件来定义变量,但我无法找到如何使用 cloud run 中定义的环境变量进行设置的清晰示例。
environment-variables docker google-cloud-platform google-cloud-run
我有一个 Node.JS 应用程序,已部署到 Google CloudRun。配置 CloudRun 时,您可以选择它将使用多少个核心。由于 Node.JS 是单线程的,因此在 CloudRun 实例中指定超过 1 个核心是否有任何优势?它会使用第二个核心吗?
如果不是,将 Node.JS 部署到 CloudRun 的最佳实践是否始终使用一个核心,然后让 CloudRun 根据请求计数扩展实例数量?
我需要将服务名称映射到 IP,以便使应用程序正常工作
/etc/host 文件示例:
10.0.0.1 service-name
Run Code Online (Sandbox Code Playgroud)
但是尝试在 Dockerfile 构建期间编辑该文件会让我感到困惑
/bin/sh: can't create /etc/hosts: Read-only file system
Run Code Online (Sandbox Code Playgroud)
在 GCP Cloud Run YAML 中,不支持“HostAliases” 我无法在 GCP Cloud Run 中添加“--add-host”标志
有谁知道还有其他选项可以将服务名称映射到特定 IP 来修复我的 Cloud Run 应用程序吗?
Dockerfile
FROM node:16-alpine
VOLUME /tmp
# Create app directory
WORKDIR /usr/src/app
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
COPY . .
# This are the lines that are not working
# …Run Code Online (Sandbox Code Playgroud)