arrow_back

サービス アカウントとロール: 基礎

ログイン 参加
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

サービス アカウントとロール: 基礎

ラボ 1時間 15分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

GSP199

Google Cloud セルフペース ラボ

概要

サービス アカウントは、個々のエンドユーザーではなく、仮想マシンに権限を付与する特種な Google アカウントです。サービス アカウントは主に、API と Google Cloud サービスへの安全で管理された接続を確立するために使用されます。信頼できる接続へのアクセスを許可し、悪意のある接続を拒否することは、どの Google Cloud プロジェクトでも不可欠なセキュリティ機能です。このラボでは、サービス アカウントの詳細について実践形式で学びます。

学習内容

このラボでは、次の方法について学びます。

  • サービス アカウントを作成、管理する。
  • 仮想マシンを作成し、サービス アカウントに関連付ける。
  • クライアント ライブラリを使用して、サービス アカウントから BigQuery にアクセスする。
  • Compute Engine インスタンスから BigQuery の一般公開データセットに対してクエリを実行する。

前提条件

Cloud IAM の使用経験があることが望ましいですが、受講生にはサービス アカウントの予備知識がほとんどない、あるいはまったくないことを想定しています。このトピックに関する高度な実践演習については、以下のラボをご確認ください。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでも [ユーザー名] を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでも [パスワード] を確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

プロジェクトのリージョンを設定する

次のコマンドを実行して、プロジェクトのリージョンを設定します。

gcloud config set compute/region {{{project_0.default_region | Region}}}

サービス アカウントとは

サービス アカウントは、個々のエンドユーザーではなく、アプリケーションや仮想マシン(VM)に属している特別な Google アカウントです。アプリケーションはサービス アカウントを使用して、サービスの Google API を呼び出します。ユーザーが関与する必要はありません。

たとえば、あるサービス アカウントで Compute Engine VM が実行される場合、必要なリソースへのアクセス権をそのアカウントに付与できます。こうしてサービス アカウントはサービスの ID となり、サービス アカウントの権限によって、サービスがアクセスできるリソースが制御されます。

サービス アカウントは、アカウント固有のメールアドレスで識別されます。

サービス アカウントのタイプ

ユーザーが管理するサービス アカウント

Google Cloud コンソールを使用して新しい Cloud プロジェクトを作成するときに Compute Engine API がプロジェクトで有効になっている場合は、デフォルトで Compute Engine サービス アカウントが作成されます。これはメールアドレスで識別できます。

PROJECT_NUMBER-compute@developer.gserviceaccount.com

プロジェクトに App Engine アプリケーションが含まれている場合、デフォルトの App Engine サービス アカウントがプロジェクトにデフォルトで作成されます。これはメールアドレスで識別できます。

PROJECT_ID@appspot.gserviceaccount.com

Google が管理するサービス アカウント

プロジェクトの IAM ポリシーや Google Cloud コンソールには、ユーザー管理のサービス アカウントに加えて、その他のサービス アカウントが表示される場合があります。これらのサービス アカウントは Google が作成し所有しているもので、さまざまな Google サービスを表します。各アカウントには Google Cloud プロジェクトにアクセスするための IAM のロールが自動的に付与されます。

Google API サービス アカウント

Google が管理するサービス アカウントの一例として、メールアドレスで識別できる Google API サービス アカウントがあります。

PROJECT_NUMBER@cloudservices.gserviceaccount.com

このサービス アカウントは、自動的に内部 Google プロセスを実行するように設計されており、Cloud コンソールの [サービス アカウント] セクションには一覧表示されません。デフォルトでは、このアカウントには自動的にそのプロジェクトの編集者のロールが付与され、Cloud コンソールの [IAM] セクションに表示されます。このサービス アカウントは、プロジェクトが削除された場合にのみ削除されます。

注: Google サービスはプロジェクトへのアクセス権を持つアカウントに依存しているため、プロジェクトでサービス アカウントのロールを削除したり変更したりしないでください。

IAM のロールについて

Google Cloud Identity and Access Management で ID から Google Cloud API を呼び出す場合、その ID にはリソースを使用するための適切な権限が必要です。権限を付与するには、ユーザー、グループ、またはサービス アカウントにロールを付与します。

ロールの種類

Cloud IAM には、次の 3 種類のロールがあります。

  • 基本ロール: Cloud IAM の導入前に存在していたオーナー、編集者、閲覧者のロールが含まれます。
  • 事前定義ロール: 特定のサービスへのアクセスを細かく制御します。このロールは Google Cloud により管理されます。
  • カスタムロール: ユーザー指定の権限のリストに応じたきめ細かなアクセス権が提供されます。

ロールの詳細については、こちらのガイドをご覧ください。

タスク 1. サービス アカウントを作成、管理する

新しい Cloud プロジェクトを作成すると、Google Cloud はそのプロジェクトに対して自動的に Compute Engine サービス アカウントと App Engine サービス アカウントを作成します。プロジェクトでは最大 98 個のサービス アカウントを作成して、リソースへのアクセスを制御できます。

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

サービス アカウントの作成はプロジェクトへのメンバーの追加に似ていますが、サービス アカウントは個々のエンドユーザーではなくアプリケーションに属します。

  • サービス アカウントを作成するには、Cloud Shell で次のコマンドを実行します。
gcloud iam service-accounts create my-sa-123 --display-name "my service account"

コマンドの出力にはサービス アカウントが表示されます。たとえば、以下のようになります。

Created service account [my-sa-123]

サービス アカウントへのロールの付与

IAM のロールを付与する際には、サービス アカウントをリソースまたは ID として扱うことができます。

アプリケーションでは、Google Cloud サービスに対する認証のためにサービス アカウントを ID として使用します。たとえば、Compute Engine 仮想マシン(VM)をサービス アカウントとして実行している場合は、プロジェクト(リソース)のサービス アカウント(ID)に編集者のロールを付与できます。

それに加えて、誰が VM を起動できるかを制御することもできます。そのためには、サービス アカウント(リソース)に対する serviceAccountUser のロールをユーザー(ID)に付与します。

特定のリソースに対するロールをサービス アカウントに付与する

サービス アカウントにロールを付与すると、Google Cloud Platform プロジェクトのリソースに対して特定の操作を行う権限が付与されます。たとえば、storage.admin のロールが付与されたサービス アカウントでは、Cloud Storage のオブジェクトやバケットを管理できます。

  • 作成したサービス アカウントにロールを付与するには、Cloud Shell で次のコマンドを実行します。
gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID \ --member serviceAccount:my-sa-123@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com --role roles/editor

出力には、現時点でサービス アカウントに付与されているロールの一覧が表示されます。

bindings: - members: - user:email1@gmail.com role: roles/owner - members: - serviceAccount:our-project-123@appspot.gserviceaccount.com - serviceAccount:123456789012-compute@developer.gserviceaccount.com - serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com - user:email3@gmail.com role: roles/editor - members: - user:email2@gmail.com role: roles/viewer etag: BwUm38GGAQk= version: 1

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 サービス アカウントを作成、管理する

タスク 2. クライアント ライブラリを使用して、サービス アカウントで BigQuery にアクセスする

このセクションでは、必要なロールを持つサービス アカウントを使用して、インスタンスから BigQuery の一般公開データセットに対してクエリを実行します。

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

まず、Cloud コンソールで新しいサービス アカウントを作成します。

  1. ナビゲーション メニュー > [IAM と管理] に移動し、[サービス アカウント] を選択して [+ サービス アカウントを作成] をクリックします。

  2. 以下の必要事項に入力します。

  • サービス アカウント名: bigquery-qwiklab
  1. [作成して続行] をクリックして、次のロールを追加します。

    • BigQuery > BigQuery データ閲覧者

    • BigQuery > BigQuery ユーザー

コンソールには次のように表示されます。

[サービス アカウントの作成] タブページ

  1. [続行] をクリックし、[完了] をクリックします。

VM インスタンスを作成する

  1. Cloud コンソールで [Compute Engine] > [VM インスタンス] に移動し、[インスタンスを作成] をクリックします。

  2. 次の情報を指定して VM を作成します。

構成
名前 bigquery-instance
リージョン
ゾーン
シリーズ E2
マシンタイプ e2-medium
ブートディスク Debian GNU/Linux 11(bullseye)x86/64
サービス アカウント bigquery-qwiklab
アクセス スコープ 各 API にアクセス権を設定
BigQuery 有効
注: bigquery-qwiklab サービス アカウントがプルダウン リストに表示されない場合は、[フィルタ] セクションに名前を入力してください。
  1. [作成] をクリックします。

Compute Engine インスタンス上でサンプルコードを作成する

  1. Cloud コンソールで、[Compute Engine] > [VM インスタンス] に移動します。
  2. [SSH] ボタンをクリックして bigquery-instance に SSH 接続します。
注: SSH 接続中に、[Identity-Aware Proxy を使わずに接続] をクリックできます。

SSH ウィンドウで、次のコマンドを実行して必要な依存関係をインストールします。

sudo apt-get update sudo apt-get install -y git python3-pip pip3 install --upgrade pip pip3 install google-cloud-bigquery pip3 install pyarrow pip3 install pandas pip3 install db-dtypes

次はサンプルの Python ファイルを作成します。

echo " from google.auth import compute_engine from google.cloud import bigquery credentials = compute_engine.Credentials( service_account_email='YOUR_SERVICE_ACCOUNT') query = ''' SELECT year, COUNT(1) as num_babies FROM publicdata.samples.natality WHERE year > 2000 GROUP BY year ''' client = bigquery.Client( project='{{{project_0.project_id | Your Project ID}}}', credentials=credentials) print(client.query(query).to_dataframe()) " > query.py

次のコマンドでプロジェクト ID を query.py に追加します。

sed -i -e "s/{{{project_0.project_id | Your Project ID}}}/$(gcloud config get-value project)/g" query.py

次のコマンドを実行して、sed コマンドによりファイル内のプロジェクト ID が正しく変更されたことを確認します。

cat query.py

出力例(実際の出力とは異なる場合があります)

from google.auth import compute_engine from google.cloud import bigquery credentials = compute_engine.Credentials( service_account_email='YOUR_SERVICE_ACCOUNT') query = ''' SELECT year, COUNT(1) as num_babies FROM publicdata.samples.natality WHERE year > 2000 GROUP BY year ''' client = bigquery.Client( project={{{ project_0.project_id }}}, credentials=credentials) print(client.query(query).to_dataframe())

次のコマンドでサービス アカウントのメールアドレスを query.py に追加します。

sed -i -e "s/YOUR_SERVICE_ACCOUNT/bigquery-qwiklab@$(gcloud config get-value project).iam.gserviceaccount.com/g" query.py

次のコマンドを実行して、sed コマンドによりファイル内のサービス アカウント メールが正しく変更されたことを確認します。

cat query.py

出力例(実際の出力とは異なる場合があります)

from google.auth import compute_engine from google.cloud import bigquery credentials = compute_engine.Credentials( service_account_email='bigquery-qwiklab@{{{ project_0.project_id }}}.iam.gserviceaccount.com') query = ''' SELECT year, COUNT(1) as num_babies FROM publicdata.samples.natality WHERE year > 2000 GROUP BY year ''' client = bigquery.Client( project={{{ project_0.project_id }}}, credentials=credentials) print(client.query(query).to_dataframe())

これでアプリケーションは、このサービス アカウントに関連付けられている権限を使用できるようになります。次に、以下の Python コマンドでクエリを実行します。

python3 query.py

このクエリは、以下のような出力を返します(実際の数値は異なる場合があります)。

Row year num_babies 0 2008 4255156 1 2006 4273225 2 2003 4096092 3 2004 4118907 4 2002 4027376 5 2005 4145619 6 2001 4031531 7 2007 4324008 注: 実際の出力では、行の数値が上記の出力の年に対応していない可能性があります。ただし、年ごとの赤ちゃんの数は同じであることを確認してください。

これで完了です。bigquery-qwiklab サービス アカウントを使用して BigQuery の一般公開データセットにリクエストが送信されました。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 サービス アカウントで BigQuery にアクセスする

お疲れさまでした

このラボでは、サービス アカウントを使用する方法を学びました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2024 年 7 月 17 日

ラボの最終テスト日: 2024 年 7 月 17 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします