Cloud Storage FUSE を使用して Cloud Storage バケットをマウントする

マウント オプション

このページでは、Cloud Storage FUSE を使用して Cloud Storage バケットをローカル ファイル システムにマウントする方法について説明します。

始める前に

バケットをマウントするには、まず次のタスクを完了する必要があります。

必要なロールを取得する

バケットをマウントするには、バケットに対するストレージ オブジェクト閲覧者(roles/storage.objectViewer)ロールを付与するようバケットのオーナーに依頼してください。バケットを自分で作成した場合、バケットにはすでにストレージ管理者(roles/storage.admin)ロールが付与されているため、ストレージ オブジェクト閲覧者ロールは必要ありません。

ストレージ オブジェクト閲覧者の事前定義ロールには、バケットのマウントに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

  • storage.objects.list

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。

Cloud Storage FUSE をインストールする

まだインストールしていない場合は、Cloud Storage FUSE をインストールします。

Cloud Storage FUSE のリクエストを認証する

Cloud Storage への Cloud Storage FUSE リクエストを認証するには、アプリケーションのデフォルト認証情報を設定する必要があります。デフォルトでは、Cloud Storage FUSE は、構成を追加しなくても、既存のアプリケーションのデフォルト認証情報を自動的に読み込みます。

Google Cloud CLI を使用してアプリケーションのデフォルト認証情報を設定する手順は次のとおりです。

  1. Google Cloud CLI をインストールします。
  2. gcloud CLI を初期化するには:

    gcloud init
  3. Google アカウントのローカル認証情報を作成します。

    gcloud auth application-default login

Compute Engine 仮想マシン(VM)を作成する場合、そのサービス アカウントを使用して Cloud Storage FUSE へのアクセスを認証することもできます。

バケットをマウントする

バケットをローカル ファイル システムにマウントするには、次のコマンドを使用します。

gcsfuse GLOBAL_OPTIONS BUCKET_NAME MOUNT_POINT

ここで

  • GLOBAL_OPTIONS は、マウントの設定方法を制御するために追加できるオプションです。オプションとその使用方法の詳細については、Cloud Storage FUSE CLI のオプションをご覧ください。

  • BUCKET_NAME は、マウントするバケットの名前です。たとえば、my-bucket のようにします。動的マウントを行う場合は、コマンドからバケット名を除外します。

  • MOUNT_POINT は、バケットがマウントされるローカル ディレクトリです。例: /path/to/mount/point

Cloud Storage FUSE が終了したら、バケット マウント ポイントで ls を実行することで、マウントされたバケットにアクセスできます。Cloud Storage FUSE をフォアグラウンドに残す場合(デバッグ ロギングを行う場合など)は、--foreground フラグを指定して gcsfuse コマンドを実行します。

マウントの例

このセクションでは、バケットをマウントするさまざまなコマンドの例を紹介します。

静的マウント

静的マウントとは、特定のバケットをマウントすることです。たとえば、バケット my-bucket をディレクトリ /path/to/mount/point にマウントするには、次のコマンドを実行します。

mkdir /path/to/mount/point
gcsfuse my-bucket /path/to/mount/point

動的マウント

動的マウントとは、ユーザーがアクセスできるすべてのバケットをサブディレクトリとしてマウントすることです。

動的マウントを行う場合、コマンドからバケット名を除外します。たとえば、my-bucket-1my-bucket-2my-bucket-3 にアクセスできるとします。すべてのバケットをディレクトリ /path/to/mount/point にマウントするには、次のコマンドを実行します。

mkdir /path/to/mount/point
gcsfuse /path/to/mount/point

これで、サブディレクトリとしてバケットにアクセスできます。

ls /path/to/mount/point/my-bucket-1/
ls /path/to/mount/point/my-bucket-2/
ls /path/to/mount/point/my-bucket-3/

動的にマウントされたバケットは、ルート マウント ポイントから一覧表示できません。代わりに、バケット名はリスト オペレーションの一部として指定する必要があります。

読み取り専用としてのバケットのマウント

バケットを読み取り専用としてマウントするには、-o ro オプションを gcsfuse コマンドに渡します。たとえば、バケット my-bucket をディレクトリ /path/to/mount/point に読み取り専用としてマウントするには、次のコマンドを実行します。

gcsfuse -o ro my-bucket  /path/to/mount/point

バケット内のディレクトリをマウントする

デフォルトでは、Cloud Storage FUSE は、バケットのすべての内容とディレクトリ構造を含むバケット全体をマウントします。バケット内の特定のディレクトリをマウントするには、--only-dir オプションを gcsfuse コマンドに渡します。たとえば、ディレクトリ my-bucket/a/b をディレクトリ /path/to/mount/point にマウントするには、次のコマンドを実行します。

gcsfuse --only-dir a/b my-bucket /path/to/mount/point

Linux の mount コマンドを使用したマウント

Cloud Storage FUSE のインストールには、Linux mount コマンドで認識されるヘルパーが含まれています。これにより、mount コマンドを使用してバケットをマウントできます。Linux を使用している場合は、root から mount コマンドを実行する必要があります。たとえば、次のコマンドはバケット my-bucket をパス /path/to/mount/point にマウントします。

sudo mount -t gcsfuse -o rw,user my-bucket /path/to/mount/point

Linux の mount コマンドを使用してマウントする場合、Cloud Storage FUSE CLI オプション-o フラグに引数として渡すことができますが、ハイフン(-)はアンダースコア(_)に置き換える必要があります。たとえば、implicit-dirs ではなく implicit_dirs を使用します。

sudo mount -t gcsfuse -o implicit_dirs my-bucket /path/to/mount/point

永続マウント

Cloud Storage FUSE のインストールには、パス /sbin/mount.gcsfuse でシステムにインストールされるヘルパーが含まれています。このヘルパーを使用すると、/etc/fstab ファイルを使用してマウント ポイントを作成できるため、マウントを維持できます。

たとえば、次の行が /etc/fstab ファイルに追加されると、バケット my-bucket のマウント ポイントがパス /mount/point に定義されます。

my-bucket /mount/point gcsfuse rw,noauto,user

ここで

  • rw オプションは、読み取り権限と書き込み権限でマウント ポイントを作成することを指定します。

  • noauto オプションは、起動時にファイル システムをマウントしないよう指定します。

  • user オプションを使用すると、/etc/fstab ファイルで指定されたマウント ポイントを誰でも作成できます。サンプル行を /etc/fstab ファイルに追加したら、root 以外のユーザーとして mount /mount/point を実行できます。

起動時にバケットを自動的にマウントする場合は、Cloud Storage FUSE が待機するように、x-systemd.requires=network-online.target オプションまたは _netdev オプションを /etc/fstab エントリに含めて、マウントの前にネットワーク システムの準備を完了できるようにする必要があります。次に例を示します。

my-bucket /mount/point gcsfuse rw,x-systemd.requires=network-online.target,user

/etc/fstab エントリに uidgid、あるいはこの両方のオプションを追加すると、バケットを特定の root 以外のユーザーとして自動的にマウントできます。次に例を示します。

my-bucket /mount/point gcsfuse rw,_netdev,allow_other,uid=1001,gid=1001

Linux の mount コマンドと同様に、/etc/fstab ファイルでマウントに使用するフラグには、ハイフン(-)ではなくアンダースコア(_)を使用する必要があります。たとえば、implicit-dirs ではなく implicit_dirs を使用します。

フォルダを使用したバケットのマウント

マネージド フォルダを含むバケットをマウントするには、コマンドで --implicit-dirs オプション指定します。

たとえば、バケット my-bucket とそのマネージド フォルダをディレクトリ /path/to/mount/point にマウントするには、次のコマンドを実行します。

mkdir /path/to/mount/point
gcsfuse --implicit-dirs my-bucket /path/to/mount/point

マネージド フォルダを使用してバケットをマウントする場合は、次の制限事項と考慮事項に留意してください。

  • 空のマネージド フォルダは、マウントされたバケットには表示されません。

  • Cloud Storage FUSE を使用して、マネージド フォルダの IAM 権限を設定または管理することはできません。マネージド フォルダの IAM 権限を設定または管理するには、マネージド フォルダで IAM を使用するをご覧ください。

  • マウントされたバケット内のマネージド フォルダをコピーまたは移動するには、cp コマンドと mv コマンドを使用します。マネージド フォルダをコピーまたは移動しても、元のマネージド フォルダの IAM ポリシーは新しいマネージド フォルダに保持されません。新しいマネージド フォルダに新しい IAM ポリシーを設定する必要があります。

マウント ポイントへのアクセス権限を制御する

デフォルトでは、Cloud Storage FUSE は、マウントされたバケットの内容へのアクセスを呼び出し元ユーザーにのみ許可する権限を持つバケット マウント ポイントを作成します。これは、FUSE カーネル内に実装されるセキュリティ対策です。

バケットをマウントし、他のユーザーがバケット マウント ポイントにアクセスできるようにするには、オプション -o allow_othermount コマンドを root として実行します。

mount -t gcsfuse -o allow_other my-bucket /path/to/mount/point

root としてバケットをマウントしないようにするには、user_allow_other/etc/fuse.conf ファイルに追加して、他のユーザーがバケット マウント ポイントにアクセスできるようにする必要があります。

マウントされたバケットにアクセスするには、呼び出し元のユーザー以外のユーザーに、必要な IAM 権限が必要です。

マウントされたバケットにアクセスするためのロール

マウントされたバケットに対して読み取りと書き込みを行うには、バケットのオーナーにバケットに対するストレージ オブジェクト ユーザー(roles/storage.objectUser)ロールを付与するよう依頼してください。

この事前定義ロールには、マウントされたバケットからの読み取りと、マウントされたバケットへの書き込みに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

  • storage.objects.create
  • storage.objects.delete
  • storage.objects.get
  • storage.objects.list
  • storage.objects.update

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。

バケットをマウント解除する

バケットをマウント解除するには、fusermount ツールを使用します。

fusermount -u /path/to/mount/point

次のステップ