

# 汎用バケットでの ABAC の有効化
<a name="buckets-tagging-enable-abac"></a>

属性ベースのアクセス制御 (ABAC) は、属性すなわちタグに基づいてアクセス許可を定義するために使用する認可戦略です。デフォルトでは、ABAC はすべての Amazon S3 汎用バケットで無効になっています。汎用バケットに ABAC を使用するには、バケットを有効にする必要があります。

汎用バケットの ABAC を有効にする前に、まず以下のトピックで説明するタスクを完了することをお勧めします。

**Topics**
+ [ABAC を有効にする前のポリシーの監査](#buckets-tagging-enable-abac-audit)

## ABAC を有効にする前のポリシーの監査
<a name="buckets-tagging-enable-abac-audit"></a>

バケットの ABAC を有効にする前に、バケットにタグがある場合は、アクセスコントロールポリシーを監査して、タグベースの条件がバケットの既存のタグを参照しているかどうかを確認してください。その場合は、これらのポリシーが意図したとおりに設定されていること、およびタグベースのアクセスコントロールを有効にしても Amazon S3 ワークフローに意図しない認可変更が発生しないことを確認します。これにより、バケットで ABAC が有効になっていた後にポリシーが意図したとおりに機能するようになります。タグで属性ベースの条件を使用する例については、「[S3 汎用バケットでタグを使用する](buckets-tagging.md)」を参照してください。

### IAM ポリシーに必要なアクセス許可を含める
<a name="buckets-tagging-enable-abac-permissions"></a>

バケットに対して ABAC を有効にするには、次の Amazon S3 アクセス許可が必要です。
+ `s3:PutBucketAbac` – 汎用バケットの ABAC ステータスを更新します。
+ `s3:GetBucketAbac` – 汎用バケットの ABAC ステータスを表示します

ABAC を有効にすると、以前にバケットへのタグの追加やバケットからのタグの削除に使用したアクセス許可、`PutBucketTagging` または `DeleteBucketTagging` は機能しなくなります。代わりに、`TagResource` および *UntagResource* API を使用してこれらのタスクを実行します。

バケットで ABAC を有効にする前に、`TagResource` および `UntagResource` API を使用してタグ付けを管理することをお勧めします。Amazon S3 コンソールと CloudFormation は、デフォルトで `TagResource` および `UntagResource` API を使用するようになりました。`PutBucketAbac` API を使用してバケットの ABAC を無効にすることもできます。`GetBucketTagging` を使用して、バケットのタグを一覧表示できます。この API は、バケットの ABAC を有効にした後も引き続き機能します。または、`ListTagsForResource` を使用してバケット上のすべてのタグを一覧表示することもできます。

汎用バケットにタグを適用したり、汎用バケットからタグを削除するには、次のアクセス許可が必要です。
+ `s3:TagResource` - Amazon S3 汎用バケットなどの AWS リソースにタグを追加します。
+ `s3:UntagResource` - Amazon S3 汎用バケットなどの AWS リソースからタグを削除します。
+ `s3:ListTagsForResource` - Amazon S3 汎用バケットなど、AWS リソースに適用されているタグを表示します。

次の IAM ポリシーは、バケットの ABAC を有効にして、そのステータスを表示するアクセス許可を付与します。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutBucketAbac",
        "s3:GetBucketAbac"
      ],
      "Resource": "arn:aws:s3:::my-s3-bucket/*"
    }
  ]
}
```

汎用バケットのタグ付けと汎用バケットの ABAC ポリシーの例の詳細については、「[S3 汎用バケットでタグを使用する](buckets-tagging.md)」を参照してください。

### Steps
<a name="bucket-tag-add-steps"></a>

汎用バケットに対する `s3:PutBucketAbac` アクセス許可がある場合は、Amazon S3 コンソール、AWS コマンドラインインターフェイス (AWS CLI)、Amazon S3 REST API、および AWS SDK を使用して、バケットの ABAC を有効にできます。

### S3 コンソールの使用
<a name="bucket-enable-abac-console"></a>

Amazon S3 コンソールを使用して汎用バケットの ABAC を有効にするには。

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) にサインインします。

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. バケット名を選択します。

1. **[プロパティ]** タブを選択します。

1. **[バケット ABAC]** パネルで、**[編集]** を選択します。

1. **[有効にする]** トグルを選択します。

1. ABAC を有効にした後、タグを管理するために必要なアクセス許可を確認し、承認します。`TagResource`、`UntagResource`、および `ListTagsForResource`。

1. **[Save changes]** (変更の保存) をクリックします。

### AWS SDK の使用
<a name="bucket-enable-abac-sdks"></a>

------
#### [ SDK for Java 2.x ]

この例では、AWS SDK for Java 2.x を使用して汎用バケットの ABAC を有効にする方法を示します。このコマンドを使用する際は、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

```
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.AbacStatus;
import software.amazon.awssdk.services.s3.model.GetBucketAbacRequest;
import software.amazon.awssdk.services.s3.model.GetBucketAbacResponse;
import software.amazon.awssdk.services.s3.model.PutBucketAbacRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAbacResponse;
import software.amazon.awssdk.regions.Region; 

public class BucketAbac {
    public static void main(String[] args) {
        Region region = Region.US_EAST_1;
        S3Client s3 = S3Client.builder()
            .region(region)
            .build();

        putBucketAbac(s3, "amzn-s3-demo-bucket", "Enabled");
        getBucketAbac(s3, "amzn-s3-demo-bucket");

        putBucketAbac(s3, "amzn-s3-demo-bucket", "Disabled");
        getBucketAbac(s3, "amzn-s3-demo-bucket");
    }

    /**
     * Sets the ABAC (Attribute-Based Access Control) status for a specified S3 bucket.
     * 
     * @param s3 The S3Client instance to use for the API call
     * @param bucketName The name of the S3 bucket to update
     * @param status The desired ABAC status ("Enabled" or "Disabled")
    */
    public static void putBucketAbac(S3Client s3, String bucketName, String status) {
       try {
            AbacStatus abacStatus = AbacStatus.builder()
                .abacStatus(status)
                .build();
            PutBucketAbacReqquest request = PutBucketAbacRequest.builder()
                .bucket(bucketName)
                .abacStatus(abacStatus)
                .build();
            s3.putBucketAbac(request);
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
    
    /**
     * Retrieves the current ABAC (Attribute-Based Access Control) status for a specified S3 bucket.
     * 
     * @param s3 The S3Client instance to use for the API call
     * @param bucketName The name of the S3 bucket to query
    */
    public static void getBucketAbac(S3Client s3, String bucketName) {
       try {
            GetBucketAbacReqquest request = GetBucketAbacRequest.builder()
                .bucket(bucketName)
                .build();
            GetBucketAbacResponse response = s3.getBucketAbac(request);
        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```

この例では、AWS SDK for Java 2.x を使用して汎用バケットの ABAC を有効にする方法を示します。このコマンドを使用する際は、`user input placeholders` を独自の情報に置き換えます。

------

### REST API の使用
<a name="bucket-enable-abac-api"></a>

Amazon S3 REST API での汎用バケットへのタグの追加のサポートの詳細については、「*Amazon Simple Storage Service API リファレンス*」の次のセクションを参照してください。
+ [PutBucketAbac](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketABAC.html)

### の使用AWS CLI
<a name="bucket-enable-abac-cli"></a>

AWS CLI をインストールする方法については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLI のインストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

次の CLI の例は、AWS CLI を使用して汎用バケットの ABAC を有効にする方法を示しています。このコマンドを使用する際は、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

**リクエスト]**

```
# Enable ABAC on a general purpose bucket

aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Enabled --region us-east-2

# Disable ABAC on a general purpose bucket

aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Disabled --region us-east-2

# Get ABAC status on a general purpose bucket

aws s3api get-bucket-abac --bucket amzn-s3-demo-bucket --region us-east-2
```