概要
Cloud Storage は Google Cloud の基盤となるリソースで、各種の高度な機能を備えています。このラボでは、クラウド環境の設計に便利な Cloud Storage のさまざまな機能を実際に使用します。Cloud Storage は、Google Cloud コンソール、コマンドライン ツール gsutil、またはさまざまなプログラミング言語用の Cloud Storage クライアント ライブラリから操作できます。
目標
このラボでは、次のタスクの実行方法について学びます。
- バケットを作成して使用する
- アクセス制御リストを設定してアクセスを制限する
- 独自の暗号鍵を使用する
- バージョン管理を実装する
- ディレクトリ同期を使用する
設定と要件
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。
左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] パネルでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] パネルでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
タスク 1. 準備
このタスクでは、Cloud Storage バケットを作成します。その後に、次のタスクで使用するサンプル ファイルをダウンロードします。
Cloud Storage バケットを作成する
- Google Cloud コンソールのナビゲーション メニュー()で、[Cloud Storage] > [バケット] をクリックします。
注: バケットにはグローバルに一意の名前が必要です。一意の名前にするには、PROJECT_ID_1
の一部を使用する方法があります。たとえば、PROJECT_ID_1
が「myproj-154920
」の場合、バケット名を「storecore154920
」のようにします。
- [作成] をクリックします。
- 次のように指定し、残りの設定はデフォルトのままにします。
プロパティ |
値(値を入力するか、指定されたオプションを選択) |
名前 |
グローバルに一意の名前を入力 |
ロケーション タイプ |
リージョン |
リージョン |
|
このバケットに対する公開アクセス禁止を適用する |
オフ |
アクセス制御 |
きめ細かい管理(バケットレベルの権限に加えて、オブジェクトレベルの権限) |
- バケット名をメモしておきます。これはこのラボの中で後で [BUCKET_NAME_1] として参照して使用します。
- [作成] をクリックします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットを作成する
CURL を使用してサンプル ファイルをダウンロードし、コピーを 2 個作成する
- Google Cloud コンソールで、Cloud Shell をアクティブにするアイコン()をクリックします。
- プロンプトが表示されたら、[続行] をクリックします。
- [BUCKET_NAME_1] を環境変数に格納します。
export BUCKET_NAME_1=<バケット名 1 をここに入力>
- echo で確認します。
echo $BUCKET_NAME_1
- 次のコマンドを実行して、サンプル ファイルをダウンロードします(このサンプル ファイルは一般公開されている Hadoop 資料の HTML ファイルです)。
curl \
https://hadoop.apache.org/docs/current/\
hadoop-project-dist/hadoop-common/\
ClusterSetup.html > setup.html
- ファイルのコピーを作成するには、次のコマンドを実行します。
cp setup.html setup2.html
cp setup.html setup3.html
タスク 2. アクセス制御リスト(ACL)
このタスクでは、Cloud Storage バケットにコピーするファイルへのアクセスを制限するためのアクセス制御リストを設定します。
ファイルをバケットにコピーしてアクセス制御リストを構成する
- 次のコマンドを実行して、最初のファイルをバケットにコピーします。
gcloud storage cp setup.html gs://$BUCKET_NAME_1/
- setup.html に割り当てられているデフォルトのアクセスリストを取得するには、次のコマンドを実行します。
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl.txt
cat acl.txt
- アクセスリストを限定公開に設定して結果を確認するには、次のコマンドを実行します。
gsutil acl set private gs://$BUCKET_NAME_1/setup.html
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl2.txt
cat acl2.txt
- アクセスリストを更新してファイルを公開するには、次のコマンドを実行します。
gsutil acl ch -u AllUsers:R gs://$BUCKET_NAME_1/setup.html
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl3.txt
cat acl3.txt
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ファイルを公開する
Cloud コンソールでファイルを調べる
- Google Cloud コンソールのナビゲーション メニュー()で、[Cloud Storage] > [バケット] をクリックします。
- [BUCKET_NAME_1] をクリックします。
- setup.html ファイルについて [公開アクセス] の公開リンクが使用可能であることを確認します。
ローカル ファイルを削除して、Cloud Storage からコピーする
-
Cloud Shell に戻ります。必要に応じて、Cloud Shell をアクティブにするアイコン()をクリックします。
- 次のコマンドを実行して、setup ファイルを削除します。
rm setup.html
- ファイルが削除されていることを確認するには、次のコマンドを実行します。
ls
- ファイルをバケットから再度コピーするには、次のコマンドを実行します。
gcloud storage cp gs://$BUCKET_NAME_1/setup.html setup.html
タスク 3. 顧客指定の暗号鍵(CSEK)
このタスクでは、Cloud Storage バケットに保存されているファイルを暗号化するための CSEK 鍵を生成します。
CSEK 鍵を生成する
次のステップでは、AES-256 base-64 鍵が必要です。
- 次のコマンドを実行して鍵を作成します。
python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
結果(出力の例):
b'tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=\n'
- 生成された鍵の
b'
と \n'
以外の値をコマンド出力からコピーします。鍵は「tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=
」のような形式です。
boto ファイルを変更する
暗号化コントロールは、.boto
という名前の gsutil 構成ファイルにあります。
- boto ファイルを表示して開くには、次のコマンドを実行します。
ls -al
nano .boto
注: .boto
ファイルが空の場合、Ctrl+X キーを使用して nano エディタを閉じ、gsutil config -n
コマンドを使用して、新しい .boto
ファイルを生成します。その後、上記のコマンドでもう一度ファイルを開いてみます。
.boto
ファイルがまだ空の場合、gsutil version -l
コマンドを使用してこのファイルを検索することが必要になる場合があります。
- 「
#encryption_key=
」という行を検索します。
注: nano エディタの下部には、ファイルを効率よく操作するためのショートカットがあります。Where Is ショートカットを使用すると、「#encryption_key=」のある行を素早く見つけることができます。
- この行の「#」を削除してコメント化解除し、先ほど生成した鍵を末尾に貼り付けます。
例(これは一例です):
編集前:
# encryption_key=
編集後:
encryption_key=tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=
-
Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。
残りの設定ファイル(暗号化済み)をアップロードして Cloud コンソールで確認する
- 残りの setup.html ファイルをアップロードするには、次のコマンドを実行します。
gsutil cp setup2.html gs://$BUCKET_NAME_1/
gsutil cp setup3.html gs://$BUCKET_NAME_1/
- Cloud コンソールに戻ります。
- [BUCKET_NAME_1] をクリックします。setup2.html と setup3.html の両方のファイルが顧客によって暗号化されていることが示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
顧客指定の暗号鍵(CSEK)
ローカル ファイルを削除し、新しいファイルをコピーして暗号化を確認する
- ローカル ファイルを削除するには、Cloud Shell で次のコマンドを実行します。
rm setup*
- ファイルをバケットからもう一度コピーするには、次のコマンドを実行します。
gsutil cp gs://$BUCKET_NAME_1/setup* ./
- 暗号化されたファイルに cat を実行して、元の場所に配置されているか確認するには、次のコマンドを実行します。
cat setup.html
cat setup2.html
cat setup3.html
タスク 4. CSEK 鍵のローテーション
このタスクでは、Cloud Storage でのデータ暗号化に使用される CSEK をローテーションして、データ セキュリティを継続的に確保します。
現在の CSEK 暗号鍵を移動して鍵を復号する
- 次のコマンドを実行して
.boto
ファイルを開きます。
nano .boto
- 現在の encryption_key 行の先頭に「#」を追加してコメントアウトします。
注: nano エディタの下部には、ファイルを効率よく操作するためのショートカットがあります。Where Is ショートカットを使用すると、「encryption_key=」のある行を素早く見つけることができます。
- decryption_key1 行の「#」を削除してコメント化解除し、現在の鍵を encryption_key 行から decryption_key1 行にコピーします。
結果(出力の例):
編集前:
encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
# decryption_key1=
編集後:
# encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
-
Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。
注: 実際には、古い CSEK 鍵を encryption_key 行から削除します。
別の CSEK 鍵を生成して boto ファイルに追加する
- 次のコマンドを実行して新しい鍵を生成します。
python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
- 生成された鍵の
b'
と \n'
以外の値をコマンド出力からコピーします。鍵は「tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=
」のような形式です。
- boto ファイルを開くには、次のコマンドを実行します。
nano .boto
- 暗号化の行をコメント化解除し、「
encryption_key=
」に新しい鍵の値を貼り付けます。
結果(出力の例):
編集前:
# encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
編集後:
encryption_key=HbFK4I8CaStcvKKIx6aNpdTse0kTsfZNUjFpM+YUEjY=
-
Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。
ファイル 1 の鍵を書き換え、以前の復号鍵をコメントアウトする
暗号化されたファイルを書き換える場合、ファイルは以前に設定した decryption_key1 で復号され、新しい encryption_key で暗号化されます。
ここでは setup2.html の鍵を書き換え、setup3.html については書き換えません。これにより、鍵を適切にローテーションさせないとどうなるかがわかります。
- 次のコマンドを実行します。
gsutil rewrite -k gs://$BUCKET_NAME_1/setup2.html
- boto ファイルを開くには、次のコマンドを実行します。
nano .boto
- 現在の decryption_key1 行に再度「#」を追加し、コメントアウトします。
結果(出力の例):
編集前:
decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
編集後:
# decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
-
Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。
注: 実際には、古い CSEK 鍵を decryption_key1 行から削除します。
setup2 と setup3 をダウンロードする
- setup2.html をダウンロードするには、次のコマンドを実行します。
gsutil cp gs://$BUCKET_NAME_1/setup2.html recover2.html
- setup3.html をダウンロードするには、次のコマンドを実行します。
gsutil cp gs://$BUCKET_NAME_1/setup3.html recover3.html
注: どういうことかと言えば、setup3.html は新しい鍵で書き換えられていないため、復号できず、コピーは失敗します。 CSEK 鍵が正常にローテーションされました。
タスク 5. ライフサイクル管理を有効にする
このタスクでは、Cloud Storage バケットのライフサイクル管理を有効にして、指定した期間が経過したオブジェクトの削除を自動化します。
バケットの現在のライフサイクル ポリシーを表示する
- 次のコマンドを実行して、現在のライフサイクル ポリシーを表示します。
gsutil lifecycle get gs://$BUCKET_NAME_1
注: ライフサイクル構成はありません。次のステップで作成します。
JSON ライフサイクル ポリシー ファイルを作成する
- 「life.json」という名前のファイルを作成するには、次のコマンドを実行します。
nano life.json
- 次の値を life.json ファイルに貼り付けます。
{
"rule":
[
{
"action": {"type": "Delete"},
"condition": {"age": 31}
}
]
}
注: この指示により、Cloud Storage は 31 日が経過したオブジェクトを削除します。
-
Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。
ポリシーを設定して確認する
- ポリシーを設定するには、次のコマンドを実行します。
gsutil lifecycle set life.json gs://$BUCKET_NAME_1
- ポリシーを確認するには、次のコマンドを実行します。
gsutil lifecycle get gs://$BUCKET_NAME_1
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ライフサイクル管理を有効にする
タスク 6. バージョニングの有効化
このタスクでは、Cloud Storage バケットのバージョニングを有効にして、データが誤って削除または変更されないようにします。
バケットのバージョニング ステータスを表示してバージョニングを有効にする
- 次のコマンドを実行し、バケットの現在のバージョニング ステータスを表示します。
gsutil versioning get gs://$BUCKET_NAME_1
注: 停止中になっているポリシーは、有効になっていません。
- バージョニングを有効にするには、次のコマンドを実行します。
gsutil versioning set on gs://$BUCKET_NAME_1
- バージョニングが有効になっていることを確認するには、次のコマンドを実行します。
gsutil versioning get gs://$BUCKET_NAME_1
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
バージョニングの有効化
バケット内にあるサンプル ファイルのバージョンを複数作成する
- サンプル ファイルのサイズを確認します。
ls -al setup.html
- setup.html ファイルを開きます。
nano setup.html
- setup.html から任意の 5 行を削除して、ファイルのサイズを変更します。
-
Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。
- ファイルをバケットにコピーします。このとき、-v バージョニング オプションを指定します。
gcloud storage cp -v setup.html gs://$BUCKET_NAME_1
- setup.html ファイルを開きます。
nano setup.html
- setup.html から別の 5 行を削除して、ファイルのサイズを変更します。
-
Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。
- ファイルをバケットにコピーします。このとき、-v バージョニング オプションを指定します。
gcloud storage cp -v setup.html gs://$BUCKET_NAME_1
ファイルのすべてのバージョンを一覧表示する
- ファイルのすべてのバージョンを一覧表示するには、次のコマンドを実行します。
gcloud storage ls -a gs://$BUCKET_NAME_1/setup.html
- 最も古いファイル(リストの最初にあるもの)の名前をハイライト表示してコピーします。これは次のステップで [VERSION_NAME] として参照します。
注: gs:// で始まるファイルのフルパスをコピーしてください。
- バージョンの値を環境変数 [VERSION_NAME] に格納します。
export VERSION_NAME=<バージョン名をここに入力>
- echo で確認します。
echo $VERSION_NAME
結果(出力の例):
gs://BUCKET_NAME_1/setup.html#1584457872853517
ファイルの最も古い元のバージョンをダウンロードして、復元を確認する
- ファイルの元のバージョンをダウンロードします。
gcloud storage cp $VERSION_NAME recovered.txt
- 復元を確認するには、次のコマンドを実行します。
ls -al setup.html
ls -al recovered.txt
注: 元のファイルをバックアップ バージョンから復元しました。元のバージョンは現在のバージョンよりサイズが大きくなっています。これは、現在のバージョンで行が削除されているためです。
タスク 7. ディレクトリとバケットとの同期
このタスクでは、gsutil rsync コマンドを使用して、ローカル ディレクトリとそのサブディレクトリを Cloud Storage バケットに同期します。
ネストされたディレクトリを作成しバケットと同期する
ネストされたディレクトリ構造を作成し、これをバケット内で繰り返しコピーするとどうなるか調べます。
- 次のコマンドを実行します。
mkdir firstlevel
mkdir ./firstlevel/secondlevel
cp setup.html firstlevel
cp setup.html firstlevel/secondlevel
- VM の firstlevel ディレクトリをバケットと同期するには、次のコマンドを実行します。
gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel
結果を調べる
- Google Cloud コンソールのナビゲーション メニュー()で、[Cloud Storage] > [バケット] をクリックします。
- [BUCKET_NAME_1] をクリックします。バケット内にサブフォルダがあります。
- [/firstlevel] をクリックしてから、[/secondlevel] をクリックします。
- Cloud コンソールでの表示内容と次のコマンドの結果を比較します。
gcloud storage ls -r gs://$BUCKET_NAME_1/firstlevel
- Cloud Shell を終了します。
exit
タスク 8. 確認
このラボでは、バケットとオブジェクトの作成と操作の方法を学習しました。また、Cloud Storage の次の機能についても学習しました。
- CSEK(顧客指定の暗号鍵)
- 独自の暗号鍵の使用
- 鍵のローテーション
- ACL(アクセス制御リスト)
- ACL の限定公開設定と公開への切り替え
- ライフサイクル管理
- オブジェクトを 31 日経過後に削除するポリシーの設定
- バージョニング
- バージョンの作成と以前のバージョンの復元
- ディレクトリ同期
- VM ディレクトリとバケットの繰り返し同期
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。