Amazon Simple Strage service (Amazon S3) を使用して静的ウェブサイトをホストしています。アクセスを特定の Amazon Vertual Private Cloudド (Amazon VPC) のみに制限するバケットポリシーを添付しました。ただし、パブリック IP アドレスからの Web サイトには引き続きアクセスできます。
解像度
問題をトラブルシューティングする前に、必ず次の手順を完了してください:
- Web ブラウザまたはプロキシキャッシュをクリアすると、最新の設定が表示されます。
- バケットにアクセスする Amazon Elastic Compute Cloud (Amazon EC2) インスタンスがバケットと同じ AWS リージョンにあることを確認します。
- VPC エンドポイントを、使用する EC2 インスタンスのルートテーブルに関連付けます。このようにして、トラフィックはバケットポリシーで参照されている VPC ID に関連付けられます。
バケットポリシーを確認
バケットポリシーで VPC からのバケットへのアクセスが許可されていることを確認します。これを確認するには、バケットポリシーのステートメントを確認してください。たとえば、次のバケットポリシーステートメントでは、リクエストが**vpc-id123456 からのものであることを条件に s3: GetObject**を許可します。
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": \[{
"Sid": "Access-to-Trusted-VPC-only",
"Effect": "Allow",
"Principal": "\*",
"Action": "s3:GetObject\*",
"Resource": "arn:aws:s3:::awsexamplebucket/\*",
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-id123456"
}
}
}\]
}
**メモ:**静的ウェブサイトホスティングでは、認証されていない (匿名の) リクエストを許可します。ただし、ユーザーが認証すると、そのユーザーの資格情報に基づいてアクセスを許可できます。たとえば、ユーザーが Amazon S3 へのフルアクセス権を持つ AWS ID およびアクセス管理 (IAM) ロールで認証するとします。このユーザーは、以下のバケットポリシーにかかわらず、引き続き VPC の外部でオブジェクトをダウンロードできます。より制限の厳しいバケットポリシーについては、「特定の VPCへのアクセスの制限」を参照してください。特定の VPC へのアクセスを制限すると、その VPC 以外からのリクエストに対しても、管理者や AWS アカウントのルートユーザーにもアクセスが拒否されます。
オブジェクトアクセス制御リスト (ACL) を確認する
バケットポリシーが正しいことを確認したら、パブリックアクセスを許可するオブジェクト ACL があるかどうかを確認します。一部のオブジェクト ACL がパブリックアクセスを許可していて、その ACL をオーバーライドしたい場合は、次のいずれかのアクションを実行してください:
- 個々のバケットまたは AWS アカウントのパブリックアクセス設定を行います。
- バケットポリシーに明示的な拒否ステートメントを追加します。
オブジェクト ACL を上書きするには、Amazon S2コンソールを使用して個々のバケットのパブリックアクセス設定またはアカウントのパブリックアクセス設定を設定します。次のオプションを選択します:
- _新しい_アクセス制御リスト (ACL)** によって付与されたバケットやオブジェクトへのパブリックアクセスを**ブロックする
- _あらゆる_アクセス制御リスト (ACL)** を通じて付与されたバケットやオブジェクトへのパブリックアクセスを**ブロックします
**メモ:**また、AWS Command Line Interface (AWS CLI)、AWS SDK、または Amazon S3 REST API を使用してバケットのパブリックアクセス設定を構成することもできます。詳細については、「Amazon S3 ストレージへのパブリックアクセスのブロック」を参照してください。
バケットポリシーを使用してオブジェクト ACL を上書きするには、リクエストが VPC からのものでない場合にアクションを明示的に拒否するステートメントを追加します。たとえば、次のバケットポリシーには、リクエストがvpc-id123456 からのものでない場合にs3: GetObject を明示的に拒否するステートメントが含まれています。
**警告:**この例のバケットポリシーには明示的な拒否ステートメントが含まれているため、ポリシーを保存する前に、明示的なアクセス拒否のパラメータを確認してください。誤ってロックアウトされた場合は、「自分の Amazon S3 バケットへのアクセスを全員に誤って拒否してしまいました」を参照してください。アクセスを回復するにはどうしたらいいですか?
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": \[{
"Sid": "Access-to-Trusted-VPC-only",
"Effect": "Allow",
"Principal": "\*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket/\*",
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-id123456"
}
}
},
{
"Sid": "Deny-Access-Except-For-Trusted-VPC",
"Effect": "Deny",
"Principal": "\*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::awsexamplebucket/\*",
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-id123456"
}
}
}
\]
}
関連情報
AWS ポリシージェネレーター