GSP213

概要
実際の環境では、常に、機密データを保護し、ウェブ アプリケーションの継続的な可用性を確保する必要があります。Google Cloud VPC ネットワークを使用して、Google Cloud 環境内でより安全でスケーラブルな管理しやすいウェブサーバー デプロイを作成する方法を学習します。
このラボでは、デフォルト構成の VPC ネットワークに 2 つの nginx ウェブサーバーを作成し、タグ付きのファイアウォール ルールを使用して、ウェブサーバーへの外部 HTTP アクセスを制御します。そして IAM のロールとサービス アカウントについて確認します。
- 2 つのウェブサーバーを使用することで冗長性を確保できます。1 つのウェブサーバーに障害が発生しても、もう一方でウェブ トラフィックの処理を継続できるため、ダウンタイムを防ぐことができます。
- タグ付きのファイアウォール ルールにより、特定のウェブサーバーへの到達を許可するトラフィックをきめ細かく制御できます。
- タスクを実行するための権限をサービス アカウントに割り当てることで、最小権限の原則を維持し、クラウド リソースを安全に保つことができます。
目標
このラボでは、次のタスクの実行方法について学びます。
- VPC ネットワークに nginx ウェブサーバーを作成する
- タグ付きのファイアウォール ルールを作成する
- IAM ロールが付与されたサービス アカウントを作成する
- ネットワーク管理者とセキュリティ管理者のロールの権限を確認する
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
左側の [ラボの詳細] ペインには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] ペインでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] ペインでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
ウィンドウで次の操作を行います。
- Cloud Shell 情報ウィンドウで操作を進めます。
- Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、 が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
- [承認] をクリックします。
出力:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注: Google Cloud における gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. ウェブサーバーを作成する
このセクションでは、デフォルトの VPC ネットワークに 2 台のウェブサーバー(blue と green)を作成します。次に、ウェブサーバー上に nginx をインストールし、2 つのサーバーを区別できるようにスタートページを変更します。
blue サーバーを作成する
ネットワーク タグを指定して blue サーバーを作成します。
-
Cloud コンソールで、ナビゲーション メニュー(
) > [Compute Engine] > [VM インスタンス] に移動します。
-
新しいインスタンスを作成するには、[インスタンスを作成] をクリックします。
-
[マシンの構成] を参照します。
以下の値を選択します。
プロパティ |
値(値を入力するか、指定されたオプションを選択) |
名前 |
blue |
リージョン |
|
ゾーン |
|
使用可能なリージョンとゾーンについては、「Google Cloud Compute Engine のリージョンとゾーン」ガイドの「使用可能なリージョンとゾーン」のセクションをご覧ください。
-
[ネットワーキング] をクリックします。
- [ネットワーク タグ] に、「
web-server
」と入力します。
注: ネットワーク タグは、特定のファイアウォール ルールとネットワーク ルートが適用された VM インスタンスをネットワークで識別するときに使用されます。このラボの後半では、VM インスタンスへの HTTP アクセスを許可するファイアウォール ルールを、web-server タグを付けて作成します。あるいは、[HTTP トラフィックを許可する] チェックボックスをオンにすることもできます。このチェックボックスをオンにすると、このインスタンスに http-server というタグが付けられて、「tcp:80」のタグ付きファイアウォール ルールが自動的に作成されます。
-
[作成] をクリックします。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが付与されます。
blue サーバーを作成します。
green サーバーを作成する
ネットワーク タグを指定せずに green サーバーを作成します。
-
引き続きコンソール内で、[VM インスタンス] ページの [インスタンスを作成] をクリックします。
-
[マシンの構成] を参照します。
以下の値を選択します。
プロパティ |
値(値を入力するか、指定されたオプションを選択) |
名前 |
green |
リージョン |
|
ゾーン |
|
-
[作成] をクリックします。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが付与されます。
green サーバーを作成します。
nginx をインストールしてスタートページをカスタマイズする
nginx を両方の VM インスタンスにインストールし、2 つのサーバーを区別できるようにスタートページを変更します。
-
blue の [VM インスタンス] ダイアログで [SSH] をクリックし、ターミナルを起動して接続します。
注: VM への接続がエラー「SSH authentication failed
」で失敗した場合は、[再試行] をクリックして接続を再確立します。
- blue の SSH ターミナルから次のコマンドを実行して、nginx をインストールします。
sudo apt-get install nginx-light -y
- 次のコマンドを実行して、nano エディタでスタートページを開きます。
sudo nano /var/www/html/index.nginx-debian.html
-
<h1>Welcome to nginx!</h1>
行を <h1>Welcome to the blue server!</h1>
に置き換えます。
-
Ctrl+O、Enter、Ctrl+X キーの順に押します。
- 次のコマンドで変更を確認します。
cat /var/www/html/index.nginx-debian.html
出力に次の内容が含まれているはずです。
<h1>Welcome to the blue server!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
-
blue の SSH ターミナルを閉じます。
exit
green サーバーにも同じ手順を繰り返します。
-
green で [SSH] をクリックし、ターミナルを起動して接続します。
- 次のコマンドを実行して、nginx をインストールします。
sudo apt-get install nginx-light -y
- 次のコマンドを実行して、nano エディタでスタートページを開きます。
sudo nano /var/www/html/index.nginx-debian.html
-
<h1>Welcome to nginx!</h1>
行を <h1>Welcome to the green server!</h1>
に置き換えます。
-
Ctrl+O、Enter、Ctrl+X キーの順に押します。
- 次のコマンドで変更を確認します。
cat /var/www/html/index.nginx-debian.html
出力に次の内容が含まれているはずです。
<h1>Welcome to the green server!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
-
green の SSH ターミナルを閉じます。
exit
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが付与されます。
nginx をインストールしてスタートページをカスタマイズする。
タスク 2. ファイアウォール ルールを作成する
タグ付きのファイアウォール ルールを作成して、HTTP 接続をテストします。
タグ付きのファイアウォール ルールを作成する
web-server ネットワーク タグが付いた VM インスタンスに適用されるファイアウォール ルールを作成します。
- Cloud コンソールで、ナビゲーション メニュー(
) > [VPC ネットワーク] > [ファイアウォール] に移動します。
-
default-allow-internal ファイアウォール ルールが存在しています。
注: default-allow-internal ファイアウォール ルールは、default ネットワーク内のすべてのプロトコルまたはポートへのトラフィックを許可します。ネットワーク タグ web-server を使用して、このネットワークの外部から blue サーバーへのトラフィックのみを許可するファイアウォール ルールを作成します。
-
[ファイアウォール ルールを作成] をクリックします。
-
以下の値を設定し、他はすべてデフォルト値のままにします。
プロパティ |
値(値を入力するか、指定されたオプションを選択) |
名前 |
allow-http-web-server |
ネットワーク |
default |
ターゲット |
指定されたターゲットタグ |
ターゲットタグ |
web-server |
ソースフィルタ |
IPv4 範囲 |
送信元 IPv4 範囲 |
0.0.0.0/0 |
プロトコルとポート |
[指定したプロトコルとポート] と [tcp] のチェックボックスをオンにして「80」と入力し、次に [その他のプロトコル] をオンにして「icmp」と入力します。 |
注: すべてのネットワークを指定するために、[送信元 IPv4 範囲] には /0 を含めます。
- [作成] をクリックします。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが付与されます。
タグ付きのファイアウォール ルールを作成します。
test-vm を作成する
Cloud Shell コマンドラインを使用して test-vm インスタンスを作成します。
-
新しい Cloud Shell ターミナルを開きます。
-
次のコマンドを実行して、ゾーンに test-vm インスタンスを作成します。
gcloud compute instances create test-vm --machine-type=e2-micro --subnet=default --zone={{{project_0.default_zone|ZONE}}}
出力は次のようになります。
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
test-vm {{{project_0.default_zone|ZONE}}} e2-micro 10.142.0.4 35.237.134.68 RUNNING
注: コンソールまたは gcloud コマンドラインから VM インスタンスを簡単に作成できます。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが付与されます。
test-vm を作成する
HTTP 接続をテストする
test-vm から、blue と green の内部 IP アドレスと外部 IP アドレスに対して curl
コマンドを実行します。
- コンソールで、ナビゲーション メニュー(
)> [Compute Engine] > [VM インスタンス] に移動します。
-
blue と green の内部 IP アドレスと外部 IP アドレスを確認します。
-
test-vm で [SSH] をクリックし、ターミナルを起動して接続します。
-
blue の内部 IP アドレスへの HTTP 接続をテストするために、blue の内部 IP を入力して次のコマンドを実行します。
curl <blue の内部 IP をこちらに入力>
Welcome to the blue server!
ヘッダーが表示されます。
-
green の内部 IP アドレスへの HTTP 接続をテストするために、green の内部 IP を入力して次のコマンドを実行します。
curl -c 3 <green の内部 IP をこちらに入力>
Welcome to the green server!
ヘッダーが表示されます。
注: 内部 IP アドレスを使用して両方のサーバーに HTTP アクセスすることができました。test-vm はウェブサーバーの default ネットワークと同じ VPC ネットワーク上にあるため、「tcp:80」の接続は default-allow-internal ファイアウォール ルールによって許可されます。
-
blue の外部 IP アドレスへの HTTP 接続をテストするために、blue の外部 IP を入力して次のコマンドを実行します。
curl <blue の外部 IP をこちらに入力>
Welcome to the blue server!
ヘッダーが表示されます。
-
green の外部 IP アドレスへの HTTP 接続をテストするために、green の外部 IP を入力して次のコマンドを実行します。
curl -c 3 <Enter green's external IP here>
注: これは動作しません。リクエストは停止します。
-
Ctrl+C キーを押して HTTP リクエストを停止します。
注: allow-http-web-server は web-server タグが付いた VM インスタンスにのみ適用されるため、HTTP アクセスできるのは予想どおり blue サーバーの外部 IP アドレスのみです。
新規タブを開き http://[サーバーの外部 IP]
に移動して、ブラウザから同じ動作を確認できます。
タスク 3. ネットワーク管理者とセキュリティ管理者のロールについて調べる
Cloud IAM を使用すると、特定のリソースに対するアクションの実行を、承認を受けたユーザーのみに許可できます。これはクラウドのリソースを集約して可視化し、管理するうえで役立ちます。次のロールは、単一プロジェクト ネットワーキングと組み合わせて使用され、各 VPC ネットワークへの管理アクセスを個別に制御します。
-
ネットワーク管理者: ネットワーキング リソース(ファイアウォール ルールと SSL 証明書を除く)を作成、変更、削除するための権限。
-
セキュリティ管理者: ファイアウォール ルールと SSL 証明書を作成、変更、削除するための権限。
これらのロールをサービス アカウントに適用することでロールについて確認していきます。サービス アカウントは、個々のエンドユーザーではなく VM インスタンスに属する特別な Google アカウントです。ユーザーを新たに作成せずに、サービス アカウントの利用を test-vm に許可して、ネットワーク管理者やセキュリティ管理者のロールの権限を実行します。
現在の権限を確認する
現在、test-vm では Compute Engine のデフォルトのサービス アカウントを使用しています。このアカウントは、Cloud Shell コマンドラインと Google Cloud コンソールで作成されるすべてのインスタンスで有効です。
test-vm で利用可能なファイアウォール ルールを表示または削除してみます。
-
test-vm インスタンスの SSH ターミナルに戻ります。
- 使用可能なファイアウォール ルールを一覧表示してみます。
gcloud compute firewall-rules list
出力は次のようになります。
ERROR: (gcloud.compute.firewall-rules.list) Some requests did not succeed:
- Insufficient Permission
注: これは動作しません。
- 次のコマンドを実行して、allow-http-web-server ファイアウォール ルールを削除してみます。
gcloud compute firewall-rules delete allow-http-web-server
- 続行するかどうかを尋ねられたら「Y」と入力します。
出力は次のようになります。
ERROR: (gcloud.compute.firewall-rules.delete) Could not fetch resource:
- Insufficient Permission
注: これは動作しません。
注: Compute Engine のデフォルトのサービス アカウントには、ファイアウォール ルールのリストを一覧表示および削除するための適切な権限がありません。これは適切なロールがない他のユーザーにも当てはまります。
サービス アカウントを作成する
サービス アカウントを作成してネットワーク管理者のロールを適用します。
-
Cloud コンソールで、ナビゲーション メニュー(
)> [IAM と管理者] > [サービス アカウント] に移動します。
-
Compute Engine のデフォルトのサービス アカウントが表示されます。
-
[サービス アカウントを作成] をクリックします。
-
[サービス アカウント名] を「Network-admin
」に設定して、[作成して続行] をクリックします。
-
[ロールを選択] で、[Cloud Engine] > [Compute ネットワーク管理者] を選択し、[続行] をクリックしてから [完了] をクリックします。
-
サービス アカウントの「Network-admin
」を作成したら、右隅のその他アイコンをクリックして、プルダウンの [鍵を管理] をクリックし、[鍵を追加] をクリックして、プルダウンから [新しい鍵を作成] を選択します。[作成] をクリックして、JSON 出力をダウンロードします。
-
[閉じる] をクリックします。
ローカルのパソコンに JSON キーファイルがダウンロードされます。このキーファイルは、後で VM にアップロードします。
-
ローカルマシンの JSON キーファイルの名前を credentials.json に変更します。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが付与されます。
Network-admin サービス アカウントを作成します。
test-vm に許可を与えて権限を確認する
Network-admin サービス アカウントを使用できるよう test-vm に許可を与えます。
-
test-vm インスタンスの SSH ターミナルに戻ります。
- SSH VM ターミナルから credentials.json をアップロードするには、右上の隅にある [ファイルをアップロード] アイコンをクリックします。
-
credentials.json を選択してアップロードします。
- [ファイル転送] ウィンドウで [閉じる] をクリックします。
注: プロンプトが表示されたら、「Cloud Identity-Aware Proxy を介した接続に失敗しました」というダイアログの [再試行] をクリックして、ファイルを再度アップロードします。
- 次のコマンドを実行して、先ほどアップロードした認証情報を使用して VM に許可を与えます。
gcloud auth activate-service-account --key-file credentials.json
注: 使用しているイメージには、Cloud SDK がプリインストールされています。そのため、Cloud SDK を初期化する必要はありません。別の環境でこのラボを試行している場合は、Cloud SDK のインストールに関する手順に沿って操作してください。
- 使用可能なファイアウォール ルールを一覧表示してみます。
gcloud compute firewall-rules list
出力は次のようになります。
NAME NETWORK DIRECTION PRIORITY ALLOW DENY
allow-http-web-server default INGRESS 1000 tcp:80
default-allow-icmp default INGRESS 65534 icmp
default-allow-internal default INGRESS 65534 all
default-allow-rdp default INGRESS 65534 tcp:3389
default-allow-ssh default INGRESS 65534 tcp:22
これは動作しています。
- 次のコマンドを実行して、allow-http-web-server ファイアウォール ルールを削除してみます。
gcloud compute firewall-rules delete allow-http-web-server
- 続行するかどうかを尋ねられたら「Y」と入力します。
出力は次のようになります。
ERROR: (gcloud.compute.firewall-rules.delete) Could not fetch resource:
- Required 'compute.firewall.delete' permission for 'projects/[PROJECT_ID]/global/firewall/allow-http-web-server'
注: これは動作しません。
注: 想定したとおり、ネットワーク管理者のロールでは、ファイアウォール ルールの一覧表示は可能ですが、変更および削除はできません。
サービス アカウントを更新して権限を確認する
Network-admin サービス アカウントをセキュリティ管理者のロールに指定します。
-
Cloud コンソールで、ナビゲーション メニュー(
)> [IAM と管理] > [IAM] に移動します。
-
Network-admin アカウントを見つけます。[名前] 列に注意を払います。この列によってこのアカウントが特定されます。
-
Network-admin アカウントの鉛筆アイコンをクリックします。
-
[ロール] を [Compute Engine] > [Compute セキュリティ管理者] に変更します。
-
[保存] をクリックします。
-
test-vm インスタンスの SSH ターミナルに戻ります。
-
使用可能なファイアウォール ルールを一覧表示してみます。
gcloud compute firewall-rules list
出力は次のようになります。
NAME NETWORK DIRECTION PRIORITY ALLOW DENY
allow-http-web-server default INGRESS 1000 tcp:80
default-allow-icmp default INGRESS 65534 icmp
default-allow-internal default INGRESS 65534 all
default-allow-rdp default INGRESS 65534 tcp:3389
default-allow-ssh default INGRESS 65534 tcp:22
これは動作しています。
- 次のコマンドを実行して、allow-http-web-server ファイアウォール ルールを削除してみます。
gcloud compute firewall-rules delete allow-http-web-server
- 続行するかどうかを尋ねられたら「Y」と入力します。
出力は次のようになります。
Deleted [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-00e186e4b1cec086/global/firewall/allow-http-web-server].
これは動作しています。
注: 想定したとおり、セキュリティ管理者のロールでは、ファイアウォール ルールのリスト取得と削除が可能です。
ファイアウォール ルールの削除を確認する
allow-http-web-server ファイアウォール ルールを削除したので、blue サーバーの外部 IP に HTTP アクセスできなくなったことを確認します。
-
test-vm インスタンスの SSH ターミナルに戻ります。
-
blue の外部 IP アドレスへの HTTP 接続をテストするために、blue の外部 IP を入力して次のコマンドを実行します。
curl -c 3 <Enter blue's external IP here>
注: これは動作しません。
-
Ctrl+C キーを押して HTTP リクエストを停止します。
注: ファイアウォール ルールに不要な変更が行われないようにセキュリティ管理者のロールは適切なユーザーやサービス アカウントに指定してください。
お疲れさまでした
このラボでは、2 つの nginx ウェブサーバーを作成し、タグ付きのファイアウォール ルールを使用して外部 HTTP アクセスを制御しました。そして、ネットワーク管理者のロールを持つサービス アカウントを作成し、セキュリティ管理者のロールを使用して、これらのロールのそれぞれの権限を確認しました。
次のステップと詳細情報
サービス アカウントとロールの詳細については、こちらのラボをご確認ください。
Google Cloud Identity and Access Management の基本概念については、Google Cloud Identity and Access Management の概要をご覧ください。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 6 月 9 日
ラボの最終テスト日: 2025 年 6 月 9 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。