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 キーを使用します。次のバケットポリシーの例では、アップロードリクエストが vpce-1111111 または vpce-2222222 の VPC エンドポイントからのものでない限り、アップロードのアクセス許可を拒否します。
{
"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": "*"
}
]
}
注: DOC-EXAMPLE-BUCKET はバケットの名前に置き換えます。
前述のポリシーを aws:sourceVpce 条件とともに使用するには、Amazon S3 用の VPC ゲートウェイエンドポイントを作成します。ゲートウェイエンドポイントを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのサブネットのルートテーブルにアタッチします。エンドポイントはバケットと同じ AWS リージョンにある必要があります。
アクセスを特定のプライベート IP アドレスのみに制限する
指定したプライベート IP アドレスからのトラフィックのみを許可するには、バケットポリシーで aws:VpcSourceIp キーを使用します。次のバケットポリシーの例では、アップロードリクエストが 10.1.1.1/32 または 172.1.1.1/32 のプライベート IP アドレスからのものではない場合、アップロードのアクセス許可を拒否します。
{
"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": "*"
}
]
}
注: DOC-EXAMPLE-BUCKET はバケットの名前に置き換えます。
前述のポリシーを aws:VpcSourceIp 条件とともに使用するには、Amazon S3 用の VPC ゲートウェイエンドポイントを作成します。ゲートウェイエンドポイントを EC2 インスタンスのサブネットのルートテーブルにアタッチします。エンドポイントはバケットと同じリージョンにある必要があります。
特定のパブリック IP アドレスまたは IP アドレス範囲のみにアクセスを制限する
指定したパブリック IP アドレスまたは IP アドレス範囲からのトラフィックのみを許可するには、バケットポリシーで aws:SourceIp キーを使用します。次のバケットポリシーの例では、アップロードリクエストが 11.11.11.11/32 または 22.22.22.22/32 の IP アドレスからのものではない場合、バケットへのアップロードアクセス許可を拒否します。
{
"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": "*"
}
]
}
注: DOC-EXAMPLE-BUCKET はバケットの名前に置き換えます。
次のバケットポリシーの例では、アップロードリクエストが 192.168.0.0/24 または 172.16.0.0/24 の IP アドレス範囲からのものでない限り、バケットへのアップロードアクセス許可を拒否します。
{
"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": [
"192.168.0.0/24",
"172.16.0.0/24"
]
}
},
"Principal": "*"
}
]
}
注: DOC-EXAMPLE-BUCKET はバケットの名前に置き換えます。
次の条件ブロックでは、同じ 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 ポリシーまたはバケットポリシー内の別のステートメントを変更することで、ユーザーレベルのアクセス許可を付与できます。
すべての S3 バケットに対するアクセスを制限する
アカウント内のすべての S3 バケットへのアクセスを制限するには、AWS Organizations を通じてサービスコントロールポリシー (SCP) を設定します。