インスタンスのサービス アカウントの作成と有効化

このページでは、仮想マシン インスタンスでサービス アカウントを作成して使用する方法について説明します。サービス アカウントは、他の Google Cloud Platform サービスにアクセスするためにアプリケーション コードで使用できる認証情報を持つ特別なアカウントです。

サービス アカウントの詳細については、サービス アカウントの概要をご覧ください。

始める前に

新しいサービス アカウントを作成する

Google Cloud Identity and Access Management(IAM)を使用して、新しいサービス アカウントを作成して設定することができます。アカウントを作成した後で、1 つ以上の IAM の役割をアカウントに付与し、そのサービス アカウントとして走行する仮想マシン インスタンスを承認します。

新しいサービス アカウントを作成するには次の手順に従います。

  1. IAM サービス アカウントのドキュメントの説明に沿って、新しいサービス アカウントを作成します。

  2. サービス アカウントのメールアドレスを取得します。 このサービス アカウントとして走行するインスタンスを設定するためにメールアドレスが必要です。Console でサービス アカウントのメールアドレスを確認します。

    1. API Console で、[サービス アカウント] ページに移動します。

      [サービス アカウント] ページに移動

    2. プロンプトが表示されたら、プロジェクトを選択します。
    3. 新しいサービス アカウントを探し、サービス アカウントのメールアドレスをメモします。

    通常、サービス アカウントのメールアドレスは、次の形式でサービス アカウント ID から取得されます。

    [SERVICE-ACCOUNT-NAME]@[PROJECT_ID].iam.gserviceaccount.com
    
  3. サービス アカウントに IAM 役割を付与します。役割を付与しないと、サービス アカウントがサービスにアクセスできなくなります。IAM の役割の一覧については、IAM ドキュメントの役割についてをご覧ください。

  4. 次に、サービス アカウントとして走行するようにインスタンスを設定します。 手順に従い、サービス アカウントとして走行するようにインスタンスを設定します

新しいインスタンスをサービス アカウントとして走行するように設定する

新しいサービス アカウントを作成したら、サービス アカウントとして走行する新しい仮想マシン インスタンスを作成できます。既存のインスタンスにサービス アカウントを割り当てたり、サービス アカウントを変更したりする場合には、インスタンスのサービス アカウントとアクセス スコープを変更するをご覧ください。

同じサービス アカウントを複数の仮想マシン インスタンスで使用することができますが、1 つの仮想マシン インスタンスに設定できるサービス アカウント ID は 1 つだけです。同じサービス アカウントを複数の仮想マシン インスタンスに割り当てた場合、それ以降そのサービス アカウントに行った変更は、そのサービス アカウントを使用しているすべてのインスタンスに影響します。これには、そのサービス アカウントに付与されている IAM の役割に加えた変更も含まれます。たとえば、役割を削除した場合、そのサービス アカウントを使用しているすべてのインスタンスは、その役割によって付与されている権限を失います。

サービス アカウントとして実行する新しいインスタンスを設定するには、Google API Console、または gcloud コマンドライン ツールを使用します。また、API で直接設定することもできます。

Console

  1. Cloud Platform Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動する

  2. [インスタンスを作成] ボタンをクリックします。
  3. [新しいインスタンスの作成] ページで、インスタンス向けに希望するプロパティを入力します。
  4. [ID と API へのアクセス] セクションで、使用するサービス アカウントをプルダウン リストから選択します。
  5. [作成] ボタンをクリックし、インスタンスを作成します。

gcloud

gcloud コマンドライン ツールを使用して、新しいインスタンスを作成し、そのインスタンスがカスタム サービス アカウントとして実行することを承認するには、サービス アカウントのメールアドレスとインスタンスに必要なアクセス スコープを指定します。一般的に、cloud-platform アクセス スコープのみを設定するだけで済みます。仮想マシン インスタンスに付与したアクセス スコープとサービス アカウントに付与した IAM 役割の組み合わせにより、インスタンスでサービス アカウントに許可されるアクセスレベルが決まります。サービス アカウントで API メソッドを実行できるのは、アクセス スコープと IAM 役割の両方で許可されている場合だけです。

または、サービスが呼び出す特定の API メソッドへのアクセスを承認する特定のスコープの設定を選択することもできます。たとえば、instances.insert メソッドを呼び出すには、https://www.googleapis.com/auth/compute スコープまたは https://www.googleapis.com/auth/cloud-platform スコープを使用した承認以外に、このメソッドへのアクセスが許可された IAM 役割が必要です。cloud-platform スコープの代わりに compute スコープを設定することができます。これにより、Compute Engine 内部のメソッドを呼び出すためのサービス承認が付与されますが、Compute Engine の外部の API メソッドを呼び出すための承認は付与されません。

gcloud compute instances create [INSTANCE_NAME] \
    --service-account [SERVICE_ACCOUNT_EMAIL] \
    --scopes [SCOPES,...]

ここで:

次に例を示します。

gcloud compute instances create example-vm \
    --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \
    --scopes https://www.googleapis.com/auth/cloud-platform

gcloud ツールは、長いスコープ URI の代わりになるスコープ エイリアスも提供します。たとえば、Google Cloud Storage への完全アクセス権のスコープは https://www.googleapis.com/auth/devstorage.full_control です。このスコープのエイリアスは storage-full です。

スコープのリストとスコープのエイリアスについては、[instances create] ページの --scopes フラグの説明で確認できます。instances create コマンドのヘルプでも、これらのスコープとエイリアスの一覧が見られます。

gcloud compute instances create --help

エイリアスは、ノーマル スコープの URI を指定するのと同じ方法で指定します。次に例を示します。

gcloud compute instances create [INSTANCE_NAME] \
    --service-account [SERVICE_ACCOUNT_EMAIL] \
    --scopes cloud-platform

API

API では、インスタンスを作成するための通常のリクエストを作成しますが、serviceAccounts プロパティを含めます。 サービス アカウントのメールアドレスを取得して email プロパティに含め、インスタンスの目的のアクセス スコープも指定します。一般的に、cloud-platform アクセス スコープのみを設定するだけで済みます。サービス アカウントに付与したアクセス スコープと IAM 役割の組み合わせにより、インスタンスでサービス アカウントに許可されるアクセスレベルが決まります。サービス アカウントで API メソッドを実行できるのは、アクセス スコープと IAM 役割の両方で許可されている場合だけです。

または、サービスが呼び出す特定の API メソッドへのアクセスを承認する特定のスコープの設定を選択することもできます。たとえば、instances.insert メソッドを呼び出すには、https://www.googleapis.com/auth/compute スコープまたは https://www.googleapis.com/auth/cloud-platform スコープを使用した承認が必要です。cloud-platform スコープの代わりに compute スコープを設定することができます。これにより、Compute Engine 内部のメソッドを呼び出すためのサービス承認が付与されますが、Compute Engine の外部の API メソッドを呼び出すための承認は付与されません。

POST https://www.googleapis.com/compute/v1/projects/zones/[ZONE]/instances

{ "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]", "name": "[INSTANCE_NAME]", "serviceAccounts": [ { "email": "[SERVICE_ACCOUNT_EMAIL]", "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], ... }

サービス アカウントとして走行するインスタンスを設定すると、次のような方法でインスタンス内からサービス アカウントの認証情報を使用できます。

サービス アカウントの認証情報を使用したアプリケーションの認証

サービス アカウントとして走行するようにインスタンスを設定した後で、サービス アカウントの認証情報を使用してインスタンス上で走行するアプリケーションを承認することができます。

クライアント ライブラリを使用したアプリケーションの認証

クライアント ライブラリは、Google API で認証するために、アプリケーションのデフォルト認証情報を使用し、それらの API にリクエストを送信することができます。アプリケーションは、アプリケーションのデフォルト認証情報により、複数のソースから認証情報を取得できるため、アプリケーションをローカルにテストできます。テスト後は、アプリケーション コードを変更することなく、Compute Engine インスタンスにデプロイできます。アプリケーションをローカルで開発する場合、環境変数や Google Cloud SDK を使用してアプリケーションを認証できます。アプリケーションをインスタンス上で実行する場合は、そのインスタンスで有効になっているサービス アカウントを使用してアプリケーションを認証できます。

この例では、Python クライアント ライブラリを使用して認証を行い、プロジェクト内のバケットの一覧表示を行う Cloud Storage API にリクエストを行います。この例では以下の手順を使用します。

  1. Cloud Storage API に必要な認証資格情報を取得し、build() メソッドと認証情報を使用して Cloud Storage サービスを初期化します。
  2. Cloud Storage 内のバケットをリストします。

このサンプルは、Google Cloud Storage 内のバケットを管理するためのアクセス権があるインスタンス上で実行できます。

import argparse

import googleapiclient.discovery

def create_service():
    # Construct the service object for interacting with the Cloud Storage API -
    # the 'storage' service, at version 'v1'.
    # Authentication is provided by application default credentials.
    # When running locally, these are available after running
    # `gcloud auth application-default login`. When running on Compute
    # Engine, these are available from the environment.
    return googleapiclient.discovery.build('storage', 'v1')

def list_buckets(service, project_id):
    buckets = service.buckets().list(project=project_id).execute()
    return buckets

def main(project_id):
    service = create_service()
    buckets = list_buckets(service, project_id)
    print(buckets)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('project_id', help='Your Google Cloud Project ID.')

    args = parser.parse_args()

    main(args.project_id)

アクセス トークンを使用したアプリケーション ディレクトリの認証

一部のアプリケーションでは、OAuth2 アクセス トークンをリクエストして、クライアント ライブラリを介さずにそのアクセス トークンを直接使用するか、または、gcloud ツールや gsutil ツールを使用する必要がある場合があります。アプリケーションを認証するために、これらのアクセス トークンを取得して使用するためのオプションは複数あります。たとえば、curl を使用してシンプルなリクエストを作成したり、Python などのプログラミング言語を使用して柔軟性を高めたりできます。

cURL

curl を使用してアクセス トークンをリクエストして、API にリクエストを送信するには:

  1. アプリケーションが走行するインスタンス上で、次のコマンドによってアクセス トークンのメタデータ サーバーをクエリします。

    $ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
    -H "Metadata-Flavor: Google"

    以下のようなレスポンスが返されます。

    {
          "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA",
          "expires_in":3599,
          "token_type":"Bearer"
     }

  2. レスポンスから access_token プロパティの値をコピーし、その値を使用して API にリクエストを送信します。たとえば、次のリクエストでは、特定のゾーンからプロジェクト内のインスタンスのリストが出力されます。

    $ curl https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances \
    -H "Authorization":"Bearer [ACCESS_TOKEN]"
    

    ここで:

    • [PROJECT_ID] は、このリクエストのプロジェクト ID です。
    • [ZONE] は、インスタンスのリスト元のゾーンです。
    • [ACCESS_TOKEN] は、ステップ 1 で取得したアクセス トークンの値です。

    リクエストに設定可能なパラメータの詳細については、パラメータのドキュメントを参照してください。

Python

この例では、Python アプリケーションで Google Cloud Storage API にアクセスするためにトークンをリクエストする方法を示します。この例では、以下の手順を使用します。

  1. メタデータ サーバーのアクセス トークンをリクエストします。
  2. サーバーのレスポンスからアクセス トークンを抽出します。
  3. アクセス トークンを使用して、Google Cloud Storage にリクエストを行います。
  4. リクエストが成功した場合、スクリプトによってレスポンスが出力されます。

import argparse

import requests

METADATA_URL = 'http://metadata.google.internal/computeMetadata/v1/'
METADATA_HEADERS = {'Metadata-Flavor': 'Google'}
SERVICE_ACCOUNT = 'default'

def get_access_token():
    url = '{}instance/service-accounts/{}/token'.format(
        METADATA_URL, SERVICE_ACCOUNT)

    # Request an access token from the metadata server.
    r = requests.get(url, headers=METADATA_HEADERS)
    r.raise_for_status()

    # Extract the access token from the response.
    access_token = r.json()['access_token']

    return access_token

def list_buckets(project_id, access_token):
    url = 'https://www.googleapis.com/storage/v1/b'
    params = {
        'project': project_id
    }
    headers = {
        'Authorization': 'Bearer {}'.format(access_token)
    }

    r = requests.get(url, params=params, headers=headers)
    r.raise_for_status()

    return r.json()

def main(project_id):
    access_token = get_access_token()
    buckets = list_buckets(project_id, access_token)
    print(buckets)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('project_id', help='Your Google Cloud project ID.')

    args = parser.parse_args()

    main(args.project_id)

アクセス トークンは短期間で失効します。メタデータ サーバーは、失効までの残り時間が 60 秒になるまで、アクセス トークンをキャッシュに保存します。新しいトークンは必要に応じてリクエストできますが、アプリケーションには API 呼び出しが成功するための有効なアクセス トークンが必要です。

サービス アカウントが一度に保持できるトークンの合計数には制限があります。現在、この制限は 600 です。この制限に達すると、Compute Engine は、新しいトークンを必要とするインスタンスを作成できなくなり、SERVICE_ACCOUNT_TOO_MANY_TOKENS エラーが表示されます。

トークン数の制限に達し、新しいトークンを作成できなくなったら、サービス アカウントと関連付けられているいくつかのトークンを削除する必要があります。また、サービス アカウントを使用している Compute Engine インスタンスを削除します。これで、サービス アカウントが使用するスコープセットの数が減ります。

サービス アカウントを使用してインスタンス上のツールを承認する

一部のアプリケーションでは、Compute Engine の大部分のイメージにデフォルトで含まれている gcloud ツールや gsutil ツールのコマンドが使用されることがあります。これらのツールは、インスタンスのサービス アカウントとサービス アカウントに付与されている関連の権限を自動的に認識します。特に、サービス アカウントに正しい役割を付与すると、gcloud auth login を使用せずに、インスタンスから gcloudgsutil ツールを使用できます。

サービス アカウントの認識は自動的に行われ、インスタンスに含まれている gcloud および gsutil ツールにのみ適用されます。新しいツールを作成したり、カスタムツールを追加したりする場合は、クライアント ライブラリを使用するか、アプリケーション内で直接アクセス トークンを使用して、アプリケーションを承認する必要があります。

サービス アカウントの自動認証を利用するには、サービス アカウントに適切な IAM の役割を付与し、サービス アカウントとして実行するようにインスタンスを設定します。たとえば、サービス アカウントに roles/storage.objectAdmin の役割を付与すると、gsutil ツールで、Google Cloud Storage のオブジェクトを自動的に管理してアクセスできます。

同様に、サービス アカウントに対して roles/compute.instanceAdmin.v1 を有効にすると、gcloud compute ツールでインスタンスを自動管理できます。

インスタンスのサービス アカウントとアクセス スコープを変更する

既存のインスタンスのサービス アカウントやアクセス スコープを変更できます。これは、インスタンスを異なる ID で実行したい場合や、インスタンスで必要な API を呼び出すために異なるスコープが必要になった場合に行います。たとえば、アクセス スコープを変更して、新しい API へのアクセスを許可できます。または、インスタンスのサービス アカウントを変更して、インスタンスが Compute Engine のデフォルトのサービス アカウントではなく、独自に作成したサービス アカウントで走行するようにできます。

インスタンスのサービス アカウントまたはアクセス スコープを変更する場合、インスタンスを一時的に停止する必要があります。インスタンスを停止する方法については、インスタンスの停止をご覧ください。サービス アカウントまたはアクセス スコープを変更した後で、インスタンスを再起動してください。

以下のいずれかの方法で、停止したインスタンスのサービス アカウントまたはアクセス スコープを変更します。

Console

  1. Compute Engine で [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. サービス アカウントを変更する VM インスタンスをクリックします。
  3. インスタンスが停止していない場合には、[停止] ボタンをクリックします。インスタンスが停止するまで待機します。
  4. 次に、[編集] ボタンをクリックします。
  5. 下にスクロールして、[サービス アカウント] セクションに移動します。
  6. プルダウン メニューから、必要なサービス アカウントを選択します。
  7. スコープを変更するには、[アクセス スコープ] セクションで、必要に応じて適切なスコープを設定します。ベスト プラクティスとして、VM インスタンスに必要なアクセス スコープのみを指定します。設定する適切なアクセス スコープがわからない場合は、[すべての Cloud API に完全アクセス権を許可] を選択してから、IAM の役割を設定してアクセスを制限するようにしてください。
  8. [保存] ボタンをクリックして変更を保存します。

gcloud

コマンド instances set-service-account を使用して、インスタンス名、サービス アカウントのメールアドレス、必要なスコープを指定します。インスタンスからサービス アカウントとアクセス スコープを削除することもできます。これにより、インスタンスが Google Cloud Platform サービスにアクセスするのを効率的に回避できます。

 gcloud compute instances set-service-account [INSTANCE_NAME] \
     [--service-account [SERVICE_ACCOUNT_EMAIL] | --no-service-account] \
     [--no-scopes | --scopes [SCOPES,...]]

ここで:

  • [SERVICE_ACCOUNT_EMAIL] は、使用するサービス アカウントのメールアドレスです。例: my-sa-123@my-project-123.iam.gserviceaccount.com.
  • [INSTANCE_NAME] はインスタンスの名前です。
  • [SCOPES] は、完全なスコープ URI のカンマ区切りリストです。また、--scopes フラグの説明で指定したスコープ エイリアスです。インスタンスのスコープをすべて削除するには、--no-scopes フラグを使用します。

たとえば、次のコマンドを実行すると、example-instance というインスタンスにサービス アカウント my-sa-123@my-project-123.iam.gserviceaccount.com が割り当てられ、このインスタンスに Compute Engine に対する読み取り / 書き込みアクセスと Google Cloud Storage に対する読み取り専用アクセスを許可するアクセス スコープが設定されます。

 gcloud compute instances set-service-account example-instance \
     --service-account my-sa-123@my-project-123.iam.gserviceaccount.com \
     --scopes compute-rw,storage-ro

API

API で、setServiceAccount メソッドに対する POST リクエストを作成します。

https://www.googleapis.com/compute/v1/projects[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setServiceAccount

ここで:

  • [PROJECT_ID] は、このリクエストのプロジェクト ID です。
  • [ZONE] は、このインスタンスが属するゾーンです。
  • [INSTANCE_NAME] はインスタンスの名前です。

リクエストの本文で、サービス アカウントのメールアドレスとインスタンスに必要なスコープ URI を提供します。

 {
   "email": "[SERVICE_ACCOUNT_EMAIL]",
   "scopes": [
     "[SCOPE_URI]",
     "[SCOPE_URI]",
     ...
 ]}

たとえば、次のリクエストではサービス アカウントのメールアドレス my-sa-123@my-project-123.iam.gserviceaccount.com を使用して、Google Cloud Storage と Google BigQuery のスコープを設定しています。

{
  "email": "my-sa-123@my-project-123.iam.gserviceaccount.com",
  "scopes": [
    "https://www.googleapis.com/auth/bigquery",
    "https://www.googleapis.com/auth/devstorage.read_only"
]}

サービス アカウントのメールアドレスの取得

サービス アカウントを識別するには、サービス アカウントのメールアドレスが必要です。サービス アカウントのメールアドレスは、以下のいずれかのオプションを使用して取得します。

Console

  1. API Console で、[サービス アカウント] ページに移動します。

    [サービス アカウント] ページに移動

  2. プロンプトが表示されたら、プロジェクトを選択します。[サービス アカウント] ページに、そのプロジェクトのすべてサービス アカウントとメールアドレスが一覧表示されます。

gcloud

ローカルマシンで、gcloud compute instances describe コマンドを使用します。

gcloud compute instances describe [INSTANCE_NAME] --format json

 {
       ...
       "serviceAccounts":[
          {
             "email":"123845678986-compute@developer.gserviceaccount.com",
             "scopes":[
                "https://www.googleapis.com/auth/devstorage.full_control"
             ]
          }
       ]
       ...
    }

インスタンスがサービス アカウントを使用していない場合、serviceAccounts プロパティのないレスポンスを受け取ります。

メタデータ サーバー

インスタンス内からメタデータ サーバーをクエリします。http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/ へのリクエストを行います。

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
  -H "Metadata-Flavor: Google"
  

インスタンスの作成時に 1 つ以上のサービス アカウントを有効にしている場合、この curl コマンドを実行すると、以下のような出力が返されます。

123845678986-compute@developer.gserviceaccount.com/
default/

インスタンスがサービス アカウントを使用していない場合、空のレスポンスが返されます。

API

サービス アカウント API にリクエストを行います。

Compute Engine のデフォルトのサービス アカウントの使用

Compute Engine のデフォルトのサービス アカウントに関する詳しい知識があり、新しいサービス アカウントを作成する代わりにデフォルトのサービス アカウントによって提供される認証情報を使用する場合は、IAM の役割をデフォルトのサービス アカウントに付与することができます。

デフォルトでは、すべての Compute Engine インスタンスは、デフォルトのサービス アカウントとして実行できます。gcloud コマンドライン ツールまたは API Console を使用してインスタンスを作成するときに、サービス アカウントの指定を省略すると、デフォルトのサービス アカウント ガインスタンスに割り当てられます。

デフォルトのサービス アカウントに IAM の役割を付与する前に、以下の点を確認してください。

  • IAM の役割をデフォルトのサービス アカウントに付与すると、デフォルトのサービス アカウントとして実行中のすべてのインスタンスに影響を及ぼします。たとえば、デフォルトのサービス アカウントに roles/storage.objectAdmin の役割を付与すると、必要なアクセス スコープが指定されたデフォルトのサービス アカウントとして走行しているすべてのインスタンスが roles/storage.objectAdmin の役割によって付与される権限を持ちます。同様に、特定の役割を省略してアクセス権限を制限すると、デフォルトのサービス アカウントとして実行中のすべてのインスタンスに影響を及ぼします。

  • サービス アカウントのプロジェクト編集者の権限は取り消す必要があります。デフォルトのサービス アカウントは、デフォルトでプロジェクト編集者としてプロジェクトに追加されます。IAM の役割を使用するには、プロジェクト編集者の権限を取り消す必要があります。

IAM の役割をデフォルトのサービス アカウントに付与すべきかわからない場合は、代わりに新しいサービス アカウントを作成する必要があります。

IAM の役割をデフォルトのサービス アカウントに付与するには、次の手順に従います。

  1. API Console の [IAM] ページに移動します。

    [IAM] ページに移動

  2. プロンプトが表示されたら、プロジェクトを選択します。
  3. Compute Engine のデフォルトのサービス アカウントという名前のサービス アカウントを探します。
  4. [役割] 列で、Compute Engine のデフォルトのサービス アカウントのプルダウン メニューを展開します。
  5. 編集者のアクセス権を削除して、変更を保存します。
  6. 次に、サービス アカウントに IAM の役割を付与します

現在デフォルトのサービス アカウントとして走行しているすべての仮想マシン インスタンスが、アカウントに付与した IAM の役割に従って他の Google Cloud Platform API にアクセスできるようになります。

デフォルトのサービス アカウントとして走行する新しいインスタンスを設定する場合の手順は次のとおりです。

Console

  1. Cloud Platform Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動する

  2. [インスタンスを作成] ボタンをクリックします。
  3. [新しいインスタンスの作成] ページで、インスタンス向けに希望するプロパティを入力します。
  4. [ID と API へのアクセス] セクションで、プルダウン リストから [Compute Engine のデフォルトのサービス アカウント] を選択します。
  5. [作成] ボタンをクリックし、インスタンスを作成します。

gcloud

新しいインスタンスを作成し、そのインスタンスがデフォルトのサービス アカウントを使用してすべての Google Cloud Platform サービスに対する完全アクセス権を持つことを承認するには:

gcloud compute instances create [INSTANCE_NAME] \
     --scopes cloud-platform

API

API では、インスタンスを作成するための通常のリクエストを作成しますが、serviceAccounts プロパティを含めます。 デフォルトのサービス アカウント ID を取得し、サービス アカウントの email として含めます。次に、scopes プロパティに 1 つ以上のスコープを設定します。

POST https://www.googleapis.com/compute/v1/projects/zones/[ZONE]/instances

{ "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]", "name": "[INSTANCE_NAME]", "serviceAccounts": [ { "email": "[DEFAULT_SERVICE_ACCOUNT_EMAIL]", "scopes": "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], ... }

ベスト プラクティス

インスタンスで Google API を呼び出す必要がある場合、Google では、そのジョブの実行に必要な最低限の権限のみを持つサービス アカウントとしてインスタンスを実行することをおすすめしています。次のプロセスでインスタンスのサービス アカウントを設定してください。

  1. Compute Engine のデフォルトのサービス アカウントを使用せずに、新しいサービス アカウントを作成します。
  2. 必要なリソースについてのみ、このサービス アカウントに IAM 役割を付与します。
  3. このサービス アカウントとして走行するようにインスタンスを設定します。
  4. インスタンスに https://www.googleapis.com/auth/cloud-platform スコープを付与します。

必要以上のアクセス権を付与しないように、サービス アカウントの権限を定期的に確認し、最新の状態にしてください。

次のステップ

外出先でもリソースをモニタリング

Google Cloud Console アプリを入手して、プロジェクトの管理にお役立てください。

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

Compute Engine ドキュメント