概要
Cloud Storage は Google Cloud の基盤となるリソースで、各種の高度な機能を備えています。このラボでは、クラウド環境の設計に便利な Cloud Storage のさまざまな機能を実際に使用します。Cloud Storage の操作には、Cloud Console と gsutil ツールの両方を使用します。
目標
このラボでは、次のタスクの実行方法について学びます。
Qwiklabs の設定
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
Qwiklabs にシークレット ウィンドウ でログインします。
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
準備ができたら、[ラボを開始 ] をクリックします。
ラボの認証情報(ユーザー名 とパスワード )をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
[Google Console を開く ] をクリックします。
[別のアカウントを使用 ] をクリックし、この ラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求 が発生したりします。
利用規約に同意し、再設定用のリソースページをスキップします。
タスク 1: 準備
Cloud Storage バケットを作成する
ナビゲーション メニュー ( )で、[Cloud Storage ] > [ブラウザ ] をクリックします。
バケットにはグローバルに一意の名前が必要です。一意の名前にするには、PROJECT_ID_1 の一部を使用する方法があります。たとえば、PROJECT_ID_1 が「myproj-154920」の場合、バケット名を「storecore154920」とします。
[バケットを作成 ] をクリックします。
次のように指定し、残りの設定はデフォルトのままにします。
プロパティ
値(値を入力するか、指定されたオプションを選択)
名前
グローバルに一意の名前を入力
ロケーション タイプ
Multi-region
このバケットに対する公開アクセス防止を適用する
オフ
アクセス制御
きめ細かい管理 (バケットレベルの権限に加えて、オブジェクトレベルの権限 )
バケット名をメモしておきます。これはこのラボの中で後で [BUCKET_NAME_1] として参照して使用します。
[作成 ] をクリックします。
[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
Cloud Storage バケットを作成する
CURL を使用してサンプル ファイルをダウンロードし、コピーを 2 個作成する
Cloud Console で、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)
ファイルをバケットにコピーしてアクセス制御リストを構成する
次のコマンドを実行して、最初のファイルをバケットにコピーします。
gsutil 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 Console でファイルを調べる
Cloud Console のナビゲーション メニュー ( )で、[Cloud Storage ] > [ブラウザ ] の順にクリックします。
[BUCKET_NAME_1] をクリックします。
setup.html ファイルについて [公開アクセス ] の公開リンク が使用可能であることを確認します。
ローカル ファイルを削除して、Cloud Storage からコピーする
Cloud Shell に戻ります。必要に応じて、Cloud Shell をアクティブにする アイコン( )をクリックします。
次のコマンドを実行して、setup ファイルを削除します。
rm setup.html
ファイルが削除されていることを確認するには、次のコマンドを実行します。
ls
ファイルをバケットから再度コピーするには、次のコマンドを実行します。
gsutil cp gs://$BUCKET_NAME_1/setup.html setup.html
タスク 3: 顧客指定の暗号鍵(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 Console で確認する
残りの setup.html ファイルをアップロードするには、次のコマンドを実行します。
gsutil cp setup2.html gs://$BUCKET_NAME_1/
gsutil cp setup3.html gs://$BUCKET_NAME_1/
Cloud Console に戻ります。
[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 鍵のローテーション
現在の 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 鍵を生成して 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 を終了します。
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
タスク 5: ライフサイクル管理の有効化
バケットの現在のライフサイクル ポリシーを表示する
次のコマンドを実行して、現在のライフサイクル ポリシーを表示します。
gsutil lifecycle get gs://$BUCKET_NAME_1
JSON ライフサイクル ポリシー ファイルを作成する
「life.json」 という名前のファイルを作成するには、次のコマンドを実行します。
nano life.json
次の値を life.json ファイルに貼り付けます。
{
"rule":
[
{
"action": {"type": "Delete"},
"condition": {"age": 31}
}
]
}
Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。
ポリシーを設定して確認する
ポリシーを設定するには、次のコマンドを実行します。
gsutil lifecycle set life.json gs://$BUCKET_NAME_1
ポリシーを確認するには、次のコマンドを実行します。
gsutil lifecycle get gs://$BUCKET_NAME_1
[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
ライフサイクル管理を有効にする
タスク 6: バージョニングの有効化
バケットのバージョニング ステータスを表示してバージョニングを有効にする
次のコマンドを実行し、バケットの現在のバージョニング ステータスを表示します。
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 バージョニング オプションを指定します。
gsutil cp -v setup.html gs://$BUCKET_NAME_1
setup.html ファイルを開きます。
nano setup.html
setup.html から別の 5 行を削除して、ファイルのサイズを変更します。
Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。
ファイルをバケットにコピーします。このとき、-v バージョニング オプションを指定します。
gsutil cp -v setup.html gs://$BUCKET_NAME_1
ファイルのすべてのバージョンを一覧表示する
ファイルのすべてのバージョンを一覧表示するには、次のコマンドを実行します。
gsutil 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
ファイルの最も古い元のバージョンをダウンロードして、復元を確認する
ファイルの元のバージョンをダウンロードします。
gsutil cp $VERSION_NAME recovered.txt
復元を確認するには、次のコマンドを実行します。
ls -al setup.html
ls -al recovered.txt
タスク 7: ディレクトリとバケットとの同期
ネストされたディレクトリを作成しバケットと同期する
ネストされたディレクトリ構造を作成し、これをバケット内で繰り返しコピーするとどうなるか調べます。
次のコマンドを実行します。
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
結果を調べる
Cloud Console のナビゲーション メニュー ( )で、[Cloud Storage ] > [ブラウザ ] の順にクリックします。
[BUCKET_NAME_1] をクリックします。バケット内にサブフォルダがあります。
[/firstlevel ] をクリックしてから、[/secondlevel ] をクリックします。
Cloud Console での表示内容と次のコマンドの結果を比較します。
gsutil ls -r gs://$BUCKET_NAME_1/firstlevel
Cloud Shell を終了します。
exit
タスク 8: プロジェクト間での共有
2 番目のプロジェクトに切り替える
新しいシークレット タブを開きます。
console.cloud.google.com に移動します。
タイトルバーのプロジェクト選択プルダウンをクリックします。
[すべて ] をクリックしてから、Qwiklabs の [接続の詳細] ダイアログで 2 番目のプロジェクトをクリックします。プロジェクト ID はすべての Google Cloud プロジェクトにおいて一意の名前です。2 番目のプロジェクト ID は [PROJECT_ID_2] として参照します。
バケットを準備する
Cloud Console のナビゲーション メニュー ( )で、[Cloud Storage ] > [ブラウザ ] の順にクリックします。
[バケットを作成 ] をクリックします。
次のように指定し、残りの設定はデフォルトのままにします。
プロパティ
値(値を入力するか、指定されたオプションを選択)
名前
グローバルに一意の名前を入力
ロケーション タイプ
Multi-region
アクセス制御
きめ細かい管理 (バケットレベルの権限に加えて、オブジェクトレベルの権限 )
バケット名をメモしてください。これは次のステップで [BUCKET_NAME_2] として参照します。
[作成 ] をクリックします。
テキスト ファイルをバケットにアップロードする
ファイルを [BUCKET_NAME_2] にアップロードします。サイズが小さなサンプル ファイルやテキスト ファイルで十分です。
ファイル名をメモしておきます。これは後で [FILE_NAME] として参照して使用します。
IAM サービス アカウントを作成する
Cloud Console のナビゲーション メニュー ( )で、[IAM と管理 ] > [サービス アカウント ] をクリックします。
[サービス アカウントを作成 ] をクリックします。
[サービス アカウントの詳細] ページで、[サービス アカウント名 ] に「cross-project-storage 」と入力します。
[作成して続行 ] をクリックします。
サービス アカウントの許可のページで、ロールとして [Cloud Storage] > [Storage オブジェクト閲覧者] を選択します。
[続行 ]、[完了 ] の順にクリックします。
JSON 鍵を追加するには [cross-project-storage ] サービス アカウントをクリックします。
[鍵 ] タブで [鍵を追加 ] プルダウンをクリックし、[新しい鍵を作成 ] を選択します。
鍵のタイプとして [JSON ] を選択し、[作成 ] をクリックします。JSON 鍵ファイルがダウンロードされます。後で、この鍵ファイルを見つけて VM にアップロードする必要があります。
[閉じる ] をクリックします。
ハードドライブで JSON 鍵ファイルの名前を credentials.json に変更します。
上部のペインで、[PROJECT_ID_1] に切り替えます。
[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
2 番目のプロジェクトのリソースを作成する
VM を作成する
ナビゲーション メニュー ( )で、[Compute Engine ] > [VM インスタンス ] をクリックします。
[インスタンスを作成 ] をクリックします。
次のように指定し、残りの設定はデフォルトのままにします。
プロパティ
値(値を入力するか、指定されたオプションを選択)
名前
crossproject
リージョン
europe-west1
ゾーン
europe-west1-d
シリーズ
N1
マシンタイプ
n1-standard-1
ブートディスク
Debian GNU/Linux 11 (bullseye)
[作成 ] をクリックします。
VM に SSH で接続する
crossproject で [SSH ] をクリックし、ターミナルを起動して接続します。
「Cloud Identity-Aware Proxy を介した接続に失敗しました 」という内容のメッセージが表示された場合は、[Identity-Aware Proxy を使わずに接続 ] をクリックします。
[BUCKET_NAME_2] を環境変数に格納します。
export BUCKET_NAME_2=<バケット名 2 をここに入力>
echo で確認します。
echo $BUCKET_NAME_2
[FILE_NAME] を環境変数に格納します。
export FILE_NAME=<ファイル名をここに入力>
echo で確認します。
echo $FILE_NAME
[PROJECT_ID_2] のファイルを一覧表示します。
gsutil ls gs://$BUCKET_NAME_2/
結果(コピーしないでください。これは出力例です) :
AccessDeniedException: 403 404513585876-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket.
VM を承認する
SSH VM ターミナルから credentials.json をアップロードするには、右上の隅にある歯車アイコン( )をクリックして、[ファイルをアップロード ] をクリックします。
credentials.json を選択してアップロードします。
[ファイル転送] ウィンドウで [閉じる ] をクリックします。
JSON ファイルが VM にアップロードされていることを確認します。
ls
結果(コピーしないでください。これは出力例です) :
credentials.json
ターミナルで次のコマンドを入力して、VM が Google Cloud API を使用することを承認します。
gcloud auth activate-service-account --key-file credentials.json
アクセス権を確認する
もう一度次のコマンドを実行します。
gsutil ls gs://$BUCKET_NAME_2/
もう一度次のコマンドを実行します。
gsutil cat gs://$BUCKET_NAME_2/$FILE_NAME
認証情報ファイルをバケットにコピーしてみます。
gsutil cp credentials.json gs://$BUCKET_NAME_2/
結果(コピーしないでください。これは出力例です) :
Copying file://credentials.json [Content-Type=application/json]...
AccessDeniedException: 403 cross-project-storage@qwiklabs-gcp-02-c638e3daa975.iam.gserviceaccount.com does not have storage.objects.create access to the Google Cloud Storage object.
ロールを変更する
上部のペインで、[PROJECT_ID_2] に切り替えます。
Cloud Console のナビゲーション メニュー ( )で、[IAM と管理 ] > [IAM ] の順にクリックします。
cross-project-storage サービス アカウントの鉛筆アイコンをクリックします(右側にスクロールしないとこのアイコンが表示されない場合があります)。
[Storage オブジェクト閲覧者 ] のロールをクリックしてから、[Cloud Storage ] > [Storage オブジェクト管理者 ] をクリックします。
[保存 ] をクリックします。[保存 ] をクリックしないと、変更は適用されません。
[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
最初のプロジェクトのリソースを作成して確認する
変更されたアクセス権を確認する
crossproject の SSH ターミナルに戻ります。
認証情報ファイルをバケットにコピーします。
gsutil cp credentials.json gs://$BUCKET_NAME_2/
結果(コピーしないでください。これは出力例です) :
Copying file://credentials.json [Content-Type=application/json]...
- [1 files][ 2.3 KiB/ 2.3 KiB]
Operation completed over 1 objects/2.3 KiB.
この例では、PROJECT_ID_1 の VM が、別のプロジェクトで作成されたバケットで Cloud Storage にファイルをアップロードできるようになりました。
バケットが作成されたプロジェクトは、このアクティビティの課金プロジェクトです。そのため、VM が大量のファイルをアップロードした場合、PROJECT_ID_1 ではなく PROJECT_ID_2 に請求されることになります。
タスク 9: まとめ
このラボでは、バケットとオブジェクトの作成と操作の方法を学習しました。また、Cloud Storage の次の機能についても学習しました。
CSEK(顧客指定の暗号鍵)
独自の暗号鍵の使用
鍵のローテーション
ACL(アクセス制御リスト)
ACL の限定公開設定と公開への切り替え
ライフサイクル管理
オブジェクトを 31 日経過後に削除するポリシーの設定
バージョニング
バージョンの作成と以前のバージョンの復元
ディレクトリ同期
VM ディレクトリとバケットの繰り返し同期
IAM を使用したプロジェクト間でのリソース共有
IAM を使用したプロジェクト間でのリソース アクセスの実現
ラボを終了する
ラボが完了したら、[ラボを終了 ] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信 ] をクリックします。
星の数は、それぞれ次の評価を表します。
星 1 つ = 非常に不満
星 2 つ = 不満
星 3 つ = どちらともいえない
星 4 つ = 満足
星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート ] タブをご利用ください。
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。