{S3}バケットでのリクエスタ支払いの設定

https://dev.classmethod.jp/articles/amazon-s3-requester-pay/

通常は、データを共有したいが、他者がデータにアクセスする際に発生する費用を負担したくない場合に、リクエスタ支払いバケットバケットに設定します。


リクエスタ支払いバケット内のオブジェクトにアクセスするには、リクエストに以下のいずれかを含める必要があります。

GET、HEAD、POST リクエストの場合は、ヘッダーに x-amz-request-payer : requester を含めます
署名付き URL の場合は、リクエストに x-amz-request-payer=requester を含めます

AWS CLI を使用してリクエスタ支払いバケットからオブジェクトをダウンロードするには、
get-object リクエストの一部として --request-payer requester を指定します。


-- 1. S3 バケットを作成する [ アカウントAでの作業 ]

aws s3 mb s3://bucket123
aws s3 ls


-- 2. バケットポリシー作成 [ アカウントAでの作業 ]

vim a.json
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "Example permissions",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::888888888888:root"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::bucket123"
         ]
      }
   ]
}

aws s3api put-bucket-policy \
--bucket bucket123 \
--policy file://a.json


-- 3. バケットにオブジェクトをアップロードする [ アカウントAでの作業 ]

echo test01 > test01.txt
echo test02 > test02.txt
echo test03 > test03.txt

aws s3 cp test01.txt s3://bucket123
aws s3 cp test02.txt s3://bucket123
aws s3 cp test03.txt s3://bucket123


-- 4. リクエスタ支払いの設定 [ アカウントAでの作業 ]

-- リクエスタ支払いの有効化
aws s3api put-bucket-request-payment \
--bucket bucket123 \
--request-payment-configuration '{"Payer":"Requester"}'

-- リクエスタ支払いの無効化
aws s3api put-bucket-request-payment \
--bucket bucket123 \
--request-payment-configuration '{"Payer":"BucketOwner"}'

-- リクエスタ支払いの設定確認
aws s3api get-bucket-request-payment \
--bucket bucket123

 

-- 5. 動作確認 [ アカウントBでの作業 ]

aws s3 ls s3://bucket123 --recursive

aws s3 ls s3://bucket123 --recursive --request-payer requester


リクエスタ支払いの有効の場合、「--request-payer requester」を指定する必要がある


-- 6. クリーンアップ [ アカウントAでの作業 ]
-- バケットの削除
aws s3 rb s3://bucket123 --force
aws s3 ls