Amazon Web Services ブログ

Amazon S3 汎用バケットの属性ベースのアクセス制御のご紹介

組織の規模が拡大するにつれて、ストレージリソースのアクセス許可の管理はますます複雑になり、時間がかかるようになっています。新しいチームメンバーが加わり、既存のスタッフの役割が変わり、新しい S3 バケットが作成されるにつれて、組織は複数のタイプのアクセスポリシーを絶えず更新して、S3 バケット全体のアクセス権を管理する必要があります。この課題は、管理者がこれらのポリシーを頻繁に更新して共有データセットや多数のユーザーのアクセス権を制御する必要があるマルチテナント S3 環境で特に顕著です。

2025 年 11 月 20 日、Amazon Simple Storage Service (S3) 汎用バケット用の属性ベースのアクセス制御 (ABAC) を導入しました。これは、S3 汎用バケットでタグを使用してデータへのアクセス権を制御することにより、ユーザーとロールのアクセス許可を自動的に管理できる新機能です。アクセス許可を個別に管理する代わりに、タグベースの IAM ポリシーまたはバケットポリシーを使用して、ユーザー、ロール、S3 汎用バケット間のタグに基づいてアクセスを自動的に許可または拒否できます。タグベースの認証により、バケット名の代わりにプロジェクト、チーム、コストセンター、データ分類、またはその他のバケット属性に基づいて S3 アクセス権を簡単に付与できるため、大規模な組織のアクセス許可の管理が大幅に簡素化されます。

ABAC の仕組み
一般的なシナリオは次のとおりです。管理者として、開発環境で使用する予定のすべての S3 バケットへのアクセス権をデベロッパーに付与したいと考えています。

ABAC を使用すると、開発環境の S3 バケットに environment:development などのキーと値のペアをタグ付けし、同じ environment:development タグにチェックが入っている AWS Identity and Access Management (IAM) プリンシパルに ABAC ポリシーをアタッチできます。バケットタグがポリシーの条件と一致する場合、プリンシパルにアクセス権が付与されます。

これがどのように機能するか見てみましょう。

使用の開始
まず、タグベースの認証を使用したい各 S3 汎用バケットで ABAC を明示的に有効にする必要があります。

Amazon S3 コンソールに移動し、汎用バケットを選択してから [Properties] (プロパティ) に移動すると、このバケットに対して ABAC を有効にするオプションが表示されます。

また、AWS コマンドラインインターフェイス (AWS CLI) を使用して、新しい PutBucketAbac API を使用してプログラムで有効にすることもできます。ここでは、米国東部 (オハイオ) us-east-2 AWS リージョンにある my-demo-development-bucket というバケットで ABAC を有効にしています。

aws s3api put-bucket-abac --bucket my-demo-development-bucket abac-status Status=Enabled --region us-east-2

または、AWS CloudFormation を使用している場合は、テンプレートの AbacStatus プロパティを [Enabled] (有効) に設定して ABAC を有効にすることもできます。

次に、S3 汎用バケットにタグを付けましょう。タグベースの認証の基準となる environment:development タグを追加します。

S3 バケットにタグが付けられたので、environment:development タグが一致することを検証する ABAC ポリシーを作成し、dev-env-role という IAM ロールにアタッチします。このロールへのデベロッパーのアクセス権を管理することで、すべての開発環境バケットに対するアクセス許可を一元的に制御できます。

IAM コンソールに移動し、[Policies] を選択し、[ポリシーの作成] を選択します。 [Policy editor] (ポリシーエディタ) で JSON ビューに切り替え、ユーザーが S3 オブジェクトの読み取り、書き込み、一覧表示を行えるようにするポリシーを作成します。ただし、これは、ユーザーに「environment」というキーが付けられたタグがあり、その値が S3 バケットで宣言されている値と一致する場合に限られます。このポリシーに s3-abac-policy という名前を付けて保存します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/environment": "development"
                }
            }
        }
    ]
}

次に、この s3-abac-policy を dev-env-role にアタッチします。

これで完了です。 これで、dev-role を引き受けるユーザーは、my-demo-development-bucket などの environment:development タグが付いたどの ABAC 対応バケットにもアクセスできるようになりました。

既存のタグを使用する
ABAC には既存のタグを使用できますが、これらのタグはアクセス制御に使用されることになるため、この機能を有効にする前に現在のタグ設定を確認することをおすすめします。これには、意図しないアクセスを防ぐために既存のバケットタグとタグベースのポリシーを確認することや、標準の TagResource API を使用するようにタグ付けワークフローを更新することが含まれます (バケットで ABAC を有効にすると、PutBucketTagging API の使用がブロックされるため)。AWS Config を使用して、どのバケットで ABAC が有効になっているかを確認したり、AWS Cloudtrail 管理イベントを使用してアプリケーションの PutBucketTagging API の使用状況を確認したりできます。

さらに、ABAC に使用するのと同じタグを、S3 バケットのコスト配分タグとしても使用できます。これらを AWS 請求コンソールまたは API でコストアロケーションタグとして有効にすると、AWS Cost ExplorerCost and Usage Reports はこれらのタグに基づいて支出データを自動的に整理します。

作成時にタグを強制する
組織全体のアクセス制御を標準化しやすくするために、サービスコントロールポリシー (SCP) または IAM ポリシーによってバケットを作成するときに、aws:TagKeysaws:RequestTag 条件キーを使用して、タグ付けを強制できるようになりました。その後、これらのバケットで ABAC を有効にして、組織全体で一貫したアクセス制御パターンを提供できます。作成時にバケットにタグを付けるには、CloudFormation テンプレートにタグを追加するか、既存の S3 CreateBucket API への呼び出しのリクエスト本文にタグを指定できます。例えば、デベロッパーに environment=development というタグが付いたバケットを作成するポリシーを適用して、コスト割り当てのためにすべてのバケットに正確にタグを付けることができます。アクセス制御に同じタグを使用したい場合は、これらのバケットで ABAC を有効にできます。

知っておくべきこと

Amazon S3 用の ABAC では、S3 バケット全体にスケーラブルなタグベースのアクセス制御を実装できるようになりました。この機能により、アクセスコントロールポリシーの作成が簡単になり、プリンシパルやリソースの出入によるポリシーの更新の必要性が減ります。これにより、規模を拡大しても強力なセキュリティガバナンスを維持しながら、管理オーバーヘッドを削減できます。

Amazon S3 汎用バケット用の属性ベースのアクセス制御は、AWS マネジメントコンソール、API、AWS SDK、AWS CLI、および AWS CloudFormation で追加料金なしで利用できるようになりました。Amazon S3 の料金表に従って、標準 API リクエスト料金がかかります。S3 リソースのタグストレージに追加料金はかかりません。

AWS CloudTrail を使用してアクセスリクエストを監査し、リソースへのアクセスを許可または拒否したポリシーを把握できます。

ABAC は、S3 ディレクトリバケット、S3 アクセスポイント、S3 テーブル、バケット、テーブルなど、他の S3 リソースでも使用できます。S3 バケットでの ABAC の詳細については、Amazon S3 ユーザーガイドを参照してください。

コスト割り当てでも、アクセス制御に使用するのと同じタグを使用できます。そのようなタグは、AWS 請求コンソールまたは API を使用してコストアロケーションタグとして有効化できます。コストアロケーションタグの使用方法の詳細については、該当するドキュメントをご覧ください。

原文はこちらです。