google-cloud-platform - 无法使用 cloudbuild.yaml 配置机密以部署到 cloudrun 以实现对话流 basicauth
问题描述
我设计了一个简单的对话框流,并尝试通过在代码中提供用户名和密码来启用基本身份验证。它有效。如下所示(参考 check_auth 函数):
app.py
对话框流在给定的用户名和密码下工作正常。我尝试部署使用 cloudbuild.yaml 通过 CI/CD 运行 cloudrun,它工作正常。
现在,我想使用秘密管理器来存储用户名和密码,而不是在代码中提供。
因此,我在秘密管理器中创建了名称:secret-username、值:myuser 和名称:secret-password、值:mypassword。此外,我在 cloudrun 中引用了秘密,如下所示: 秘密管理器屏幕截图如下所示: 另外,我对代码进行了更改,如下所示(我将秘密名称称为用户名,而不是硬编码我的用户名值):
它已通过 cloudbuild 成功部署到 cloudrun。但是,Dialogflow 不接受我的用户名和密码。当我没有在 dialogflow 中提供任何预期的凭据时,它会给出未经身份验证的错误。但是,当我将用户名和密码设置为“”myuser”时和 secretmanager 值中提到的“mypassword”,它给出了 webhookcallfailed:error:unavailable,如下所示:
此外,我已在云构建设置中启用了所有必需的权限(秘密管理员、服务帐户、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
。因此,您只需将您的秘密作为环境变量读取。在蟒蛇os.getenv('...')
您还可以将机密加载为卷(最后是 Cloud Run 中的文件)。如果这样做,请将您的秘密作为文件读取。
注意:您的错误是我不喜欢 python 的原因之一。您的代码存在未知问题,secret-username
并且secret-password
,但没问题,您可以部署它,无需检查,无需编译!
推荐阅读
- excel - #参考!更新/更改另一个工作表中的数据时出现 Excel 错误
- sql - 在 SQL 语句的 FROM 子句中,指定的字段可以引用多个表
- python - 有没有更简单的方法在 Jinja2 模板中调用 JSON?
- recursion - 方案递归查找树的最左侧节点
- postgresql - postgis 如何在给定的边界框中找到靠近中心的结果?
- react-native - 如何在本机反应中复制此底部面板的行为?
- google-data-studio - 如何在 Google Data Studio 中自定义带有标签 + 百分比的饼图
- r - 如何根据参考向量补全长格式数据框的缺失值
- reporting-services - 禁用 SSRS 日期类型参数的“周末”
- android - Android Room:用于选项的 TypeConverter
: 迁移与 notNull 属性有问题