このドキュメントでは、別のサービス アカウントを使用するように既存の仮想マシン(VM)を構成する方法について説明します。サービス アカウントは特別なアカウントであり、通常はアプリケーションやコンピューティング ワークロードが承認された API 呼び出しを行うときに使用されます。
サービス アカウントは、カスタム アプリケーションなどのワークロードで、エンドユーザーの関与なしに Google Cloud リソースにアクセスする場合やアクションを実行する必要がある場合に必要です。サービス アカウントを使用するタイミングの詳細については、サービス アカウントの使用に関するベスト プラクティスをご覧ください。
Google Cloud APIs を呼び出す必要があるアプリケーションがある場合、アプリケーションまたはワークロードを実行中の VM にユーザー管理のサービス アカウントを接続することをおすすめします。次に、サービス アカウントに IAM ロールを付与して、サービス アカウント、ひいては VM 上で実行中のアプリケーションに、Google Cloud リソースへのアクセス権を付与します。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
-
compute.instances.setServiceAccount
-
compute.instances.stop
-
compute.instances.start
- Compute Engine のデフォルトのサービス アカウントを使用せずに新しいユーザー管理サービス アカウントを作成し、必要なリソースとオペレーションについてのみ、そのサービス アカウントに IAM ロールを付与します。
- サービス アカウントを VM に接続します。
- VM に Cloud Platform(
https://www.googleapis.com/auth/cloud-platform
)スコープを設定します。これにより、VM のサービス アカウントが、使用権限のある Google Cloud APIs を呼び出せるようになります。- Google Cloud コンソールを使用してサービス アカウントを指定すると、VM のアクセス スコープは自動的にデフォルトで
cloud-platform
スコープに設定されます。 - Google Cloud CLI または Compute Engine API を使用してサービス アカウントを指定すると、
scopes
パラメータを使用してアクセス スコープを設定できます。
- Google Cloud コンソールを使用してサービス アカウントを指定すると、VM のアクセス スコープは自動的にデフォルトで
IAM ロールをデフォルトのサービス アカウントに付与すると、デフォルトのサービス アカウントとして走行中のすべての VM に影響を及ぼします。たとえば、デフォルトのサービス アカウントに
roles/storage.objectAdmin
ロールを付与すると、必要なアクセス スコープを持ちデフォルトのサービス アカウントとして実行している全 VM が、roles/storage.objectAdmin
ロールによって付与される権限を持つことになります。同様に、特定のロールを省略してアクセス権限を制限すると、デフォルトのサービス アカウントとして実行中のすべての VM に影響します。組織のポリシーの構成によっては、デフォルトのサービス アカウントに、プロジェクトに対する編集者のロールが自動的に付与される場合があります。
iam.automaticIamGrantsForDefaultServiceAccounts
組織ポリシー制約を適用して、自動的なロール付与を無効にすることを強くおすすめします。2024 年 5 月 3 日以降に組織を作成した場合、この制約はデフォルトで適用されます。自動ロール付与を無効にする場合、デフォルトのサービス アカウントに付与するロールを決定し、これらのロールを付与する必要があります。
デフォルトのサービス アカウントにすでに編集者ロールが設定されている場合は、編集者ロールを権限の低いロールに置き換えることをおすすめします。サービス アカウントのロールを安全に変更するには、Policy Simulator を使用して変更の影響を確認してから、適切なロールを付与または取り消す操作を行います。
[VM インスタンス] ページに移動します。
サービス アカウントを変更する VM インスタンスの名前をクリックします。
VM が停止していない場合には、[停止] をクリックします。VM が完全に停止するまで待ちます。
[編集] をクリックします。
下にスクロールして、[サービス アカウント] セクションに移動します。
プルダウン リストから、VM に割り当てるサービス アカウントを選択します。
- ユーザー管理のサービス アカウントを選択した場合、VM のアクセス スコープはデフォルトで推奨の
cloud-platform
スコープになります。ユーザー管理のサービス アカウントに別のスコープが必要な場合は、gcloud CLI または Compute Engine API を使用してサービス アカウントを接続します。 - Compute Engine のデフォルトのサービス アカウントを選択した場合は、Google Cloud コンソールでアクセス スコープを変更できます。
- スコープを変更するには、[アクセス スコープ] セクションで、[各 API にアクセス権を設定] を選択して、必要に応じて適切なスコープを設定します。
- 推奨: 設定する適切なアクセス スコープがわからない場合は、[すべての Cloud API に完全アクセス権を許可] を選択してから、サービス アカウントに IAM ロールを設定してアクセスを制限してください。
- ユーザー管理のサービス アカウントを選択した場合、VM のアクセス スコープはデフォルトで推奨の
[保存] をクリックして、変更を保存します。
[開始 / 再開] をクリックして VM を再起動します。
instances stop
コマンドを使用して VM を停止します。VM_NAME
は、実際の VM インスタンスの名前に置き換えます。gcloud compute instances stop VM_NAME
サービス アカウントを接続します。サービス アカウントを接続するには、
instances set-service-account
コマンドを使用して、VM 名、サービス アカウントのメールアドレス、必要なスコープを指定します。アクセス スコープの設定の詳細については、ベスト プラクティスをご覧ください。gcloud compute instances set-service-account VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=SCOPES
以下を置き換えます。
SERVICE_ACCOUNT_EMAIL
: 作成したサービス アカウントのメールアドレス。例:my-sa-123@my-project-123.iam.gserviceaccount.com
。メールアドレスを表示するには、サービス アカウントの一覧取得をご覧ください。VM からサービス アカウントを削除する場合は、
--no-service-account
フラグを使用します。VM_NAME
: VM インスタンスの名前SCOPES
:--scopes
フラグの説明で提供されるスコープ URI またはエイリアスのカンマ区切りリスト。VM のスコープをすべて削除するには、
--no-scopes
フラグを使用します。
たとえば、次のコマンドを実行すると、example-instance という VM にサービス アカウント
my-sa-123@my-project-123.iam.gserviceaccount.com
を割り当て、この VM にアクセス スコープを設定して、Compute Engine に対する読み取り / 書き込みアクセスと 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
instances start
コマンドを使用して VM を開始します。VM_NAME
は、実際の VM インスタンスの名前に置き換えます。gcloud compute instances start VM_NAME
instances.stop
メソッドを使用してPOST
リクエストを送信し、VM を停止します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
以下を置き換えます。
PROJECT_ID
: VM が属しているプロジェクトZONE
: VM インスタンスが配置されているゾーンVM_NAME
: 停止する VM の名前
setServiceAccount
メソッドにPOST
リクエストを送信して、サービス アカウントを接続します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": [ "SCOPE_URI", "SCOPE_URI", ... ] }
以下を置き換えます。
PROJECT_ID
: このリクエストのプロジェクト ID。ZONE
: この VM が属しているゾーン。VM_NAME
: VM の名前。SERVICE_ACCOUNT_EMAIL
: 作成したサービス アカウントのメールアドレス。例:my-sa-123@my-project-123.iam.gserviceaccount.com
。メールアドレスを表示するには、サービス アカウントの一覧取得をご覧ください。SCOPE_URI
: 必要なスコープ URI。
たとえば、次のリクエストではサービス アカウントのメールアドレス
my-sa-123@my-project-123.iam.gserviceaccount.com
を使用して、Cloud Storage と BigQuery のスコープを設定しています。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "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" ] }
instances.start
メソッドを使用してPOST
リクエストを作成し、VM を起動します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
以下を置き換えます。
PROJECT_ID
: VM が属しているプロジェクトZONE
: VM インスタンスが配置されているゾーンVM_NAME
: 起動する VM の名前
[VM インスタンス] ページに移動します。
サービス アカウントを変更する VM インスタンスの名前をクリックします。
[API と ID の管理] セクションに移動します。このセクションには、VM で使用されるサービス アカウントとアクセス スコープが表示されます。
- サービス アカウントの権限を制限して、サービス アカウントの権限を定期的に確認し、最新の状態にします。
- サービス アカウントの削除は慎重に行ってください。サービス アカウントを削除する前に、重要なアプリケーションがそのサービス アカウントを使用していないことを確認してください。サービス アカウントが使用されているかどうかわからない場合は、削除するのではなく、サービス アカウントを無効にすることをおすすめします。無効になっているサービス アカウントがまた必要になった場合は、再度有効にできます。
- サービス アカウントのセキュリティ リスクを軽減します。詳しくは、サービス アカウントの使用に関するベスト プラクティスをご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロール
VM 上でサービス アカウントを構成するために必要な権限を取得するには、VM またはプロジェクトに対する Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。この事前定義ロールには、VM 上でサービス アカウントを構成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
VM でサービス アカウントを構成するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
概要
VM のサービス アカウントは、以下のように構成することをおすすめします。
サービス アカウントを設定する
ユーザー管理のサービス アカウントを作成するか、Compute Engine のデフォルトのサービス アカウントを使用できます。ユーザー管理のサービス アカウントの使用をおすすめします。
選択したサービス アカウントに対して、必要な Identity and Access Management(IAM)ロールが割り当てられていることを確認します。
ユーザー管理
ユーザー管理サービス アカウントがない場合は、サービス アカウントを作成します。詳しい手順については、サービス アカウントを設定するをご覧ください。
デフォルト
Compute Engine のデフォルトのサービス アカウントに関する詳しい知識があり、新しいサービス アカウントを作成する代わりにデフォルトのサービス アカウントによって提供される認証情報を使用する場合は、IAM ロールをデフォルトのサービス アカウントに付与できます。
デフォルトのサービス アカウントに IAM ロールを付与する前に、以下の点を確認してください。
デフォルトのサービス アカウントに IAM ロールを付与すべきかどうか判断できない場合は、代わりにユーザー管理の新しいサービス アカウントを作成します。
サービス アカウントを接続してアクセス スコープを更新する
VM のサービス アカウントとアクセス スコープを変更するには、VM を一時的に停止する必要があります。
サービス アカウントが VM とは異なるプロジェクトにある場合、異なるプロジェクトのリソースのサービス アカウントを構成する必要があります。
VM のサービス アカウントとアクセス スコープを変更するには、次のいずれかの方法を使用します。
コンソール
gcloud
REST
VM が使用するサービス アカウントを表示する
プロジェクト内のすべてのサービス アカウントを表示するには、サービス アカウントの一覧取得をご覧ください。
VM が使用しているサービス アカウントを特定する必要がある場合は、次のいずれかの手順を行います。
Console
gcloud
gcloud compute instances describe
コマンドを実行します。gcloud compute instances describe VM_NAME \ --format json
出力は次のようになります。
{ ... "serviceAccounts":[ { "email":"123845678986-compute@developer.gserviceaccount.com", "scopes":[ "https://www.googleapis.com/auth/devstorage.full_control" ] } ] ... }
VM がサービス アカウントを使用していない場合、
serviceAccounts
プロパティのないレスポンスを受信します。メタデータ サーバー
VM 内からメタデータ サーバーをクエリします。次のように
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/
インスタンスがサービス アカウントを使用していない場合、空のレスポンスが返されます。
おすすめの方法
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-05 UTC。
-