{S3}特定の VPC エンドポイントまたは IP アドレスを使用して Amazon S3 バケットへのアクセスを制限する

 

https://dev.classmethod.jp/articles/aws-s3-rest-api-access-vpc/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/block-s3-traffic-vpc-ip/
https://dev.classmethod.jp/articles/vpc-endpoint-gateway-type/


作業概要
EC2インスタンスを2つ作成(インスタンス1、インスタンス2)
ゲートウェイ型S3エンドポイントを作成
インスタンス1、インスタンス2からS3にアクセスできることを確認
インスタンス1のIPアドレスのみ許可するバケットポリシーを作成
インスタンス1はアクセスできるが、インスタンス2からアクセスできないことを確認

 

-- 1. 事前準備

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

 

-- 1.2 jqインストール

sudo yum -y install jq


-- 2. S3バケット作成

aws s3 mb s3://bucket123
aws s3 ls


-- 3. EC2インスタンス起動

aws ec2 run-instances \
--image-id ami-0404778e217f54308 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance01}]' \
--instance-market-options '{"MarketType": "spot","SpotOptions": {"SpotInstanceType": "one-time"}}'

aws ec2 run-instances \
--image-id ami-0404778e217f54308 \
--instance-type t3.nano \
--key-name key1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=instance02}]' \
--instance-market-options '{"MarketType": "spot","SpotOptions": {"SpotInstanceType": "one-time"}}'

aws ec2 describe-instances


-- 4. S3ゲートウェイエンドポイントの作成

aws ec2 create-vpc-endpoint \
--vpc-endpoint-type Gateway \
--vpc-id vpc-11111111111111111 \
--service-name com.amazonaws.ap-northeast-1.s3 \
--route-table-ids rtb-22222222222222222

aws ec2 describe-vpc-endpoints

 


-- 5. S3アクセス確認(バケットポリシー追加前)
aws s3 ls s3://bucket123 --recursive


-- 6. S3バケットポリシー追加

vim b.json

{
  "Id": "VpcSourceIp",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VpcSourceIp",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::bucket123",
        "arn:aws:s3:::bucket123/*"
      ],
      "Condition": {
        "NotIpAddress": {
          "aws:VpcSourceIp": [
            "172.31.20.56/32"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

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


aws s3api get-bucket-policy \
--bucket bucket123

インスタンス1以外で実行している場合、エラーになる


-- 7. S3アクセス確認(バケットポリシー追加後)
aws s3 ls s3://bucket123 --recursive

インスタンス1はアクセスできるが、その他のインスタンスからアクセスできない

 

 

-- 8. クリーンアップ


-- バケット削除
aws s3 rb s3://bucket123 --force
aws s3 ls


-- S3ゲートウェイエンドポイントの削除
aws ec2 describe-vpc-endpoints

aws ec2 delete-vpc-endpoints \
--vpc-endpoint-ids vpce-33333333333333333

-- インスタンス削除

aws ec2 describe-instances

aws ec2 terminate-instances \
--instance-ids i-44444444444444444

aws ec2 terminate-instances \
--instance-ids i-55555555555555555