无法使用 cloudbuild.yaml 配置机密以部署到云运行以进行对话流基本身份验证

Not able to configure secrets using cloudbuild.yaml to deploy to cloudrun for the purpose of dialogflow basicauth

我设计了一个简单的dialogflow并尝试通过在code.It中提供用户名和密码来启用basicauth works.It如下所示(参考check_auth函数):
app.py dialogflow 在给定的用户名下工作正常,password.I 尝试使用 cloudbuild.yaml 通过 CI/CD 部署到 cloudrun,它工作正常。

现在,我想使用secret manager来存储用户名和密码,而不是在代码中给出。

所以,我创建了 name:secret-username,value:myuser 和 name :secret-password,value:mypassword in the secret manager 。此外,我引用了cloudrun中的秘密,如下所示: Secret Manager截图如下: 此外,我对代码进行了更改,如下所示(我指的是用户名的秘密名称,而不是硬编码我的用户名值):

它通过 cloudbuild.But 成功部署到 cloudrun,Dialogflow 不接受我的用户名,并且当我在 expected.But 中不提供任何凭据时 password.It 给出未经身份验证的错误,当我将我的用户名和密码作为 secretmanager 值中提到的““myuser”和“mypassword”时,它会给出 webhookcallfailed:error:unavailable,如下所示:

cloudbuild.yaml 文件如下:

此外,我在云构建设置中启用了所有必需的权限(秘密管理器、服务帐户、cloudrun)。 你能帮我解决这个问题吗?这是否与任何权限问题或代码有关?

你能用这个替换你的 check_auth 函数吗?

def check_auth(username, password):
    return username == os.getenv('secret-username') and password == os.getenv('secret-password')

编辑 1

您的第一个屏幕截图,已明确提及:Exposed as an Environment Variables。因此,您只需将您的秘密作为环境变量读取即可。在 python os.getenv('...')

您还可以将机密作为卷加载(最后,云 运行 中的文件)。如果这样做,请将您的机密作为文件阅读。

注:你的错误是我不喜欢的原因之一python。您的代码有未知 secret-usernamesecret-password 的错误,但没问题,您可以部署它,无需检查,无需编译!