はじめに
2023 AWS re:inventにてS3のアクセス管理に関する新機能"S3 Access Grants"が発表されました!
これまでS3のアクセス管理方法として、S3バケットやIAMによるポリシー管理やAccess Points管理などがありましたが、新しい管理方法が登場したようです。
本記事ではS3 Access Grantsが従来のアクセス管理方法とどういった点で異なるのかについて解説をしていきたいと思います。
S3 Access Grants
特徴
- IAMプリンシパル(ロールやユーザー)に対してS3 内のデータセットにマッピングすることが可能
- またAWS Identity Centerとも連携が可能で、外部プロバイダのユーザーにも対応が可能
- 一時的なセッションとして認証/認可を行い、きめ細やかなアクセス管理が可能
- アクセスはCloudtrailで監査が可能
構成
Access Grantsは大きく分けると以下の概念(コンポーネント)で構成されます。
インスタンス
- S3 Grants Accessを管理するインスタンス
- 2023/12/1現在では1リージョンに1つのインスタンスを作成することが可能
ロケーション
- 権限の対象とするS3バケットやキーを大枠として指定
- ロケーションにロールを設定し、払い出すことの可能な権限一覧(READ/WRITE)をポリシーとして設定
権限(Grants)
- ロケーション内のどこの階層に対して、何の許可(READ or WRITE)をどのプリンシパルに結びつけるのかを定義
- リージョンごとに最大 100,000 件の許可を定義
- ロールに限らず、AWS Identity Centerと連携することが可能であり、一般的なIDプロバイダーをサポート
アクセスフロー
今回は上記のように、DeveloperロールがS3の/developer/*
にアクセスが必要なケースで説明をします。
①まずDeveloper Roleを使用して、S3 Grants Accessに対して、s3:GetDataAccess
リクエストを送ります。このとき権限の範囲READ/WRITEを指定することができます。
②このリクエストに対してS3 Access Grantsは一致する権限(Grants)を探し、権限(Grants)に従って対象となるS3への一時的な認証キーを発行します。ユーザーからのREAS/WRITEに基づいて、ロケーションに紐づけられたロールのうちREAS/WHITE権限をそれぞれ割り当てます。
③一時的な認証情報を受け取ったユーザーは、それらを使用してオブジェクトに対して一時的にアクセスすることが可能になります。
ユースケース
- 多数のバケットやプリンシパルが存在していて、それらを一元的に管理したい場合
- S3の階層に対してきめ細かく権限を設定したい場合
- IAMプリンシパルに限らず外部IDプロバイダを使用している場合
- セキュリティ要件等で一時的な認証として権限を払い出す必要がある場合
従来のアクセス管理
S3バケットポリシー
S3のバケットポリシーやIAMロールのポリシーでアクセス制御をする方針です。どちらかで許可されていればS3にアクセスすることが可能になります。階層を指定して権限を付与することも可能です。
メリット
- シンプルな構成で個人利用や小規模利用向け
デメリット
- 階層ごとの制限を付ける要件など、複雑な権限管理を行う場合にバケットポリシーも複雑になる
- バケット単位の設定のため、バケットが増えるにつれて管理が難しくなる
- IAM側で制御した場合、追加で必要となるバケットが増えるたびに各ロールのポリシーを変更する必要がある
S3 Access Points
Access PointsではアクセスポリシーによってS3に対するアクセス権限を管理することが可能になります。ユーザーやロールはアクセスポイントに対して、S3アクセスを実行することでS3のオブジェクトに対するアクセスを可能にします。
※上記ではアクセスポイントポリシーとロールポリシーと分けていますが、アクセスポイントポリシー内で完結することも可能です。
また、バケットポリシーでアクセスポイントからのみアクセスを許可する設定にすることで、よりセキュアなアクセス管理を行うことができるようになります。
メリット
- 複数のバケットが存在しており、アクセスを一元的に管理したい場合
デメリット
- 各アクセス ポイントは 1 つのバケットにのみ関連付けられており、アクセス ポイントの作成時にバケットを指定する必要がある
- アクセス ポイント ポリシーのサイズは 20 KBが制限のため、複雑なポリシー適用には不向き
おわりに
S3 Access Grantsは主に大規模なエンタープライズ向けのアクセス管理において効果が発揮されそうです。よりセキュアに管理することができる一方で、一時的な認証になってしまうので、その管理をユーザー側が行う必要はありそうですね。
今後現場での活用ケースが挙がってくることが楽しみです。