无法使用 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-username
和 secret-password
的错误,但没问题,您可以部署它,无需检查,无需编译!
我设计了一个简单的dialogflow并尝试通过在code.It中提供用户名和密码来启用basicauth works.It如下所示(参考check_auth函数):
app.py
现在,我想使用secret manager来存储用户名和密码,而不是在代码中给出。
所以,我创建了 name:secret-username,value:myuser 和 name :secret-password,value:mypassword in the secret manager 。此外,我引用了cloudrun中的秘密,如下所示:
它通过 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-username
和 secret-password
的错误,但没问题,您可以部署它,无需检查,无需编译!