我编写了一个谷歌函数来模拟一个服务帐户来生成签名的url。但是,在我使用以下命令进行部署后,未启用允许未经身份验证的选项。
gcloud functions deploy func-sa-test2
--entry-point main
--runtime python39
--impersonate-service-account sa-email
--service-account sa-email
--trigger-http
--allow-unauthenticated
我必须使用下面的命令再次部署它,以单独启用该选项。
gcloud functions deploy func-sa-test2 --allow-unauthenticated
我怎么能用一个命令正确地部署它呢。谢谢
;无错误";这很奇怪。请确保模拟的服务帐户具有角色roles/cloudfunctions.admin
。
事实上,使用您的第一个命令,您就可以使用GCLOUD和th sa电子邮件的凭据进行部署。sa电子邮件必须具有在功能上设置IAM策略的权限
在第二个命令中,您不再使用sa电子邮件凭据,而是使用您的用户凭据,这一次是有效的,因为您有权限。
要进行调查,您可以尝试运行该命令
gcloud functions add-iam-policy-binding func-sa-test2 --member="allUsers" --role="roles/cloudfunctions.invoker" --impersonate-service-account sa-email
如果你没有权限,它应该会失败
服务帐户不包含"cloudfunctions.functions.setIamPolicy";准许这就是您无法在单个命令中启用标志--allow unauthenticated的原因。
如果您的服务帐户具有其中一个角色(云功能管理员、Firebase管理员、Firebase开发管理员、Firebase扩展API服务代理、所有者、安全管理员(,则可以在单个命令中启用--allow-unauthentized。
在单独的命令中执行时,您可能具有所有者权限。所以你没有遇到任何问题。
如果需要,可以使用控制台来避免此类问题。