GSP079

概要
このラボでは、Google Cloud Security API と Privacy API の次のような高度な機能の使い方について学びます。
- 安全な Cloud Storage バケットの設定
- 鍵管理サービスを使用した鍵と暗号化データの管理
- Cloud Storage 監査ログの表示
Enron Corpus の要約データを使用して暗号化し、Cloud Storage に読み込みます。
学習内容
- データを暗号化する方法と、Cloud Key Management Service(KMS)を使用した暗号鍵の管理方法
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、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 をアクティブにする」アイコン
をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
Your Cloud Platform project in this session is set to YOUR_PROJECT_ID
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = <project_ID>
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注: Google Cloud における gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. Cloud Storage バケットを作成する
このラボのデータを保存するために、独自の Cloud Storage バケットを作成する必要があります。
-
-enron_corpus など、Cloud Storage バケットの名前を指定します。バケットの命名について詳しくは、Cloud Storage バケットの命名ガイドラインをご覧ください。Cloud Shell で次のコマンドを実行して、バケット名に変数を設定します。
BUCKET_NAME="{{{ project_0.project_id }}}-enron_corpus"
- 次のコマンドを実行してバケットを作成します。
gsutil mb gs://${BUCKET_NAME}
このコマンドを実行することで、gsutil
コマンドライン クライアントが正しく設定されていること、認証が機能していること、操作しているクラウド プロジェクトへの書き込みアクセス権があることも確認できます。
- バケットが作成されたら、次のステップに進んで Enron Corpus をダウンロードします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットを作成する
タスク 2. データを確認する
Enron Corpus は大規模なデータベースで、Enron Corporation の従業員 158 人によって作成された 60 万通を超えるメールが管理されています。このデータは Cloud Storage バケット gs://enron_emails/
にコピーされています。
- 次のコマンドを実行してソースファイルの 1 つをローカルにダウンロードすると、その内容を確認できます。
gsutil cp gs://enron_emails/allen-p/inbox/1. .
- ダウンロードしたファイルの末尾を
tail
で表示して、メールのテキストが格納されていることを確認します。
tail 1.
次の出力が表示されます。
Attached is the Delta position for 1/18, 1/31, 6/20, 7/16, 9/24
<< File: west_delta_pos.xls >>
Let me know if you have any questions.
平文メールファイルの内容が表示されます。平文メールファイルと画像ファイルの 2 種類のファイルを探します。ご興味があれば、同様のメカニズムを使用して他のファイルの内容も確認してみてください。
タスク 3. Cloud KMS を有効にする
Cloud KMS は、Google Cloud の暗号鍵管理サービスです。KMS を使用するには、前もってプロジェクトで有効にしておく必要があります。プロビジョニング済みのこのラボでは、すでに KMS が有効になっていますが、これは gcloud
CLI コマンドの 1 つを使用して確認できます。
- Cloud Shell セッションで次のコマンドを実行します。
gcloud services enable cloudkms.googleapis.com
注: Cloud コンソールの UI を使用して KMS やその他のサービスをプロジェクトで有効にすることもできます。
出力は特にありません。これで、Cloud KMS がプロジェクトで有効になりました。
タスク 4. KeyRing と CryptoKey を作成する
データを暗号化するには、KeyRing と CryptoKey を作成する必要があります。KeyRing は鍵をグループ化する際に役立ちます。鍵は環境別(テスト、ステージング、本番など)、またはその他の概念グループ別にグループ化できます。このラボでの KeyRing の名前は test
、CryptoKey の名前は qwiklab
です。
- Cloud Shell で次のコマンドを実行して、環境変数を設定します。
KEYRING_NAME=test CRYPTOKEY_NAME=qwiklab
-
gcloud
コマンドを実行して KeyRing を作成します。このラボではグローバル ロケーションを使用しますが、特定のリージョンに設定することもできます。
gcloud kms keyrings create $KEYRING_NAME --location global
- 次に、新しい KeyRing を使用して
qwiklab
という名前の CryptoKey を作成します。
gcloud kms keys create $CRYPTOKEY_NAME --location global \
--keyring $KEYRING_NAME \
--purpose encryption
注: Cloud KMS では CryptoKey も KeyRing も削除できません。
出力は特にありません。これで、KeyRing と CryptoKey が作成されました。
- コンソールで、ナビゲーション メニュー > [セキュリティ] > [Key Management] に移動して、Key Management を開きます。
鍵管理ウェブ UI では、CryptoKey と KeyRing を表示および管理できます。後で権限を管理するときにこの UI を使用します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
KeyRing と CryptoKey を作成する
タスク 5. データを暗号化する
次に、データを暗号化してみましょう。
- 上記で表示したメールの内容を、次のコマンドを実行して
base64
エンコードします。
PLAINTEXT=$(cat 1. | base64 -w0)
注: base64 エンコードを行うと、バイナリデータを平文として API に渡すことができます。このコマンドの対象は、画像、動画、または他の任意の種類のバイナリデータです。
暗号化エンドポイントを使用すると、暗号化対象の base64 エンコードされたテキストを、指定した鍵に渡すことができます。
- 以下のコマンドを実行します。
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \
-d "{\"plaintext\":\"$PLAINTEXT\"}" \
-H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\
-H "Content-Type: application/json"
注: 同じテキストと鍵を使用しても、encrypt
アクションのたびに異なる結果が返されます。
レスポンスは、属性 ciphertext
の暗号化されたテキストが含まれた JSON ペイロードになります。
- これで、データが暗号化されたので、データをファイルに保存し、Cloud Storage バケットにアップロードできます。JSON レスポンスから暗号化テキストを取得してファイルに保存するには、コマンドライン ユーティリティ jq を使用します。前述の呼び出しのレスポンスを jq にパイプで渡すと、それを解析して
ciphertext
プロパティを取り出し、ファイル 1.encrypted
に保存できます。以下のコマンドを実行します。
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \
-d "{\"plaintext\":\"$PLAINTEXT\"}" \
-H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\
-H "Content-Type:application/json" \
| jq .ciphertext -r > 1.encrypted
- 暗号化データが復号可能かどうかは、
decrypt
エンドポイントを呼び出して、復号されたテキストが元のメールと一致するかどうかで確認できます。暗号化データには、その暗号化に使用された CryptoKey バージョンに関する情報が含まれているため、復号エンドポイントに特定のバージョンが渡されることはありません。以下のコマンドを実行します。
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:decrypt" \
-d "{\"ciphertext\":\"$(cat 1.encrypted)\"}" \
-H "Authorization:Bearer $(gcloud auth application-default print-access-token)"\
-H "Content-Type:application/json" \
| jq .plaintext -r | base64 -d
注: 通常、復号はアプリケーション レイヤで行われます。複数のプログラミング言語でのデータの暗号化と復号のチュートリアルについては、Cloud KMS のクイックスタートをご確認ください。
- これで、テキストが正常に暗号化されたことを確認できたので、暗号化されたファイルを Cloud Storage バケットにアップロードします。
gsutil cp 1.encrypted gs://${BUCKET_NAME}
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud KMS 鍵でデータを暗号化して、ストレージ バケットにアップロードする
タスク 6. IAM 権限を構成する
KMS には注目すべき主要な権限が 2 つあります。一方の権限ではユーザーまたはサービス アカウントで KMS リソースを管理でき、もう一方ではユーザーまたはサービス アカウントで鍵を使用してデータの暗号化と復号が可能です。
鍵を管理する権限は cloudkms.admin
で、この権限を持つすべてのユーザーが KeyRing を作成し、CryptoKey を作成、変更、無効化、破壊できます。暗号化および復号する権限は cloudkms.cryptoKeyEncrypterDecrypter
で、暗号化および復号 API エンドポイントを呼び出すために使用されます。
この演習では、現在の承認済みユーザーを使用して IAM 権限を割り当てます。
- 現在の承認済みユーザーを取得するには、次のコマンドを実行します。
USER_EMAIL=$(gcloud auth list --limit=1 2>/dev/null | grep '@' | awk '{print $2}')
- 次に、そのユーザーに KMS リソースの管理権限を割り当てます。次の
gcloud
コマンドを実行し、作成した KeyRing を管理する IAM 権限を割り当ててください。
gcloud kms keyrings add-iam-policy-binding $KEYRING_NAME \
--location global \
--member user:$USER_EMAIL \
--role roles/cloudkms.admin
CryptoKey は KeyRing に属し、KeyRing はプロジェクトに属するため、その階層の上位レベルで特定のロールまたは権限を持つユーザーは、子リソースに対して同じ権限を継承します。たとえば、あるプロジェクトに対してオーナーロールを持つユーザーは、そのプロジェクトのすべての KeyRing および CryptoKey に対してもオーナーになります。同様に、あるユーザーに KeyRing の cloudkms.admin
ロールが付与されている場合は、その KeyRing の CryptoKey に関連する権限も付与されます。
cloudkms.cryptoKeyEncrypterDecrypter
権限を持たない承認済みユーザーは、データを暗号化または復号するための鍵を使用できません。
- 次の
gcloud
コマンドを実行して、作成した KeyRing に属するすべての CryptoKey でデータを暗号化および復号する IAM 権限を割り当ててください。
gcloud kms keyrings add-iam-policy-binding $KEYRING_NAME \
--location global \
--member user:$USER_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter
これで、割り当てられた権限が Key Management の [暗号鍵] に表示されます。
- KeyRing の名前(
test
)のボックスにチェックを入れ、右側の情報パネルで [プリンシパル] をクリックします。
メニューが表示され、今追加した KeyRing のアカウントと権限を確認できます。
タスク 7. コマンドラインでデータのバックアップを作成する
単一のファイルを暗号化する方法を理解し、そのための権限が付与されると、ディレクトリ内のすべてのファイルのバックアップを作成するスクリプトを実行できるようになります。この例では、allen-p のすべてのメールをコピーして暗号化し、Cloud Storage バケットにアップロードします。
- 最初に、allen-p のすべてのメールを現在の作業ディレクトリにコピーします。
gsutil -m cp -r gs://enron_emails/allen-p .
- 今度は、以下をコピーして Cloud Shell に貼り付け、allen-p ディレクトリ内のすべてのファイルのバックアップを Cloud Storage バケットに作成して暗号化します。
MYDIR=allen-p
FILES=$(find $MYDIR -type f -not -name "*.encrypted")
for file in $FILES; do
PLAINTEXT=$(cat $file | base64 -w0)
curl -v "https://cloudkms.googleapis.com/v1/projects/$DEVSHELL_PROJECT_ID/locations/global/keyRings/$KEYRING_NAME/cryptoKeys/$CRYPTOKEY_NAME:encrypt" \
-d "{\"plaintext\":\"$PLAINTEXT\"}" \
-H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type:application/json" \
| jq .ciphertext -r > $file.encrypted
done
gsutil -m cp allen-p/inbox/*.encrypted gs://${BUCKET_NAME}/allen-p/inbox
このスクリプトは指定されたディレクトリ内のすべてのファイルに対してループ実行され、KMS API を使用してファイルを暗号化し、それを Cloud Storage にアップロードします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
KMS API を使用して複数のファイルを暗号化し、Cloud Storage にアップロードする
スクリプトの完了後、コンソールの左側のメニューで [Storage] をクリックすると、暗号化されたファイルが表示されます。
- ファイルを探すには、ナビゲーション メニューで [Cloud Storage] > [バケット] > [使用中のバケット] > [allen-p] > [受信トレイ] に移動します。次のように表示されます。

注: Cloud Storage では、サーバー側の暗号化がサポートされています。サーバー側の暗号化では、データに対する鍵のローテーションがサポートされているため、Cloud Storage でデータを暗号化する方法としておすすめです。上記の例はデモを目的とするものです。
タスク 8. Cloud 監査ログを表示する
Google Cloud Audit Logging は、管理アクティビティとデータアクセスという 2 つのログストリームで構成されています。これらは Google Cloud サービスによって生成され、Google Cloud プロジェクト内で、誰が、何を、どこで、いつ行ったかを調べるのに役立ちます。
- KMS 内のリソースに対するアクティビティを表示するには、ナビゲーション メニューで [Cloud の概要] > [アクティビティ] タブに移動します。クラウド アクティビティの UI で、[View Log Explorer] をクリックし、[Cloud KMS KeyRing] を
Resource Type
として選択します。KeyRing の作成とすべての変更が表示されます。
これで、KMS と Cloud Storage を使用して、データを暗号化し、アップロードしました。
学習した内容
- IAM を使用した KMS 権限の管理。
- KMS を使用したデータの暗号化。
- Cloud Storage を使用した暗号化されたデータの保存。
- Cloud Audit Logging を使用した、CryptoKey および KeyRing に対するすべてのアクティビティの表示。
タスク 9. 理解度テスト
次の理解度チェックに挑戦して Cloud KMS に関する知識をチェックしましょう。
お疲れさまでした
データを暗号化する方法と、Cloud Key Management Service(KMS)を使用した暗号鍵の管理方法について学びました。
次のステップと詳細情報
マニュアルの最終更新日: 2024 年 4 月 15 日
ラボの最終テスト日: 2023 年 8 月 31 日
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。