我可以自动执行“gcloud auth login”吗?
Can I automate `gcloud auth login`?
我无法以非交互方式激活我的 Google 云服务帐户;即使在阅读了几个 SO 线程之后。
- 正在创建服务帐户
gcloud iam service-accounts create my-awesome-acct ...
- 正在为服务帐户创建角色
gcloud iam roles create AwesomeRole \
--permissions storage.objects.create,storage.objects.delete ....
- 生成密钥
gcloud iam service-accounts keys create ~/awesome-key.json ...
- 激活服务帐户
gcloud auth activate-service-account my-awesome-acct ~/awesome-key.json
我的问题
即使按照上述步骤,当我执行 运行 gsutil ...
命令时,我仍然收到错误消息:
$ gsutil cp my_file.tgz gs://my_bucket
Copying file://my_file.tgz [Content-Type=application/x-tar]...
Your credentials are invalid. Please run
$ gcloud auth login
我能让它工作的唯一方法是 实际上 运行 gcloud auth login
并允许在网络浏览器中进行身份验证。
我是不是做错了什么?还是这适用于每个服务帐户?
我要在这里回答我自己的问题。
我的解决方案
我决定使用 Google 云客户端库,而不是使用 gsutil
。
我做了什么:
gsutil cp my_file.tgz gs://my_bucket
我在做什么现在:
from gcloud import storage
# key file is located in my current directory
os.environ.get('GOOGLE_APPLICATION_CREDENTIALS', 'gcloud-auth.json')
client = storage.Client()
bucket = client.get_bucket("my_bucket")
blob = bucket.blob("my_file.tgz")
blob.upload_from_filename("my_file.tgz")
后见之明 20/20
在使上述解决方案工作之后,似乎如果我还设置了环境变量,GOOGLE_APPLICATION_CREDENTIALS
,我的 gsutil
应该也工作了。 (未经测试)
我无法以非交互方式激活我的 Google 云服务帐户;即使在阅读了几个 SO 线程之后。
- 正在创建服务帐户
gcloud iam service-accounts create my-awesome-acct ...
- 正在为服务帐户创建角色
gcloud iam roles create AwesomeRole \
--permissions storage.objects.create,storage.objects.delete ....
- 生成密钥
gcloud iam service-accounts keys create ~/awesome-key.json ...
- 激活服务帐户
gcloud auth activate-service-account my-awesome-acct ~/awesome-key.json
我的问题
即使按照上述步骤,当我执行 运行 gsutil ...
命令时,我仍然收到错误消息:
$ gsutil cp my_file.tgz gs://my_bucket
Copying file://my_file.tgz [Content-Type=application/x-tar]...
Your credentials are invalid. Please run
$ gcloud auth login
我能让它工作的唯一方法是 实际上 运行 gcloud auth login
并允许在网络浏览器中进行身份验证。
我是不是做错了什么?还是这适用于每个服务帐户?
我要在这里回答我自己的问题。
我的解决方案
我决定使用 Google 云客户端库,而不是使用 gsutil
。
我做了什么:
gsutil cp my_file.tgz gs://my_bucket
我在做什么现在:
from gcloud import storage
# key file is located in my current directory
os.environ.get('GOOGLE_APPLICATION_CREDENTIALS', 'gcloud-auth.json')
client = storage.Client()
bucket = client.get_bucket("my_bucket")
blob = bucket.blob("my_file.tgz")
blob.upload_from_filename("my_file.tgz")
后见之明 20/20
在使上述解决方案工作之后,似乎如果我还设置了环境变量,GOOGLE_APPLICATION_CREDENTIALS
,我的 gsutil
应该也工作了。 (未经测试)