GCP - Storage Enum
ストレージ
Google Cloud Platform(GCP)ストレージは、非構造化データのための高い耐久性と可用性を提供する****クラウドベースのストレージソリューションです。パフォーマンス、可用性、コストに基づいたさまざまなストレージクラスを提供し、Standard、Nearline、Coldline、およびArchiveを含みます。 GCPストレージは、ライフサイクルポリシー、バージョニング、アクセス制御などの高度な機能も提供しており、データを効果的に管理および保護します。
バケットは、**リージョン、2つのリージョン、またはマルチリージョン(デフォルト)**に保存できます。
ストレージタイプ
Standard Storage: これは頻繁にアクセスされるデータに高性能で低遅延のアクセスを提供するデフォルトのストレージオプションです。ウェブサイトコンテンツの提供、メディアのストリーミング、データ分析パイプラインのホスティングなど、幅広いユースケースに適しています。
Nearline Storage: このストレージクラスは、Standard Storageより低いストレージコストとわずかに高いアクセスコストを提供します。最小のストレージ期間は30日で、アクセス頻度の低いデータに最適です。 バックアップやアーカイブ用に適しています。
Coldline Storage: このストレージクラスは、アクセス頻度の低いデータの長期保存に最適で、最小のストレージ期間は90日です。 Nearline Storageよりも低いストレージコストを提供しますが、高いアクセスコストがかかります。
Archive Storage: このストレージクラスは、非常にまれにアクセスされる冷たいデータ向けに設計されており、最小のストレージ期間は365日です。 すべてのGCPストレージオプションの中で最も低いストレージコストを提供しますが、最も高いアクセスコストがかかります。 コンプライアンスや規制上の理由で保存する必要があるデータの長期保存に適しています。
Autoclass: データへのアクセス量がわからない場合は、Autoclassを選択し、GCPがコストを最小限に抑えるために自動的にストレージのタイプを変更します。
アクセス制御
デフォルトでは、アクセス制御はIAMを介して行うことが推奨されていますが、ACLの使用を有効にすることも可能です。 IAMのみを選択した場合(デフォルト)、90日が経過すると、バケットのためにACLを有効にできなくなります。
バージョニング
バージョニングを有効にすると、ファイルの古いバージョンがバケット内に保存されます。保存するバージョンの数や、非現行バージョン(古いバージョン)の有効期間を設定することが可能です。標準タイプの場合は7日が推奨されています。
非現行バージョンのメタデータが保持されます。さらに、非現行バージョンのACLも保持されるため、古いバージョンは現在のバージョンと異なるACLを持つ場合があります。
詳細はドキュメントを参照してください。
保持ポリシー
バケット内のオブジェクトの削除を禁止する期間を指定します(少なくともコンプライアンスには非常に便利です)。 バージョニングまたは保持ポリシーのいずれか一方しか同時に有効にできません。
暗号化
デフォルトでは、オブジェクトはGoogleが管理するキーを使用して暗号化されますが、KMSからキーを使用することもできます。
パブリックアクセス
外部ユーザー(GCPにログインしているかどうかに関わらず)にバケットのコンテンツへのアクセスを許可することが可能です。 バケットが作成されると、デフォルトで、バケットを公開するオプションが無効になっていますが、十分な権限があれば変更できます。
バケットにアクセスするためのURLの形式は、**https://storage.googleapis.com/<bucket-name>
またはhttps://<bucket_name>.storage.googleapis.com
**です(どちらも有効です)。
HMACキー
HMACキーは資格情報の一種であり、Cloud Storageのサービスアカウントまたはユーザーアカウントに関連付けることができます。 HMACキーを使用して、Cloud Storageへのリクエストに含まれる署名を作成します。署名は、特定のリクエストがユーザーやサービスアカウントによって承認されたことを示します。
HMACキーには、アクセスIDとシークレットの2つの主要な部分があります。
アクセスID:特定のサービスまたはユーザーアカウントに関連付けられた英数字の文字列。サービスアカウントに関連付けられている場合、文字列の長さは61文字であり、ユーザーアカウントに関連付けられている場合、文字列の長さは24文字です。以下はアクセスIDの例です:
GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA
シークレット:特定のアクセスIDにリンクされた40文字のBase-64エンコードされた文字列。シークレットは、あなたとCloud Storageだけが知っている事前共有キーです。認証プロセスの一部として署名を作成するためにシークレットを使用します。以下はシークレットの例です:
bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ
アクセスIDとシークレットはHMACキーを一意に識別しますが、シークレットは署名の作成に使用されるため、より機密性の高い情報です。
列挙
もしバケットのリストを取得する際にパーミッションが拒否された場合、コンテンツにアクセス権がある可能性があります。したがって、バケットの名前規則について知っているのであれば、可能な名前のリストを生成してアクセスを試みることができます。
以下のPythonスクリプトを使用して、権限storage.objects.list
とstorage.objects.get
を持っていれば、バケットからすべてのフォルダとファイルを列挙してダウンロードすることができるはずです。
特権昇格
以下のページで、ストレージ権限を悪用して特権を昇格する方法を確認できます:
pageGCP - Storage Privesc認証なしの列挙
pageGCP - Storage Unauthenticated Enum攻撃後の利用
pageGCP - Storage Post Exploitation永続性
pageGCP - Storage Persistence最終更新