如何授权 Lambda 函数发布到 BigQuery?
Posted
技术标签:
【中文标题】如何授权 Lambda 函数发布到 BigQuery?【英文标题】:How to authorize Lambda function to post to BigQuery? 【发布时间】:2020-01-07 08:26:19 【问题描述】:过去两天我一直被这个问题困扰。我想使用 Lambda 作为 Cron 操作从我的数据库中获取数据并将其发布到 BigQuery。
我想知道如何使用我的 Lambda 函数中的服务账户文件授权对 BigQuery 的访问。
上下文
我正在使用以下内容:
Serverless repo 用于部署我的 Lambda。 BigQuery SDK @google-cloud/bigquery尝试
在我的本地使用sls invoke local --function main
一切正常。我在.env
中设置了GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
。但是,显然/path/to/key.json
是一个本地路径。
作为测试,我尝试将我的服务帐户文件放入项目的根目录并设置GOOGLE_APPLICATION_CREDENTIALS=./key.json
(注意我使用了相对路径)。这在本地或云中不起作用。是的,我知道这不是好的做法——我只是想让它发挥作用。我相信这可能是 WebPack 的事情,尽管我对如何使用 WebPack 一无所知。
我还考虑过使用 AWS KMS 加密 json 并将其作为键值对存储在参数存储中(这是我最终想要使用的方式)。但是,我注意到 BigQuery 需要接受文件路径而不是秘密本身See here。
问题
所以这是我的问题:
-
是否可以使用无服务器框架通过文件路径和
.env
文件连接到 BigQuery?
为什么 Google 不允许您使用访问密钥连接到 BigQuery?相反,我必须指定我的文件的路径。
有没有办法在 KMS 中存储文件并在部署到 Lambda 时解密?
【问题讨论】:
在 GCP 中创建您的服务帐户 -> 为其提供适当的 ACL(在本例中为 BigQuery)-> 将其与您的 Lambda 函数/zip 打包 -> 在您的代码中引用它,如下所示:github.com/googleapis/nodejs-bigquery/blob/… @GrahamPolley 高级结构不是我的问题。问题主要出在您描述的步骤中(使用您的 Lambda 函数/zip 打包)。 docs.aws.amazon.com/lambda/latest/dg/… 【参考方案1】:我知道这是旧的,但我是怎么做到的:
我使用 cred.json 文件创建了一个 lambda 层,并将 lambda 层附加到我的 serverless.yml 中使用 gcp 大查询的特定函数。
我在 .yml 之外创建它,因为我不希望我的 cred.json 成为我在 github 中的团队存储库的一部分(安全问题)。
使用 lambda 层,在每个 lambda 启动时,文件将在本地机器的路径中可用:'/opt/cred.json'
将以下内容添加到 serverless.yml 中的功能块中:
layers:
- arn:aws:lambda:$region:$account):layer:lambda-layer-gcp-bigquery-keyfile:1
【讨论】:
以上是关于如何授权 Lambda 函数发布到 BigQuery?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 lambda 调用 IAM 授权的 AWS ApiGateway 端点?
如何在 API 网关上的 cognito 授权方保护的 lambda 函数中获取 AWS Cognito 用户数据
AWS Lambda、API 网关和 Cognito:如何在 lambda 函数中获取身份对象?