gsutilを使用してGCSへアクセスする場合の環境設定

今回は、ローカルやオンプレミス、GCP以外からgsutilコマンドを使用してGCSへアクセスする場合の環境設定をいきたいと思います。

こんにちは、エンジニア泉水です。 冒頭で書いた通り今回は、gsutilコマンドでアクスする際の環境設定です。

1.GCSって?

説明の必要はないと思いますが、、、 GCSはGCPが提供しているオブジェクトストレージです。 Google Cloud Storage

類似サービスとしてはAWSのS3があります。

2.やること

今回はそのS3は使ったことあるけど、GCSをこれから使ってみる使ってみたいという人向けにAWSと比較しながら

・gsutilコマンドを使用してアクセスするための設定

をやっていきます。 (初期設定はたまにしかしないから実は自分の備忘録なんて言えない)

3.TRY

1 前提

前提:google cloud sdkインストール済み
もしまだの場合は、こちら

2 AWSだと?

以下のような感じでアクセキーとシークレットアクセスキーを環境変数に設定してあげればアクセスできますよね。

export AWS_ACCESS_KEY_ID=xxxxxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxx
aws s3 ls s3://
...
...
...

3 GCPだと?

GCSもライブラリを使用したアクセスであればAWSと同様に環境変数へサービスアカウントのパスを環境変数へ設定することでアクセスできます。
サーバー間での本番環境アプリケーションの認証の設定

サービスアカウントに関してはこちら

が、gsutilコマンド使用してアクセスするためには環境変数への設定のみではダメなのです、、、

printenv | grep GOOGLE
GOOGLE_APPLICATION_CREDENTIALS=/path/service_account.json
$ gsutil ls gs://
ServiceException: 401 Anonymous caller does not have storage.buckets.list access to project xxxxxx.

この通りエラーに、、、

では、どうすればいいか?
サービスアカウント認証情報を使用して認証する必要があります。

$ gcloud auth activate-service-account --key-file service_account.json
$ gcloud auth list
                    Credentialed Accounts
ACTIVE  ACCOUNT
*       xxxxx@xxxxx.iam.gserviceaccount.com

アカウント認証を行うと、、、

$ gsutil ls -p grasys-dev gs://
gs://xxx/
gs://yyy/
gs://zzz/

アクセスできました!

終わり

ちょっとGCPの方がめんどくさいかなーと思う反面、AWSと違って環境変数への設定する数は少ないのでそこは楽かなと、、、
まぁ慣れの問題ですね!!!