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バケットポリシー追加
{
"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