
始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Public Cloud Run Service
/ 25
Create service account
/ 25
Minimum balance log entry of 500
/ 25
Minimum balance log entry of 700
/ 25
最小権限の原則とは、あるリソースに対してその機能に必要なリソースのみへのアクセスを許可することです。たとえば、サービスが自動データベース バックアップを実行する場合、サービスは 1 つのデータベースに対する読み取り専用権限に制限される必要があります。同様に、サービスがデータの暗号化のみを担当する場合、データの復号化の権限は付与されるべきではありません。
Cloud Run では、サービス アカウントを指定せずにサービスをデプロイすると、デフォルトのサービス アカウントが使用されます。使用されるデフォルトのサービス アカウントは、プロジェクトに対する広範な編集者のロールを持つ Compute Engine サービス アカウントです。ポリシー バインディングの継承により、このサービス アカウントにはプロジェクト内のほとんどのリソースに対する読み取り権限と書き込み権限が付与されています。便利ではありますが、このサービス アカウントでリソースを作成、変更、削除できるため、固有のセキュリティ リスクがあります。
このリスクを軽減し、最小権限の原則を実装するには、サービスの ID として機能するサービス アカウントを作成し、サービスの機能に必要な最小限の権限をそのアカウントに付与する必要があります。
このラボでは、次のタスクの実行方法を学びます。
これらのラボは、Google Cloud に関する中級レベルの知識を前提としています。必要な手順はコンテンツで説明されていますが、以下のプロダクトのいずれかに慣れていれば、より理解が深まります。
この Qwiklabs ハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側のパネルには、このラボで使用する必要がある一時的な認証情報が表示されます。
ユーザー名をコピーし、[Google Console を開く] をクリックします。 ラボでリソースが起動し、別のタブで [アカウントの選択] ページが表示されます。
[アカウントの選択] ページで [別のアカウントを使用] をクリックします。[ログイン] ページが開きます。
[接続の詳細] パネルでコピーしたユーザー名を貼り付けます。パスワードもコピーして貼り付けます。
しばらくすると、このタブで Cloud コンソールが開きます。
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。
[続行] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
出力:
出力例:
出力:
出力例:
Cloud Shell で環境変数を設定して、プロビジョニング プロセスをより柔軟にします。
Cloud Run API を有効にします。
LOCATION 環境変数を作成します。
デフォルトの Cloud Run リージョンを設定します。
Quickway Parking には、セキュリティを強化したい Cloud Run 課金サービスがあります。このタスクでは、次のことを実行します。
Quickway の開発チームは、Google Cloud で利用できる請求アプリケーションのイメージをすでに持っています。
請求アプリケーションのイメージを Cloud Run にデプロイします。
新しいサービスの URL を環境変数に割り当てます。
認証なしでサービスを呼び出します。
Google Cloud コンソールのナビゲーション メニュー()で、[Cloud Run] をクリックします。
課金サービスへのリンクをクリックします。
サービスログを表示するには、[ログ] をクリックします。
ログフィルタ minBalance
を追加して、サービスへのリクエストで受け取った最小残高を表示します。
サービスの詳細ページに戻るには、[<- サービスの詳細] をクリックします。
緑色のチェックマークの左側にあるチェックボックスをオンにして、billing-service を選択します。
セキュリティ チームは、セキュリティ設定で何かを発見しました。上記の構成のどの部分が懸念の対象になっているか、わかりますか?
課金サービスが最初にデプロイされたとき、--allow-unauthenticated
権限が使用されました。これは、サービスが一般公開されており、認証なしで呼び出すことができることを意味します。
タイプ | 権限 | 説明 |
---|---|---|
URL アクセス | --allow-unauthenticated |
サービスを一般公開する(未認証のユーザーがアクセスできる)。 |
呼び出しプリンシパル | allUsers | サービスを誰でも呼び出し/トリガーできるようにする。 |
--allow-unauthenticated
権限を削除すると、Cloud Run のデフォルトの権限を使用してサービスを保護するか、no-allow-unauthenticated
権限を明示的に指定できます。
タイプ | 権限 | 説明 |
---|---|---|
URL アクセス | --no-allow-unauthenticated |
認証でサービスを保護する(認証されたユーザーのみがアクセス可能)。 |
呼び出しプリンシパル | なし | サービスを誰でも呼び出したりトリガーしたりできないようにする。 |
これらの変更を行うことで、セキュリティ チームは全体的な設計に満足するでしょう。
[進行状況を確認] をクリックして、実行したタスクを確認します。
チームは、変更がどのように機能するかを示すために、アプリケーション設計を更新します。
主な変更点は次のとおりです。
Cloud Run で使用される権限について理解を深めたところで、課金サービスに適用されている認証権限を修正します。
既存のデプロイ済みサービスを削除します。
プロンプトが表示されたら、「Y」と入力して Enter キーを押します。
--no-allow-authenticated
権限を使用して課金サービスを再デプロイします。
サービスを再デプロイすると、サービスの URL で認証されていないアクセスが許可されなくなります。また、サービスを呼び出すためのアクセス許可も削除されています。
数秒待ってから、前と同じように課金サービスを再度呼び出します。
期待通りに、サービスで認証が必要になったため、出力は権限エラーになります。
課金サービスを呼び出すには、適切な権限を持つ ID またはサービス アカウントが必要であり、その ID をサービスにバインドする必要があります。
これは、Google Cloud コンソールまたは gcloud コマンドライン インターフェースで行うことができます。このラボでは、Google Cloud コンソールを使用してサービス アカウントを作成し、課金サービスの新しいポリシー バインディングを設定します。
Google Cloud コンソールのナビゲーション メニュー()から [IAM と管理] > [サービス アカウント] を選択します。
認証されたアクセスを提供する新しいサービス アカウントを作成するには、上部にある [サービス アカウントを作成] をクリックします。
サービス アカウントに「Billing Initiator
」という名前を付けます。
アカウントを作成するには、[作成して続行] をクリックし、[アクセス権の付与] ステップに進みます。
Billing Initiator サービス アカウントに課金サービスを呼び出す権限を付与するには、[ロール] プルダウンを選択し、左側をスクロールして [Cloud Run
] を選択し、ロール [Cloud Run 起動元
] を選択します。
サービス アカウントの設定を完了するには、[続行] をクリックしてから、[完了] をクリックします。
コンソールのサービス アカウントのリストの一番上に、新しいサービス アカウントが表示されます。
サービス アカウント Billing Initiator が作成され、プロジェクトの IAM ポリシー バインディングを使用して Cloud Run サービスを呼び出す権限が付与されています。
[進行状況を確認] をクリックして、実行したタスクを確認します。
適切な権限を持つサービス アカウントが作成されたので、これを使用して Cloud Run サービスを呼び出すことができます。
最初の手順は、サービス アカウントを gcloud で設定し、サービスとの認証に使用できるようにすることです。
Cloud Shell ターミナルのメニューで、[追加]()をクリックして、別のタブで新しいシェルを開きます。
このタスクの残りのコマンドをこの Cloud Shell ウィンドウで実行します。
サービス アカウントの ID メールを取得し、環境変数に保存します。
この Cloud Shell ターミナルで、課金サービスの URL を環境変数に割り当てます。
サービス アカウントを使用して gcloud を認証するには、キーファイルを生成します。
サービス アカウントを使用して Cloud Run へのアクセスを承認します。
サービス アカウントから生成された ID トークンを使用して、Cloud Run の課金サービスを呼び出します。
Google Cloud コンソールのナビゲーション メニュー()で、[Cloud Run] をクリックします。
課金サービスへのリンクをクリックします。
サービスログを表示するには、[ログ] をクリックします。
ログフィルタ minBalance
を追加して、サービスへのリクエストで受信した更新後の最小残高を表示します。
[進行状況を確認] をクリックして、実行したタスクを確認します。
適切な権限を持つサービス アカウントを使用して、以前は誰でもアクセスできた Cloud Run サービスを呼び出しました。しかし、この特定のサービスを呼び出すために必要な最小限の権限を使用しているでしょうか?
これが事実かどうかを判断するために、2 つ目の課金サービスをデプロイします。このサービスは、Cloud Scheduler などの他の内部限定公開サービスからのみアクセスできるものとします。
この要件の図を以下に示します。
3 つ目の Cloud Shell ターミナル ウィンドウまたはタブを開きます。
LOCATION 環境変数を作成します。
2 つ目のサービスをシミュレートするには、課金アプリケーションのイメージを Cloud Run にデプロイします。
新しいサービスの URL を環境変数に割り当てます。
3 つ目の Cloud Shell ターミナルで、同じサービス アカウントを使用して Cloud Run へのアクセスを承認します。
サービス アカウントから生成された ID トークンを使用して、2 つ目の Cloud Run サービスを呼び出します。
なぜ成功したのでしょうか?これは、サービス アカウントを作成したときに、Cloud Run 起動元の権限がプロジェクトのこのアカウントに付与されたためです。継承により、2 つの Cloud Run サービスなどのプロジェクト内のリソースはこれらの権限を継承します。その結果、サービス アカウントを使用してサービスを呼び出すことができます。
最小権限を完全に実装するには、サービス アカウントに必要なサービスに対する権限のみを付与する必要があります。
このサブタスクでは、プロジェクトのサービス アカウントに以前に付与した権限を削除し、元の課金サービスを呼び出すために必要な適切な権限を追加します。
1 つ目の Cloud Shell ターミナル ウィンドウに切り替えます。
この Cloud Shell ターミナルで、サービス アカウントの ID メールを取得し、環境変数に保存します。
プロジェクトのサービス アカウントの権限を削除します。
課金サービスのサービス アカウントに権限を追加します。
2 つ目の Cloud Shell ターミナル ウィンドウまたはタブに戻ります。
数秒待ってから、サービス アカウントから生成された ID トークンを使用して、最初の Cloud Run 課金サービスを呼び出します。
3 つ目の Cloud Shell ターミナル ウィンドウに切り替えます。
同じサービス アカウントから生成された ID トークンを使用して、2 つ目の Cloud Run サービスを呼び出してみます。
[進行状況を確認] をクリックして、実行したタスクを確認します。
このラボでは、デプロイされたサービスを再構成してアクセスを保護する方法を確認し、Google Cloud のリソースにアクセスする権限を付与する際に最小権限の原則を実装しました。あなた:
プロジェクト内でこれらのプロダクトを使用する方法について詳しくは、Serverless Expeditions の動画シリーズをご覧ください。
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください