Cloud Storage(GCS)のマネージドフォルダを用いた権限管理

記事タイトルとURLをコピーする

G-genの山崎です。 Google Cloud (旧称 GCP) の Cloud Storage でフォルダ単位での権限管理が可能となるマネージドフォルダを用いた権限管理方法について、解説します。

Cloud Storage とは

Cloud Storage は、データ容量が無制限、かつ耐久性の高いストレージサービスで、略称として GCS とも呼称されます (Google Cloud Storage の略) 。
Cloud Storage は、上記の特性から以下のような様々な用途で利用することができます。

  • システム間のデータ授受
  • データ分析における、未加工データ(データレイク)
  • 各種データのバックアップ

Cloud Storage 上、各種ファイルは、バケットと呼ばれるデータを入れる箱の中に、オブジェクトとして、保存されます。
Cloud Storage の全体像について確認する場合は、以下の記事を参照いただければと思います。
blog.g-gen.co.jp

フォルダを用いたオブジェクトの管理

Cloud Storage は以下の2種類のフォルダを用いて、オブジェクトを管理することができます。

  • シミュレートされたフォルダ
  • マネージドフォルダ

明示的に指定しない場合、マネージドフォルダは作成されず、シミュレートされたフォルダが作成されます。それぞれのフォルダの違いについて、以降で述べていきます。

シミュレートされたフォルダとは

シミュレートされたフォルダは「シミュレート」という名の通り、Cloud Storage バケット内にフォルダの実体は存在しない、仮想的なフォルダです。

例えば、以下のような形でオブジェクトを作成したとします。

  • bucket/folder1/file1.txt
  • bucket/folder1/folder1-1/file1-1.txt
  • bucket/folder2/file2.txt

この場合、Google Cloud コンソール上は、以下のような階層構造で表示されます。

folder1の配下にfile1.txtとfolder1-1が存在する

folder2の配下にfile2.txtが存在する

これは、実体として「folder1」「folder2」といったフォルダが作成されているわけではなく、オブジェクトのパスの中に「/」が含まれているため、Google Cloud コンソール上、あたかもフォルダが存在するかのように表示されているだけです。

シミュレートされたフォルダは、あたかもフォルダが存在するかのように表示されているだけであり、実体は存在しません。そのため、フォルダ単位での権限管理を行うことはできません

フォルダ単位での権限管理を行いたい場合は、マネージドフォルダを使用する必要があります。

マネージドフォルダとは

マネージドフォルダは、シミュレートされたフォルダと異なり、リソースとしての実体が存在します。また、フォルダ単位での権限管理が可能です。

ただし、マネージドフォルダを使用する際は、フォルダの命名や、フォルダの階層に制約が発生するため、公式ドキュメントで制約を確認の上、作成することを推奨します。

マネージドフォルダでの権限管理

マネージドフォルダに対する権限付与は、バケットやプロジェクトに対して付与していた権限をフォルダに置き換えて実施していただければ、基本的には問題ありません。

権限の継承も通常の権限の付与と同様に行われるため、 権限を付与したマネージドフォルダ配下のオブジェクトに対しても権限が適用されます。

なお、権限の継承の考え方については、以下の記事を参照いただければと思います。

blog.g-gen.co.jp

マネージドフォルダでの権限管理での注意点は、マネージドフォルダに関する IAM 権限(フォルダ作成、削除、閲覧等)は、バケットやオブジェクトとは別であるという点です。マネージドフォルダに関する IAM 権限には、以下のようなものがあります。

  • storage.managedFolders.create
  • storage.managedFolders.delete
  • storage.managedFolders.get
  • storage.managedFolders.list
  • storage.managedFolders.getIamPolicy
  • storage.managedFolders.setIamPolicy

しかし、事前定義ロール(Storage オブジェクト閲覧者、Storage オブジェクト ユーザー 等)を用いてバケットやオブジェクトに対する権限管理をしている場合、それらのロールは、マネージドフォルダに関する権限も含んでいます。たとえば、「Storage オブジェクト閲覧者」ロールには storage.managedFolders.getstorage.managedFolders.list の権限が含まれています。

そのため、「シミュレートされたフォルダをマネージドフォルダに変更したら、フォルダが見えなくなった」といったトラブルの発生頻度は低いと考えてよいでしょう。

マネージドフォルダの使い方

実際に、「folder1」をマネージドフォルダ化し、あるユーザーに対して、「folder1」配下に対して参照権限を付与した場合の挙動を確認していきます。

「folder1」の「︙」を押下し、「アクセス権の編集」を押下します。

アクセス権の編集を押下

マネージドフォルダの作成の確認ポップアップに対して、「マネージドフォルダをアタッチします」を押下します。

マネージドフォルダをアタッチ

「folder1」に対するアクセス権の編集ポップアップに対して、「プリンシパルを追加」を押下し、権限を付与したいアカウントに対して、権限を付与します。

アクセス権の編集

アカウントに対して権限付与

権限の付与が完了した後に、権限が付与されたユーザーで、権限が付与されたフォルダのURLを用いて、Google Cloud コンソールを確認したところ、「folder1」のみ参照ができ、「folder2」は表示されないことが確認できました。

権限が付与されたユーザーでの画面表示 folder1

また、「folder1-1」に移動すると、その配下の「file1-1.txt」の表示が確認でき、「folder1」に付与した権限が、配下のフォルダに対して、継承されていることが確認できます。

権限が付与されたユーザーでの画面表示 folder1-1

マネージドフォルダでの権限管理による留意事項

マネージドフォルダを用いることで、一つのバケットの中で、フォルダ単位で権限管理を行うことができるようになります。

一方で、バケットよりも細かい単位での権限管理となると、運用管理者からすると、管理が煩雑となる可能性もあります。

そのため、バケットやオブジェクトを誰と共有するかを整理の上、バケット単位での権限管理とするか、マネージドフォルダでの権限管理とするかを検討するプロセスを踏むことが重要となります。

山崎 曜(記事一覧)

クラウドソリューション部

元は日系大手SIerにて金融の決済領域のお客様に対して、PM/APエンジニアとして、要件定義〜保守運用まで全工程に従事。
フルスタックな人材を目指し、日々邁進。