📦

Cloud Storageで管理フォルダを使ったアクセス制御

2023/12/07に公開

はじめに

こんにちは、クラウドエース データ ML ディビジョン所属のヒッキーです。 クラウドエースの IT エンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータ ML ディビジョンです。

データML ディビジョンでは活動の一環として、毎週 Google Cloud (旧 Google Cloud Platform、以下「GCP」) の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。
今回ご紹介するリリースは、2023年10月26日にプレビューとなった、Cloud Storage (以下「GCS」)の管理フォルダ機能です。これにより、フォルダ毎にIAMポリシーを設定できるようになったため、バケット内のデータに対して詳細な管理を行えるようになりました。

前提知識

IAM(Identity and Access Management)

IAM とはアクセス制御を管理する機能です。具体的に見ていきます。プリンシパル(=ユーザーアカウントやサービスアカウント等)が GCP 上で作業を行うには権限が必要となります。例えば Google Compute Engine インスタンスの作成や、BigQuery のデータセットを閲覧するにも権限が必要です。このような権限をロール(権限をまとめたもの)にまとめて、プリンシパルに付与するのが IAM の仕組みです。

リリース内容

今回のリリースで、GCS において管理フォルダ機能がプレビューとなりました。管理フォルダを使用すると、オブジェクトをグループごとに整理し、バケット内のデータに対してより詳細なアクセス制御を行えます。

検証

実際に管理フォルダを作成し、管理フォルダにIAM権限を付与していきます。検証を行うためには以下の権限が必要となるため、自身のアカウントに付与してください。
ストレージフォルダ管理者(roles/storage.folderAdmin)
また検証は以下の公式ドキュメントに沿って行っていきます。
(Overview of managed folders)

管理フォルダの作成

  1. GCS でバケットの作成
    管理フォルダが配置されるバケットを作成します。Google Cloud Shell を開き以下のコマンドを入力してください。BUCKET_NAME には任意の名前を入力してください。ここで決めた BUCKET_NAME は先の手順でも使用します。
gcloud storage buckets create gs://BUCKET_NAME
  1. 管理フォルダの作成
    続いて、管理フォルダを作成していきます。以下のコマンドを入力してください。BUCKET_NAME には作成したバケットの名前を、MANAGED_FOLDER_NAME には任意の名前を入力してください。
gcloud alpha storage managed-folders create gs://BUCKET_NAME/MANAGED_FOLDER_NAME
  1. 作成した管理フォルダの確認
    管理フォルダが実際に作成されているかを確認していきます。以下のコマンドを入力してください。BUCKET_NAME には作成したバケットの名前を、MANAGED_FOLDER_NAME には作成した管理フォルダの名前を入力してください。
gcloud alpha storage managed-folders describe gs://BUCKET_NAME/MANAGED_FOLDER_NAME

正しく作成されている場合以下のような出力が得られます。
alt

管理フォルダにIAM ポリシーを設定する

  1. 管理フォルダに権限を付与
    管理フォルダに IAM ポリシーを付与します。Cloud Shell 上で次のコマンドを入力してください。BUCKET_NAME には作成したバケットの名前を、MANAGED_FOLDER_NAME には作成した管理フォルダの名前を入力します。
    IAM_ROLE には付与したいIAMロールを記載してください。今回は roles/storage.objectViewer と記載しました(オブジェクト閲覧者)。PRINCIPAL_IDENTIFIERには権限を与えたいプリンシパルを記載してください。例えば、user:hikita@gmail.com のように、プリンシパルタイプと識別子を記載します。プリンシパルの記載方法については次のページを参考にしてください(Principal identifiers)
gcloud alpha storage managed-folders add-iam-policy-binding gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=PRINCIPAL_IDENTIFIER --role=IAM_ROLE
  1. 管理フォルダにオブジェクトをアップロード
    作成した管理フォルダにデータをアップロードします。以下のコマンドを入力してください。OBJECT_LOCATIONにはアップロードしたいオブジェクトのパスを、BUCKET_NAME には作成したバケットの名前を、MANAGED_FOLDER_NAME には作成した管理フォルダの名前を入力してください。
gcloud alpha storage cp OBJECT_LOCATION gs://BUCKET_NAME/MANAGED_FOLDER_NAME/

権限が付与されていないプリンシパルで管理フォルダ内のオブジェクトを参照しようとした場合、以下のようなエラー画面となります。
alt

  1. 管理フォルダの IAM ポリシーからプリンシパルを削除
    IAMポリシーを削除する際の手順を説明します。次のコマンドを入力してください。BUCKET_NAME には作成したバケットの名前を、MANAGED_FOLDER_NAME には作成した管理フォルダの名前を入力してください。
    PRINCIPAL_IDENTIFIER には権限を削除したい対象のプリンシパルを、IAM_ROLE には削除したいロールを記載してください。
gcloud alpha storage managed-folders remove-iam-policy-binding  gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=PRINCIPAL_IDENTIFIER --role=roles/storage.objectViewer

注意事項

  1. 管理フォルダのネスト数
    管理フォルダはネストも可能ですが、親フォルダ含めて7つまでとなっています。ネストのしすぎには注意しましょう。

  2. IAMポリシーの適用範囲
    管理フォルダに付与した IAM ポリシーはフォルダ内の全てのデータに対して適用されます。ファイル毎の IAM ポリシーの付与は行えないので注意しましょう。

  3. バケットに対しての権限付与
    バケットに対して権限を付与した場合、その権限はバケット内の管理フォルダにも適用されてしまいます。例えばあるプリンシパルがバケットに対して roles/storage.objectViewer の権限を付与された場合、バケット内にある管理フォルダを全て閲覧できるようになってしまいます。権限周りは特に気をつけて扱うようにしましょう。

まとめ

今回は GCS の管理フォルダ機能について見ていきました。管理フォルダの活用例として、例えば個人情報や商業情報といったセンシティブデータを管理フォルダ外に、公開したい情報を管理フォルダ内に入れます。これにより従来はバケットを複数に分けて管理する必要があったデータを一つのバケットで管理できるようになります。管理フォルダを活用してきめ細かなアクセス制御を行いましょう。

Discussion