web-dev-qa-db-ja.com

コマンドラインからサービスアカウントを使用してGoogle Cloud Storageバケットにアクセスするにはどうすればよいですか?

これを行うのは簡単なことだと思っていましたが、動作させることができません。

サーバー(GCE)からGoogleクラウドストレージバケットにファイルをプッシュしようとしています。サーバーでのgsutilコマンドの許可が多すぎることを避けるために、Googleプロジェクトの認証情報セクションに「サービスアカウント」を作成しました。

バケットにgs://mybucket OWNER権限を持つサービスアカウントのメールアドレスを、USERとしてバケットに追加しました。

サーバーで、次のようにサービスアカウントをアクティブにしました。

$gcloud auth activate-service-account --key-file <path-to-keyfile> myservice

$gcloud auth list
Credentialed accounts:
 - [email protected]
 - myservice (active)

To set the active account, run:
  $ gcloud config set account <account>

したがって、これまでのところすべてが問題ないようです。ただし、バケットへのアクセスは失敗します。

$gsutil cp tempfile gs://mybucket
CommandException: Error retrieving destination bucket gs://mybucket/: [('PEM routines', 'PEM_read_bio', 'no start line')]

$gsutil cp tempfile gs://mybucket/tempfile
Failure: [('PEM routines', 'PEM_read_bio', 'no start line')].

もちろん、バケットのACLがサービスアカウントをOWNERとして表示することを確認しました。また、別のOSの別のマシンでこれを試しました。同じ結果。言うまでもなく、私自身はエラーメッセージを理解できません。私はどんな提案もいただければ幸いです。詳細なエラーログ this Gist

更新:

~/.configを削除した後、gcloudは認証データを保存するため、非推奨のコマンドを使用します

gsutil config -e

意図したとおりにサービスアカウントで~/.botoを生成します。 gs://mybucketへのその後のアクセスは機能します

しかし、これが私がたどるべき道だとは思いません。 gcloud authを使用してこれを機能させるにはどうすればよいですか?

7
bjoseru

私も同じ問題を抱えていました。 Google Developers Consoleから提供されたデフォルトのキーファイルは、実際にはjsonフィールドにキーマテリアルが含まれた.jsonファイルでした。 「gcloud auth revoke」を使用してサービスアカウントを取り消し、開発者コンソールから新しいキーを生成し、キーを.p12ファイルとしてダウンロードしました。今回は、サービスアカウントをアクティブ化した後に機能しました。

1
kresmoi

記録のために、生成されたjson key fileを介してGCEインスタンスでサービスアカウントを有効にしようとしたときに、今日同じエラーメッセージが表示されました。インスタンスにプリインストールされているGcloud sdkは古すぎて、jsonキーを適切に処理できませんでした。さらに、この方法で私のアカウントを有効にしようとすると、ツールはフィードバックを提供しませんが、認証のためにアカウントを使用しようとすると、前述のエラーで失敗します。

現在のバージョンをインストールした後、gcloud auth activate-service-account --key-file /key.jsonを使用してサービスアカウントを有効にでき、gsutil cp file gs://testbucket/は正常に機能しました。

3
zuzkins