Cloud API サービスに対する認証

アプリケーション コードで Cloud API を使用できるようにするには、アプリケーションの適切な認証情報を設定する必要があります。サービスに対してアプリケーションの「アイデンティティ」を示して「認証」を受けるとともに、タスクを実行するための「承認」を受けるためです(こうした認証情報に関連するメカニズムを「認証方式」と呼びます)。

認証スキームのタイプ

認証スキームでは、アイデンティティ、認証、および承認を判断するためにいくつかのチェックを行います。

  • アイデンティティ チェックではリクエストを出した人物の特定のみを行い、その人物が申告している身元が実際に正しいかどうかはチェックしません。

  • 認証チェックでは、認証スキームを使用している呼び出し元が申告している身元が実際に正しいかどうかを判断しようとします。一般にこのチェックは共有シークレットを通じて行われます。ただし、API キーでは、特定のシナリオのみで使用するように制限することで、暗黙的な認証の形式を提供します(後述の API キー制限をご覧ください)。

  • 承認チェックでは、呼び出し元が認証後に何を実行できるかを判断しようとします。通常、このスキームでは認証情報を順に渡していく必要があります。

Cloud API は、後述のように、アイデンティティ、認証、承認による複数の認証スキームを提供しています。

認証スキーム アイデンティティ 認証 承認
API キー キー文字列 キー制限 x
サービス アカウント サービス アカウントのメール 秘密鍵 OAuth トークン
ユーザー アカウント ユーザーのメール パスワード OAuth トークン
  • API キーは最も簡単な認証スキームで、ID のみを提供します。共有シークレットによって安全な認証が検証されることはなく、キー制限によって暗黙的な認証形式が提供されます。

  • サービス アカウントでは公開鍵 / 秘密鍵交換によって ID と認証の両方を提供します。この交換により、API 自体を含めてリソースへのアクセスに使用する認証トークンが生成されます。サービス アカウントの使用は、バックエンドが Cloud API に対して安全に認証するための推奨される方法です。

  • ユーザー アカウントでは、サードパーティ(ユーザー)アカウントに対してチャレンジ レスポンス(パスワード)メカニズムによって ID と認証を提供します。サービス アカウントと同様に、この認証ではリソースへのアクセスに使用する認証トークンが生成されます。一般にユーザー アカウント認証スキームは、API が個人情報にアクセスする必要がある場合にのみ使用します。

推奨事項

Google Cloud Platform API にアクセスする際には、本番用にサービス アカウントを設定することが推奨されています。サービス アカウントではアイデンティティ、認証、承認を提供し、同じ認証スキームで他のクラウド サービスを利用することができ、有効期間が短い OAuth トークンを使用することによって安全性が向上します。

可能な限り、サービス アカウントを使用するようにアプリケーションを設定します。ただし、場合によってはサービス アカウント キーを使用できないことがあります。たとえば、アプリケーションで、プラットフォームの Google Cloud 認証ライブラリを使用できないことがあります。またはクライアント アプリケーションから API リクエストを行う必要があるため、サーバー経由でリクエストをプロキシできないことがあります。そうした場合には API キーを使用しますが、権限のない使用から保護するために、キーに対して制限を追加する必要があります。

サービス アカウントの設定

Google Cloud Platform API の認証と承認には、サービス アカウントを使用するのが一般的です。サービス アカウントは、ユーザー アカウントと同様に、メールアドレスで示されます。ただし、ユーザー アカウントとは異なり、サービス アカウントは Google Cloud Platform に限定される役割アカウントであり、アクセス権を持つ API またはサービスにアクセスするために設定できます。

サービス アカウントでは Two-legged OAuth を使用して一時認証トークンを取得します。さらに、ユーザー アカウントの場合とまったく同じように、サービス アカウントを使用して承認の制限を設定できます(たとえば、Google Cloud ファイルを対象として)。サービス アカウント認証と承認のしくみの詳細については、OAuth 2.0 を使用した Google API へのアクセスガイドのサービス アカウントのセクションをご覧ください。

サービス アカウントの作成

Cloud Platform Console で、[API Manager] → [認証情報] パネルに移動します(最近新しいプロジェクトを作成して Cloud API を有効にした場合、[認証情報に進む] をクリックすると、自動的にこのパネルに移動します)。

[認証情報の作成] を選択し、プルダウン メニューから [サービス アカウント キー] を選択します。

[サービス アカウント キーの作成] パネルが表示されます。このパネルの [サービス アカウント] プルダウン メニューから [新しいサービス アカウント] を選択します。[サービス アカウント] 設定パネルが表示されます。

このサービス アカウントの [名前] を入力します。この名前は [サービス アカウント ID] のデフォルトの名前(生成されるサービス アカウント ID アドレスの「@」の左側)として使用されますが、このサービス アカウント ID 名は必要に応じて変更できます。名前は何でも構いません。重要なのは、その名前を覚えておくことです。[役割] プルダウン オプションが「プロジェクト > オーナー」になるように設定します。[キーのタイプ] で、この値を [JSON] のままにしておくことをおすすめします。[作成] をクリックすると、Cloud Platform Console によって JSON キーが(.json テキスト ファイルとして)生成され、パソコンにファイルをダウンロードするように求めるメッセージが表示され、[新しい秘密鍵] ダイアログ ボックスが表示されます。

生成された JSON キーは次のサンプルのようになっています。

{
  "type": "service_account",
  "project_id": "project-id",
  "private_key_id": "some_number",
  "private_key": "-----BEGIN PRIVATE KEY-----\n....
  =\n-----END PRIVATE KEY-----\n",
  "client_email": "<api-name>api@project-id.iam.gserviceaccount.com",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/...<api-name>api%40project-id.iam.gserviceaccount.com"
}

この JSON ファイルには秘密鍵が含まれているため、安全に保管してください(このファイルはその唯一のコピーです)。Google Cloud Platform API に認証情報を送信する際には、コードでこのサービス アカウント キー ファイルを参照する必要があります。

アプリケーションのデフォルト認証情報による認証

アプリケーションで Google Cloud Platform API サービスに対する認証を行うには、アプリケーションのデフォルト認証情報(ADC)を使用するのが最も簡単です。ADC を使用するサービスは、まず GOOGLE_APPLICATION_CREDENTIALS 環境変数内の認証情報を探します。Google Cloud では、この環境変数をサービス アカウントキー ファイル(サービス アカウントの設定の説明に従って、サービス アカウントキーを作成したときにダウンロードされた .json ファイル)を指定するように設定することが推奨されています。

$ export GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file>

API キーの設定

最も簡単な認証メカニズムでは、API キーを直接サービスに渡します。この認証方式ではスコープとセキュリティの両方が制限されるため、無制限の API キーはテスト目的に限定して使用することをおすすめします。ただし、特定のアプリケーション(埋め込みデバイス、Android、iOS アプリなど)の場合、API キーが必要になることがあり、その場合は適切な制限を追加して、それらの使用を制限する必要があります。

API キーの作成

Cloud Platform Console で、[API Manager] → [認証情報] パネルに移動します(最近新しいプロジェクトを作成して Cloud API を有効にした場合、[認証情報に進む] をクリックすると、自動的にこのパネルに移動します)。

[認証情報の作成] を選択し、プルダウン メニューから [API キー] を選択します。

[新しいキーを作成] ダイアログが表示されます。

このキーの名前を入力します(上の例では「Curl Test Key」になっていますが、任意の名前を入力できます)。このキーはテスト専用であるため、[制限] フィールドを空白のままにできますが、キーを本番環境にデプロイする予定がある場合は、[制限] フィールドを設定する必要があります。

[作成] をクリックします。[API キーを作成しました] ダイアログ ボックスに、新しく作成したキーが表示されます。

このキーをコピーして安全な場所に保管してください(後で取得する必要がある場合は、[API Manager] → [認証情報] ページから行えます)。後で削除する予定のテストキーを使用していない限り、次のセクションに示すように「API キー制限」を追加することをおすすめします。

API キー制限

API キーはデフォルトでは無制限ですが、(たとえば、ブラウザに配置されている場合に)誰もがこのキーを読み取ったり、キーが配置されているデバイスにアクセスしたりできる場合は、安全ではありません。この API キーに「制限」を課し、権限のない使用を禁止することをおすすめします。

制限を追加するには、[API キーを作成しました] ダイアログ ボックスの [キーを制限] をクリックします。[API キー] 設定パネルが表示されます。

選択する制限のタイプはアプリケーションのニーズによって異なります。

  • API と直接通信する(つまり、バックエンドやミドルウェアを経由しない)ウェブ アプリケーションでは、HTTP リファラー制限を追加する必要があります。ただし、それらのアプリケーションでは API キーを公開することになるため、代わりにサービス アカウント認証スキームを使用することを優先します。
  • サービス アカウントをサポートできないバックエンド アプリケーション(クライアント ライブラリにサポートされる言語がない埋め込みデバイスなど)では、異なる IP アドレスのクライアントからの使用を防ぐために IP アドレス制限を追加する必要があります。
  • Android アプリケーションでは Android アプリ制限を追加して、パッケージ名と SHA-1 署名証明書フィンガープリントを追加する必要があります。
  • iOS アプリケーションでは iOS アプリ制限を追加して、iOS バンドル識別子を追加し、iOS バンドルへの API 呼び出しを制限する必要があります。

テストの場合は、制限を設定する必要はありません。ただし、アプリケーションを本番環境にデプロイした後は、このキーに制限を追加するか、キーを削除することをおすすめします。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Natural Language API
ご不明な点がありましたら、Google のサポートページをご覧ください。