Amazon Simple Storage Service (Amazon S3) バケットへのトラフィックを、特定の Amazon Virtual Private Cloud (Amazon VPC) エンドポイントまたは IP アドレスからのものに制限したいです。
解決策
バケットポリシーを使用して、S3 バケットにアクセスできる VPC エンドポイント、プライベート IP アドレス、パブリック IP アドレスのいずれかを指定します。
警告: これらのサンプルバケットポリシーでは、許可された VPC エンドポイントまたは IP アドレス外部の特定のリクエストに対するアクセスを明示的に拒否します。バケットポリシーを評価して、コンソールに関連するリクエストが影響を受けるかどうかを判断します。
ポリシーですべての S3 アクションへのアクセスが拒否されている場合、バケットからロックアウトされます。バケットポリシーを保存する前に、必ず確認してください。バケットからロックアウトされた場合は、「誤って全員の Amazon S3 バケットへのアクセスを拒否した後に、アクセスを回復する方法を教えてください」を参照してください。
特定の VPC エンドポイントへのアクセスを制限する
指定した VPC エンドポイントからのトラフィックのみを許可するには、バケットポリシーで aws:SourceVpce キーを使用します。次のバケットポリシーの例では、アップロードリクエストが VPC エンドポイント vpce-1111111 または vpce-2222222 からのものでない限り、アップロードのアクセス許可を拒否します。
{
"Id": "VPCe",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VPCe",
"Action": "s3:PutObject",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": [
"vpce-1111111",
"vpce-2222222"
]
}
},
"Principal": "*"
}
]
}
上記のポリシーを aws:sourceVpce の条件で使用するには、Amazon S3 用の VPC エンドポイントを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのサブネットのルートテーブルにアタッチします。エンドポイントはバケットと同じ AWS リージョンにある必要があります。
アクセスを特定のプライベート IP アドレスのみに制限する
指定したプライベート IP アドレスからのトラフィックのみを許可するには、バケットポリシーで aws:VpcSourceIp キーを使用します。次のバケットポリシーの例では、アップロードリクエストがプライベート IP アドレス 10.1.1.1/32 または 172.1.1.1/32 からのものではない場合、アップロードのアクセス許可を拒否します。
{
"Id": "VpcSourceIp",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VpcSourceIp",
"Action": "s3:PutObject",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"NotIpAddress": {
"aws:VpcSourceIp": [
"10.1.1.1/32",
"172.1.1.1/32"
]
}
},
"Principal": "*"
}
]
}
上記のポリシーを aws:VpcSourceIP の条件で使用するには、Amazon S3 用の VPC ゲートウェイエンドポイントを EC2 インスタンスのサブネットのルートテーブルにアタッチする必要があります。エンドポイントはバケットと同じリージョンにある必要があります。
アクセスを特定のパブリック IP アドレスのみに制限する
指定したパブリック IP アドレスからのトラフィックのみを許可するには、バケットポリシーで aws:SourceIp キーを使用します。次のバケットポリシーの例では、アップロードリクエストがパブリック IP 11.11.11.11/32 または 22.22.22.22/32 からのものではない場合、バケットへのアップロードアクセス許可を拒否します。
{
"Id": "SourceIP",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SourceIP",
"Action": "s3:PutObject",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"11.11.11.11/32",
"22.22.22.22/32"
]
}
},
"Principal": "*"
}
]
}
同じ AWS アカウント内の特定の AWS Identity and Access Management (IAM) エンティティにバケットへのアクセスを許可するには、ポリシーの条件ブロックに aws:PrincipalArn キーを含めます。
"Condition": {
"ArnNotLike": {
"aws:PrincipalArn": [
"arn:aws:iam::123456789012:role/role-name",
"arn:aws:iam::123456789012:user/user-name",
"arn:aws:iam::123456789012:root"
]
}
}
ユーザーが VPC エンドポイントや IP アドレスを使用して S3 アクションを実行できるようにするには、ユーザーレベルのアクセス許可を明示的に付与します。IAM ポリシーまたはバケットポリシー内の別のステートメントを変更することで、ユーザーレベルのアクセス許可を付与できます。