arrow_back

Cloud Storage

ログイン 参加
知識をテストして、コミュニティで共有しましょう

Cloud Storage

ラボ 1時間 30分 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう

概要

Cloud Storage は Google Cloud の基盤となるリソースで、各種の高度な機能を備えています。このラボでは、クラウド環境の設計に便利な Cloud Storage のさまざまな機能を実際に使用します。Cloud Storage の操作には、Cloud Console と gsutil ツールの両方を使用します。

目標

このラボでは、次のタスクの実行方法について学びます。

  • バケットを作成して使用する

  • アクセス制御リストを設定してアクセスを制限する

  • 独自の暗号鍵を使用する

  • バージョン管理を実装する

  • ディレクトリ同期を使用する

  • IAM を使用してプロジェクト間でバケットを共有する

Qwiklabs の設定

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

タスク 1: 準備

Cloud Storage バケットを作成する

  1. ナビゲーション メニュー)で、[Cloud Storage] > [ブラウザ] をクリックします。
  1. [バケットを作成] をクリックします。
  2. 次のように指定し、残りの設定はデフォルトのままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択)
名前 グローバルに一意の名前を入力
ロケーション タイプ Multi-region
このバケットに対する公開アクセス防止を適用する オフ
アクセス制御 きめ細かい管理バケットレベルの権限に加えて、オブジェクトレベルの権限
  1. バケット名をメモしておきます。これはこのラボの中で後で [BUCKET_NAME_1] として参照して使用します。
  2. [作成] をクリックします。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Storage バケットを作成する

CURL を使用してサンプル ファイルをダウンロードし、コピーを 2 個作成する

  1. Cloud Console で、Cloud Shell をアクティブにするアイコン()をクリックします。

  2. プロンプトが表示されたら、[続行] をクリックします。

  3. [BUCKET_NAME_1] を環境変数に格納します。

export BUCKET_NAME_1=<バケット名 1 をここに入力>
  1. echo で確認します。

echo $BUCKET_NAME_1
  1. 次のコマンドを実行して、サンプル ファイルをダウンロードします(このサンプル ファイルは一般公開されている Hadoop 資料の HTML ファイルです)。

curl \ https://hadoop.apache.org/docs/current/\ hadoop-project-dist/hadoop-common/\ ClusterSetup.html > setup.html
  1. ファイルのコピーを作成するには、次のコマンドを実行します。

cp setup.html setup2.html cp setup.html setup3.html

タスク 2: アクセス制御リスト(ACL)

ファイルをバケットにコピーしてアクセス制御リストを構成する

  1. 次のコマンドを実行して、最初のファイルをバケットにコピーします。

gsutil cp setup.html gs://$BUCKET_NAME_1/
  1. setup.html に割り当てられているデフォルトのアクセスリストを取得するには、次のコマンドを実行します。

gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl.txt cat acl.txt
  1. アクセスリストを限定公開に設定して結果を確認するには、次のコマンドを実行します。

gsutil acl set private gs://$BUCKET_NAME_1/setup.html gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl2.txt cat acl2.txt
  1. アクセスリストを更新してファイルを公開するには、次のコマンドを実行します。

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 でファイルを調べる

  1. Cloud Console のナビゲーション メニュー)で、[Cloud Storage] > [ブラウザ] の順にクリックします。

  2. [BUCKET_NAME_1] をクリックします。

  3. setup.html ファイルについて [公開アクセス] の公開リンクが使用可能であることを確認します。

ローカル ファイルを削除して、Cloud Storage からコピーする

  1. Cloud Shell に戻ります。必要に応じて、Cloud Shell をアクティブにするアイコン()をクリックします。

  2. 次のコマンドを実行して、setup ファイルを削除します。

rm setup.html
  1. ファイルが削除されていることを確認するには、次のコマンドを実行します。

ls
  1. ファイルをバケットから再度コピーするには、次のコマンドを実行します。

gsutil cp gs://$BUCKET_NAME_1/setup.html setup.html

タスク 3: 顧客指定の暗号鍵(CSEK)

CSEK 鍵を生成する

次のステップでは、AES-256 base-64 鍵が必要です。

  1. 次のコマンドを実行して鍵を作成します。

python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'

結果(コピーしないでください。これは出力例です):

b'tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=\n'
  1. 生成された鍵の b'\n' 以外の値をコマンド出力からコピーします。鍵は「tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=」のような形式です。

boto ファイルを変更する

暗号化コントロールは、.boto という名前の gsutil 構成ファイルにあります。

  1. boto ファイルを表示して開くには、次のコマンドを実行します。

ls -al nano .boto
  1. #encryption_key=」という行を検索します。
nano エディタの下部には、ファイルを効率よく操作するためのショートカットがあります。Where Is ショートカットを使用すると、「#encryption_key=」行を迅速に見つけることができます。
  1. この行の「#」を削除してコメント化解除し、先ほど生成した鍵を末尾に貼り付けます。

(コピーしないでください。これは例です):

編集前: # encryption_key= 編集後: encryption_key=tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=
  1. Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。

残りの設定ファイル(暗号化済み)をアップロードして Cloud Console で確認する

  1. 残りの setup.html ファイルをアップロードするには、次のコマンドを実行します。

gsutil cp setup2.html gs://$BUCKET_NAME_1/ gsutil cp setup3.html gs://$BUCKET_NAME_1/
  1. Cloud Console に戻ります。
  2. [BUCKET_NAME_1] をクリックします。setup2.html と setup3.html の両方のファイルが顧客によって暗号化されていることが示されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 顧客指定の暗号鍵(CSEK)

ローカル ファイルを削除し、新しいファイルをコピーして暗号化を確認する

  1. ローカル ファイルを削除するには、Cloud Shell で次のコマンドを実行します。

rm setup*
  1. ファイルをバケットからもう一度コピーするには、次のコマンドを実行します。

gsutil cp gs://$BUCKET_NAME_1/setup* ./
  1. 暗号化されたファイルに cat を実行して、元の場所に配置されているか確認するには、次のコマンドを実行します。

cat setup.html cat setup2.html cat setup3.html

タスク 4: CSEK 鍵のローテーション

現在の CSEK 暗号鍵を移動して鍵を復号する

  1. 次のコマンドを実行して .boto ファイルを開きます。

nano .boto
  1. 現在の encryption_key 行の先頭に「#」を追加してコメントアウトします。
nano エディタの下部には、ファイルを効率よく操作するためのショートカットがあります。Where Is ショートカットを使用すると、「#encryption_key=」行を迅速に見つけることができます。
  1. decryption_key1 行の「#」を削除してコメント化解除し、現在の鍵を encryption_key 行から decryption_key1 行にコピーします。

結果(コピーしないでください。これは出力例です):

編集前: encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= # decryption_key1= 編集後: # encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
  1. Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。

別の CSEK 鍵を生成して boto ファイルに追加する

  1. 次のコマンドを実行して新しい鍵を生成します。

python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
  1. 生成された鍵の b'\n' 以外の値をコマンド出力からコピーします。鍵は「tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=」のような形式です。

  2. boto ファイルを開くには、次のコマンドを実行します。

nano .boto
  1. 暗号化の行をコメント化解除し、「encryption_key=」に新しい鍵の値を貼り付けます。

結果(コピーしないでください。これは出力例です):

編集前: # encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= 編集後: encryption_key=HbFK4I8CaStcvKKIx6aNpdTse0kTsfZNUjFpM+YUEjY=
  1. Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。

ファイル 1 の鍵を書き換え、以前の復号鍵をコメントアウトする

暗号化されたファイルを書き換える場合、ファイルは以前に設定した decryption_key1 で復号され、新しい encryption_key で暗号化されます。

ここでは setup2.html の鍵を書き換え、setup3.html については書き換えません。これにより、鍵を適切にローテーションさせないとどうなるかがわかります。

  1. 次のコマンドを実行します。

gsutil rewrite -k gs://$BUCKET_NAME_1/setup2.html
  1. boto ファイルを開くには、次のコマンドを実行します。

nano .boto
  1. 現在の decryption_key1 行に再度「#」を追加し、コメントアウトします。

結果(コピーしないでください。これは出力例です):

編集前: decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg= 編集後: # decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
  1. Ctrl+O キー、Enter キーを順に押して boto ファイルを保存します。次に、Ctrl+X キーを押して nano を終了します。

setup2 と setup3 をダウンロードする

  1. setup2.html をダウンロードするには、次のコマンドを実行します。

gsutil cp gs://$BUCKET_NAME_1/setup2.html recover2.html
  1. setup3.html をダウンロードするには、次のコマンドを実行します。

gsutil cp gs://$BUCKET_NAME_1/setup3.html recover3.html

タスク 5: ライフサイクル管理の有効化

バケットの現在のライフサイクル ポリシーを表示する

  1. 次のコマンドを実行して、現在のライフサイクル ポリシーを表示します。

gsutil lifecycle get gs://$BUCKET_NAME_1

JSON ライフサイクル ポリシー ファイルを作成する

  1. 「life.json」という名前のファイルを作成するには、次のコマンドを実行します。

nano life.json
  1. 次の値を life.json ファイルに貼り付けます。

{ "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 31} } ] }
  1. Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。

ポリシーを設定して確認する

  1. ポリシーを設定するには、次のコマンドを実行します。

gsutil lifecycle set life.json gs://$BUCKET_NAME_1
  1. ポリシーを確認するには、次のコマンドを実行します。

gsutil lifecycle get gs://$BUCKET_NAME_1

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ライフサイクル管理を有効にする

タスク 6: バージョニングの有効化

バケットのバージョニング ステータスを表示してバージョニングを有効にする

  1. 次のコマンドを実行し、バケットの現在のバージョニング ステータスを表示します。

gsutil versioning get gs://$BUCKET_NAME_1
  1. バージョニングを有効にするには、次のコマンドを実行します。

gsutil versioning set on gs://$BUCKET_NAME_1
  1. バージョニングが有効になっていることを確認するには、次のコマンドを実行します。

gsutil versioning get gs://$BUCKET_NAME_1

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 バージョニングの有効化

バケット内にあるサンプル ファイルのバージョンを複数作成する

  1. サンプル ファイルのサイズを確認します。

ls -al setup.html
  1. setup.html ファイルを開きます。

nano setup.html
  1. setup.html から任意の 5 行を削除して、ファイルのサイズを変更します。

  2. Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。

  3. ファイルをバケットにコピーします。このとき、-v バージョニング オプションを指定します。

gsutil cp -v setup.html gs://$BUCKET_NAME_1
  1. setup.html ファイルを開きます。

nano setup.html
  1. setup.html から別の 5 行を削除して、ファイルのサイズを変更します。

  2. Ctrl+O キー、Enter キーを順に押してファイルを保存してから、Ctrl+X キーを押して nano を終了します。

  3. ファイルをバケットにコピーします。このとき、-v バージョニング オプションを指定します。

gsutil cp -v setup.html gs://$BUCKET_NAME_1

ファイルのすべてのバージョンを一覧表示する

  1. ファイルのすべてのバージョンを一覧表示するには、次のコマンドを実行します。

gsutil ls -a gs://$BUCKET_NAME_1/setup.html
  1. 最も古いファイル(リストの最初にあるもの)の名前をハイライト表示してコピーします。これは次のステップで [VERSION_NAME] として参照します。
gs:// で始まるファイルのフルパスをコピーしてください。
  1. バージョンの値を環境変数 [VERSION_NAME] に格納します。

export VERSION_NAME=<バージョン名をここに入力>
  1. echo で確認します。

echo $VERSION_NAME

結果(コピーしないでください。これは出力例です):

gs://BUCKET_NAME_1/setup.html#1584457872853517

ファイルの最も古い元のバージョンをダウンロードして、復元を確認する

  1. ファイルの元のバージョンをダウンロードします。

gsutil cp $VERSION_NAME recovered.txt
  1. 復元を確認するには、次のコマンドを実行します。

ls -al setup.html ls -al recovered.txt

タスク 7: ディレクトリとバケットとの同期

ネストされたディレクトリを作成しバケットと同期する

ネストされたディレクトリ構造を作成し、これをバケット内で繰り返しコピーするとどうなるか調べます。

  1. 次のコマンドを実行します。

mkdir firstlevel mkdir ./firstlevel/secondlevel cp setup.html firstlevel cp setup.html firstlevel/secondlevel
  1. VM の firstlevel ディレクトリをバケットと同期するには、次のコマンドを実行します。

gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel

結果を調べる

  1. Cloud Console のナビゲーション メニュー)で、[Cloud Storage] > [ブラウザ] の順にクリックします。

  2. [BUCKET_NAME_1] をクリックします。バケット内にサブフォルダがあります。

  3. [/firstlevel] をクリックしてから、[/secondlevel] をクリックします。

  4. Cloud Console での表示内容と次のコマンドの結果を比較します。

gsutil ls -r gs://$BUCKET_NAME_1/firstlevel
  1. Cloud Shell を終了します。

exit

タスク 8: プロジェクト間での共有

2 番目のプロジェクトに切り替える

  1. 新しいシークレット タブを開きます。

  2. console.cloud.google.com に移動します。

  3. タイトルバーのプロジェクト選択プルダウンをクリックします。

  4. [すべて] をクリックしてから、Qwiklabs の [接続の詳細] ダイアログで 2 番目のプロジェクトをクリックします。プロジェクト ID はすべての Google Cloud プロジェクトにおいて一意の名前です。2 番目のプロジェクト ID は [PROJECT_ID_2] として参照します。

バケットを準備する

  1. Cloud Console のナビゲーション メニュー)で、[Cloud Storage] > [ブラウザ] の順にクリックします。
  2. [バケットを作成] をクリックします。
  3. 次のように指定し、残りの設定はデフォルトのままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択)
名前 グローバルに一意の名前を入力
ロケーション タイプ Multi-region
アクセス制御 きめ細かい管理バケットレベルの権限に加えて、オブジェクトレベルの権限
  1. バケット名をメモしてください。これは次のステップで [BUCKET_NAME_2] として参照します。

  2. [作成] をクリックします。

テキスト ファイルをバケットにアップロードする

  1. ファイルを [BUCKET_NAME_2] にアップロードします。サイズが小さなサンプル ファイルやテキスト ファイルで十分です。

  2. ファイル名をメモしておきます。これは後で [FILE_NAME] として参照して使用します。

IAM サービス アカウントを作成する

  1. Cloud Console のナビゲーション メニュー)で、[IAM と管理] > [サービス アカウント] をクリックします。
  2. [サービス アカウントを作成] をクリックします。
  3. [サービス アカウントの詳細] ページで、[サービス アカウント名] に「cross-project-storage」と入力します。
  4. [作成して続行] をクリックします。
  5. サービス アカウントの許可のページで、ロールとして [Cloud Storage] > [Storage オブジェクト閲覧者] を選択します。
  6. [続行]、[完了] の順にクリックします。
  7. JSON 鍵を追加するには [cross-project-storage] サービス アカウントをクリックします。
  8. [] タブで [鍵を追加] プルダウンをクリックし、[新しい鍵を作成] を選択します。
  9. 鍵のタイプとして [JSON] を選択し、[作成] をクリックします。JSON 鍵ファイルがダウンロードされます。後で、この鍵ファイルを見つけて VM にアップロードする必要があります。
  10. [閉じる] をクリックします。
  11. ハードドライブで JSON 鍵ファイルの名前を credentials.json に変更します。
  12. 上部のペインで、[PROJECT_ID_1] に切り替えます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 2 番目のプロジェクトのリソースを作成する

VM を作成する

  1. ナビゲーション メニュー)で、[Compute Engine] > [VM インスタンス] をクリックします。
  2. [インスタンスを作成] をクリックします。
  3. 次のように指定し、残りの設定はデフォルトのままにします。
プロパティ 値(値を入力するか、指定されたオプションを選択)
名前 crossproject
リージョン europe-west1
ゾーン europe-west1-d
シリーズ N1
マシンタイプ n1-standard-1
ブートディスク Debian GNU/Linux 11 (bullseye)
  1. [作成] をクリックします。

VM に SSH で接続する

  1. crossproject で [SSH] をクリックし、ターミナルを起動して接続します。
  1. [BUCKET_NAME_2] を環境変数に格納します。

export BUCKET_NAME_2=<バケット名 2 をここに入力>
  1. echo で確認します。

echo $BUCKET_NAME_2
  1. [FILE_NAME] を環境変数に格納します。

export FILE_NAME=<ファイル名をここに入力>
  1. echo で確認します。

echo $FILE_NAME
  1. [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 を承認する

  1. SSH VM ターミナルから credentials.json をアップロードするには、右上の隅にある歯車アイコン()をクリックして、[ファイルをアップロード] をクリックします。

  2. credentials.json を選択してアップロードします。

  3. [ファイル転送] ウィンドウで [閉じる] をクリックします。

  4. JSON ファイルが VM にアップロードされていることを確認します。

ls

結果(コピーしないでください。これは出力例です):

credentials.json
  1. ターミナルで次のコマンドを入力して、VM が Google Cloud API を使用することを承認します。

gcloud auth activate-service-account --key-file credentials.json

アクセス権を確認する

  1. もう一度次のコマンドを実行します。

gsutil ls gs://$BUCKET_NAME_2/
  1. もう一度次のコマンドを実行します。

gsutil cat gs://$BUCKET_NAME_2/$FILE_NAME
  1. 認証情報ファイルをバケットにコピーしてみます。

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.

ロールを変更する

  1. 上部のペインで、[PROJECT_ID_2] に切り替えます。
  2. Cloud Console のナビゲーション メニュー)で、[IAM と管理] > [IAM] の順にクリックします。
  3. cross-project-storage サービス アカウントの鉛筆アイコンをクリックします(右側にスクロールしないとこのアイコンが表示されない場合があります)。
  4. [Storage オブジェクト閲覧者] のロールをクリックしてから、[Cloud Storage] > [Storage オブジェクト管理者] をクリックします。
  5. [保存] をクリックします。[保存] をクリックしないと、変更は適用されません。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 最初のプロジェクトのリソースを作成して確認する

変更されたアクセス権を確認する

  1. crossproject の SSH ターミナルに戻ります。

  2. 認証情報ファイルをバケットにコピーします。

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.

タスク 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 の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.