各種のユースケースをサポートする認証情報の種類

概要

gsutil は現在、いくつかの認証情報 / 認証に対応しています。また、一般公開データに対する匿名アクセスも可能です(匿名アクセスの詳細については、gsutil help anon をご覧ください)。以下では、これらの認証情報の種類について詳しく説明します。また、Cloud SDK またはスタンドアロンの gsutil で認証情報を設定または使用する方法についても説明します。

gsutil の Cloud SDK ディスリビューションによる認証情報の構成 / 使用

gsutil を Cloud SDK 経由でインストールし、使用している場合(gcloud)、Cloud SDK が ~/.config/gcloud の下にあるファイルに認証情報を保存します。ユーザーはこのファイルを編集できません。認証情報を操作するには、gcloud auth コマンドを実行する必要があります。複数の認証情報を設定する必要がある場合(たとえば、1 つをユーザー アカウントに使用し、もう 1 つをサービス アカウントに使用する場合)、gcloud auth コマンドを使用して認証情報を切り替えます。詳細については、https://cloud.google.com/sdk/gcloud/reference/auth をご覧ください。

gcloud auth で認証情報が設定されると、ユーザーに boto 構成ファイルがあるかどうかにかかわらず、これらの認証情報が使用されます(BOTO_CONFIG 環境変数に別のパスが指定されていない限り、この構成ファイルは、~/.boto にあります)。ただし、gcloud 認証情報ストアにない Cloud Storage 以外の認証情報(たとえば、S3 アカウントの HMAC 認証情報)が必要になると、gsutil は boto 構成ファイルで認証情報を探します。

スタンドアロン gsutil ディストリビューションによる認証情報の構成 / 使用

gsutil のスタンドアロン ディストリビューション(https://pub.storage.googleapis.com/gsutil.tar.gzhttps://pub.storage.googleapis.com/gsutil.zip、PyPi からダウンロード可能)をインストールしている場合、認証情報は gsutil config コマンドで設定され、ユーザーが編集可能な boto 構成ファイルに保存されます(BOTO_CONFIG 環境変数に別のパスが指定されていない限り、~/.boto にあります)。この環境で複数の認証情報を設定する場合(たとえば、1 つをユーザー アカウントに使用し、もう 1 つをサービス アカウントに使用する場合)、それぞれの認証情報で 1 回 gsutil config を実行し、それぞれを別の boto 構成ファイルに保存します(たとえば、1 つを ~/.boto_user_account という名前に変更し、もう 1 つを ~/.boto_service_account という名前に変更します)。認証情報を切り替えるときには、BOTO_CONFIG 環境変数を使用します(たとえば、BOTO_CONFIG=~/.boto_user_account gsutil ls を実行します)。

gsutil のスタンドアロン バージョンと JSON API を使用すると、Cloud Storage で OAuth2 ユーザー アカウントと OAuth2 サービス アカウントの認証情報を 1 つの boto 構成ファイルで設定できます。また、S3 HMAC 認証情報(s3:// URL を使用する場合に必要)と Google Compute Engine 内部サービス アカウントの認証情報も使用できます。Google Compute Engine 内部サービス アカウントの認証情報は、OAuth2 認証情報がない場合にのみ使用されます。

サポートされる認証情報の種類

gsutil では、いくつかの種類の認証情報をサポートしています。上記の説明のように、使用している gsutil のディストリビューションによって使用可能な認証情報が異なります。

OAuth2 ユーザー アカウント:
特定のユーザーの代わりにリクエストを認証する場合に優先的に使用されます(gsutil で最もよく利用されるケースです)。 これは、"gsutil config"(Cloud SDK の場合には "gcloud init")を実行したときに、デフォルトで作成される認証情報です。 OAuth2 認証の詳細については、https://developers.google.com/accounts/docs/OAuth2#scenarios をご覧ください。
HMAC:

このタイプの認証情報は、HMAC 認証を使用しているプログラムで使用されます。この認証方法は、他のクラウド ストレージ サービス プロバイダでサポートされています。また、この種類の認証情報は、HMAC 認証情報に対応しているサービス プロバイダ間でデータを移動する場合にも使用されます。"gsutil config -a" を実行すると、この認証情報が作成されます。

Cloud Storage と別のサービス プロバイダの両方に HMAC 認証情報を設定できます。また、Cloud Storage に OAuth2 ユーザー アカウントの認証情報を設定し、別のサービス プロバイダに HMAC 認証情報を設定することもできます。この設定を行うには、"gsutil config" コマンド(Cloud SDK の場合には "gcloud init")を実行した後で、生成された ~/.boto 構成ファイルを編集し、他の認証情報を追加できる場所のコメントを参照してください。

HMAC 認証の詳細情報:
https://developers.google.com/storage/docs/reference/v1/getting-startedv1#keys
OAuth2 サービス アカウント:

ユーザーではなく、サービスまたはアプリケーションの代わりに認証を行う場合に、優先的に使用される認証情報です。たとえば、夜間の cron ジョで gsutil を実行し、データのアップロード / ダウンロードを実行する場合、サービス アカウントを使用すると、従業員の認証情報に依存することなく、cron ジョブを実行できます。"gsutil config -e" を実行すると、この種類の認証情報が設定されます。Cloud SDK 経由でサービス アカウントの認証情報を設定するには、"gcloud auth activate-service-account" を実行します。

デフォルトでは、API アクセスの場合、サービス アカウントはオーナーではなく編集者と見なされます。デフォルトのオブジェクト / バケット ACL では、編集者に OWNER アクセスが設定されていますが、ACL テンプレート オプションでは編集者から OWNER アクセスが削除されています。このため、予期しない結果が生じる可能性があります。この問題を回避するには、"gsutil acl set <canned-ACL>" ではなく "gsutil acl ch" を使用してバケットの権限を変更します。

"gsutil config -e" または "gcloud auth activate-service-account" で使用するサービス アカウントの設定方法:

OAuth2 サービス アカウントの詳細情報:
https://developers.google.com/accounts/docs/OAuth2ServiceAccount
アカウントの役割の詳細:
https://developers.google.com/console/help/#DifferentRoles
Google Compute Engine 内部サービス アカウント:

この種類のサービス アカウントは、App Engine または Google Compute Engine でホストされたアカウントで使用されます。この認証情報は、gcloud compute instances creates コマンドを実行すると、Google Compute Engine で自動的に作成されます。この認証情報は -- スコープフラグで制御できます。

Google Compute Engine サービス アカウントの詳細:
https://developers.google.com/compute/docs/authentication;
App Engine サービス アカウントの詳細:
https://developers.google.com/appengine/docs/python/appidentity/overview
サービス アカウントのなりすまし:

サービス アカウントのなりすましは、特定のリソースに短期間のアクセス権を付与する必要がある場合に便利です。たとえば、通常は読み取り専用であり、信頼されたサービス アカウントによって一時的に書き込みアクセスを付与する、機密性の高いデータのバケットがある場合です。

「gsutil -i」、「gsutil config」を実行して boto 構成ファイルを編集するか、「gcloud config set auth/impersonate_service_account」を実行して、なりすましに使用するサービス アカウントを指定できます。

なりすましを行うには、元の認証情報で、ターゲット サービス アカウントに roles/iam.serviceAccountTokenCreator を付与する必要があります。 詳細については、次をご覧ください。