无法使用经过身份验证的访问权限访问 Google 运行 服务

Can't access Google Run service with authenticated access

我在具有访问点 URL https://reporting-intake-service-XXX-uc.a.run.app 的 GCP 项目上有一个云 运行 服务。服务本身使用 Pub/Sub 来推送消息。

更新: 我已经确认问题出在服务中的 Pub/Sub 调用,而不是对服务本身的访问。

Docker 文件

FROM python:3
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD python3 intake.py

intake.py

import logging
from flask import Flask, request
from google.cloud import pubsub_v1

app = Flask(__name__)


@app.route("/", methods=["POST"])
def intake():
    try:
        report = request.data
        publish_message(report)
        return "Thanks"
    except Exception as e:
        logging.error(e)
        return "ERROR"


def publish_message(report):
    publisher = pubsub_v1.PublisherClient()
    future = publisher.publish("projects/my-project/topics/reporting", report)
    logging.info(future.result())



if __name__ == "__main__":
    app.run(port=8080, host="0.0.0.0", debug=True)

错误信息:

status = StatusCode.PERMISSION_DENIED 
details = "User not authorized to perform this action." 

我尝试过的:

好的,我解决了。

事实证明,云 运行 服务是使用默认计算服务帐户 ###-compute@developer.gserviceaccount.com 创建的。

Cloud Run > click on service > REVISIONS > SECURITY

附加到 ###-compute@developer.gserviceaccount.com 的 IAM 原则已删除(出于安全目的由我删除)。所以我在 Cloud 运行 上创建的底层服务无法访问 PubSub。

我在这个 sh*t 上花了太多时间。

要明确这是在“需要身份验证”模式下。