如何使用服务帐户在 shell 脚本中对 gsutil 进行身份验证

How to Authenticate to gsutil in a shell script using service account

shell 脚本 向 Google Cloud Storage Bucket 进行身份验证的最佳方法是什么(将安排到 运行 daily/hourly) 使用 服务帐户 ? 我已经完成了以下link,但我仍然对登录过程有一些疑问。

How to use Service Accounts with gsutil, for uploading to CS + BigQuery

  1. 下面提到的登录步骤是一次性过程吗?如果是,登录如何用于后续执行?

    我的理解是以下命令将内容写入 .boto 文件,该文件用于后续执行? 但是根据下面的 link - 它写入了一个单独的 json 文件。config/gcloud? Does gsutil support creating boto files with service account info?

    在这种情况下,.boto 文件有什么用?为什么/什么时候我们需要通过BOTO_PATH/BOTO_CONFIG传递它?

    在 gsutil(独立)中,使用以下步骤登录

    gsutil config -e 
    

    可选 -o 输出到 ~/.boto 以外的文件

    gsutil 作为 gcloud 的一部分

    gcloud auth activate-service-account SERVICE_ACCOUNT@DOMAIN.COM --key-file=/path/key.json --project=PROJECT_ID
    
  2. 防止其他脚本干预的最佳方法是什么?

    例如,假设我们有 shell 脚本 S1,连接到项目 P1 以将数据上传到 Bucket B1,如果另一个 shell 脚本说 S2 在连接的同时被触发将 Project P2 上传到 Bucket B2,会不会导致问题? 避免此类问题的最佳做法是什么?

  3. 是否可以限制只在脚本执行时登录? 比如说,脚本使用 cron 安排到 运行 在 10:00 AM UTC,脚本在 10:30 AM UTC 完成执行。 是否可以阻止 10:30 到下一个 运行 之间的任何操作? 换句话说,是否可以在没有干预的情况下以编程方式注销然后登录?

环境:Centos

BOTO文件的原理就是回答你的问题2。你可以有2个凭证访问2个不同的bucket。创建 2 个 boto 文件并为每个脚本使用正确的文件。

对于第 3 个问题,可以设置存储桶访问的条件。

Select 一个存储桶并转到信息面板中的 right-hand 一侧,然后单击添加凭据。

然后,添加你的凭证,你的角色,点击添加条件(你必须在桶上设置统一的权限定义才能使用该功能)

然后定义一个条件以允许在您的时区上午 10 点之后和上午 11 点之前的权限(您没有分钟粒度)