これを行うのは簡単なことだと思っていましたが、動作させることができません。
サーバー(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
を使用してこれを機能させるにはどうすればよいですか?
私も同じ問題を抱えていました。 Google Developers Consoleから提供されたデフォルトのキーファイルは、実際にはjsonフィールドにキーマテリアルが含まれた.jsonファイルでした。 「gcloud auth revoke」を使用してサービスアカウントを取り消し、開発者コンソールから新しいキーを生成し、キーを.p12ファイルとしてダウンロードしました。今回は、サービスアカウントをアクティブ化した後に機能しました。
記録のために、生成されたjson key fileを介してGCEインスタンスでサービスアカウントを有効にしようとしたときに、今日同じエラーメッセージが表示されました。インスタンスにプリインストールされているGcloud sdkは古すぎて、jsonキーを適切に処理できませんでした。さらに、この方法で私のアカウントを有効にしようとすると、ツールはフィードバックを提供しませんが、認証のためにアカウントを使用しようとすると、前述のエラーで失敗します。
現在のバージョンをインストールした後、gcloud auth activate-service-account --key-file /key.json
を使用してサービスアカウントを有効にでき、gsutil cp file gs://testbucket/
は正常に機能しました。