web-dev-qa-db-ja.com

Google CloudPlatformでの認証

私はGoogleCloud Platformに取り組んでおり、Google Cloud Storage JSONAPIを使用してGoogleCloud Storageからオブジェクトを保存および取得しようとしているように、Java非Webアプリケーションを使用してクラウド機能にアクセスする必要があります。

それらにアクセスする前に、アプリケーションを認証する必要があるので、承認APIが承認されたアクセスを持っていることを知りました。

Google Cloud Platformから認証情報を取得しようとしたとき、次の3つの認証情報を選択することになりました。

  • APIキー
  • OAuthクライアントID
  • サービスアカウントキー

GCPのドキュメントを確認しましたが、それらを区別する明確な情報が得られませんでした。GCPはほとんど新しいので、これらの資格情報の種類を説明する情報やブログリンクをサンプルJava =使用方法を示すプログラムGoogle Cloud Client Library API。

9

Google Cloud Platformの認証ガイドはここで最も信頼のおけるリソースです: https://cloud.google.com/docs/authentication

グーグルの様々な認証メカニズムは異なる目的を果たします、それであなたが尋ねたものを説明させてください、そしてあなたのための正しい選択はより明確になるはずです。

APIキーは、代わりにAPI呼び出しを行っているプロジェクトを識別する方法を提供します。プロジェクトに代わって行われるリクエストをクォータで制限するのに適しています。 APIキーは通常、クライアントアプリやウェブページに埋め込まれているため、通常は安全とは見なされません。このため、APIキーは認証または承認を提供しません。匿名ユーザーが電話をかけることができない場合、APIキーは十分ではありません。

次は、OAuthです。 OAuthは、Googleアカウントを持つ実際の人間のユーザーを認証済みのAPI呼び出しに変換する方法です。次のようなアプリを実行しているときなど、自分で何かをしたいときに使用します。 gcloudローカル、またはGoogle Cloudに代わって処理を行う許可を人間に求める必要があるウェブサイトを構築している場合。このプロセスにはクライアントIDとシークレットが含まれ、更新トークンとアクセストークンで終わります。いくつかの異なるフレーバーがあります。

最後に、サービスアカウント。アプリが特定の人間としてではなく、それ自体でどこかで実行されている場合は、アプリケーションのサービスアカウントを作成して、それをモデル化する必要があります。サービスアカウントは、パスワードを持たない特別なユーザーです。代わりに、アプリで展開できる秘密鍵ファイルがあり、自分自身として認証できます。これは通常、特定のユーザーに代わってアプリを実行する必要がない限り、必要なものです(たとえば、gcloudgsutilなどのクラウド管理プログラム)。

Google Cloud Java library は、「 Application Default Credentials 」と呼ばれる機能を提供します。これにより、アプリケーションが実行されている場合に認証を構成する必要がなくなります。 App EngineまたはGCEで。ローカルマシンで自分自身としてコードを実行し、gcloudをインストールする場合は、認証も処理できます。

GCSバケットを作成するComputeEngineプログラムの は次のとおりです。

Storage storage = StorageOptions.getDefaultInstance().getService();
Bucket bucket = storage.create(BucketInfo.of("myBucketName"));

Authについて何も言っていないことに注意してください。アプリケーションのデフォルトの資格情報は、適切なサービスアカウントまたはユーザーの選択を処理します。しかし、それはあなたがそのような環境にいることを前提としています。秘密鍵の.jsonファイルがある場合は、代わりに次のようにします。

Storage storage = StorageOptions.newBuilder()
    .setProjectId(PROJECT_ID)
    .setCredentials(GoogleCredentials.fromStream(
        new FileInputStream(PATH_TO_JSON_KEY))).build();
Bucket bucket = storage.create(BucketInfo.of("myBucketName"));

以上です!

11