Amazon Simple Storage Service (Amazon S3) のパブリックアクセスをブロックする設定をオンまたはオフにすると、Amazon S3 の運用にどのような影響があるのか知りたいです。
解決方法
使用可能な設定
Amazon S3 ブロックパブリックアクセス設定にはさまざまなレベルの制限があり、設定可能な 4 つのオプションで適用できます。
- 新しいアクセスコントロールリスト (ACL) で許可されたパブリックアクセスをブロックする: Amazon S3 は、新しく追加されたバケットまたはオブジェクトに適用するパブリックアクセス権限をブロックします。S3 では、既存のバケットやオブジェクトに対して新しいパブリックアクセス ACL を作成することも禁止しています。この設定は、ACL を使用して S3 リソースへのパブリックアクセスを許可する既存の権限を変更しません。
- 任意の ACL を通じて許可されたパブリックアクセスをブロック:S3 は、バケットとオブジェクトへのパブリックアクセスを許可するすべての ACL を無視します。
- 新しいパブリックバケットまたはアクセスポイントポリシーによって許可されたパブリックアクセスをブロックする: S3 は、バケットとオブジェクトへのパブリックアクセスを許可する新しいバケットポリシーとアクセスポイントポリシーをブロックします。この設定は、S3 リソースへのパブリックアクセスを許可する既存のポリシーを変更しません。
- パブリックバケットまたはアクセスポイントポリシーを通じて付与されたパブリックアクセスとクロスアカウントアクセスをブロックします。 S3 は、バケットやオブジェクトへのパブリックアクセスを許可するポリシーが設定されているバケットやアクセスポイントのパブリックアクセスやクロスアカウントアクセスを無視します。
1 番目と 3 番目のオプションは、パブリックアクセスを許可する S3 バケットポリシーまたはオブジェクト ACL が新たに更新されないようにするためのものです。これらの設定は、現在パブリックアクセスを許可している既存のポリシーや ACL を変更しません。
2 番目と 4 番目のオプションは、パブリックアクセスを許可する新規および既存のバケットポリシーまたはオブジェクト ACL を防止または無視することを目的としています。
詳しくは、「公開アクセスをブロックする設定」を参照してください。
S3 ブロックパブリックアクセス設定のオン/オフ
注:2023 年 4 月以降、新しく作成された S3 バケットはすべて S3 ブロックパブリックアクセスがデフォルトでオンになっています。
この設定は、アカウントレベル、バケットレベル、またはその両方で有効にできます。
バケットのブロック公開設定をオンにすると、次のようになります。
- 匿名で認証されていないリクエストは、例外なく拒否されます。ウェブブラウザを使用してアクセスされた S3 URI と URL は、対応するリクエスト ID とともに HTTP ** 403 アクセス拒否エラー**を返します。
- S3 オブジェクトに適用されたパブリック ACL はすべて無視されるため、この ACL を使用してオブジェクトにアクセスするユーザーのアクセスは取り消されます。
バケットのブロック公開設定をオフにすると、次のようになります。
- パブリックバケットポリシーまたはパブリック ACL アクセスが設定されたオブジェクトに、そのオブジェクトのパスへのリンクがあれば、インターネット上の誰でもアクセスできるようになりました。これには、ウェブトロール業者や権限のないユーザーも含まれます。
- LIST や GET などの S3 リクエストに関連するコストが増加する可能性があります。パブリックバケットまたはオブジェクトに対して行われた匿名リクエストは、バケット所有者に請求されます。
- 適用可能な AWS Config ルールと S3 用 AWS アイデンティティおよびアクセス管理 (IAM) アクセスアナライザーにより、バケットの公開ステータスに関する警告が生成されます。これらのルールを順守するには、公開アクセスをブロックする設定をオンにする必要があります。
パブリックアクセスをブロックする設定をオフにすると、S3 バケットの Access 列にコンソールに次のいずれかが表示されます。
- オブジェクトは公開できます: バケットは公開されていませんが、適切な権限を持っている人なら誰でもオブジェクトへの公開アクセスを許可できます。
- 非公開のバケットとオブジェクト: バケットとオブジェクトにはパブリックアクセスはありません。
- このアカウントの権限のあるユーザーのみ: パブリックアクセスを許可するポリシーがあるため、アクセスは IAM アカウントのユーザーとロール、および AWS サービスプリンシパルに限定されます。
- パブリック: 全員が 1 つ以上のリストオブジェクト、書き込みオブジェクト、読み取り/書き込み権限にアクセスできます。
必要な権限
S3 ブロックパブリックアクセス設定をオンまたはオフにするには、IAM ロールまたはユーザーに次の S3 権限が必要です。
- アカウントレベル:S3: PutAccountPublicAccessBlock
- バケットレベル:S3: PutBucketPublicAccessBlock
現在の S3 ブロックパブリックアクセス設定を表示するには、IAM ロールまたはユーザーに次の S3 権限が必要です。
- アカウントレベル:**S3: GetAccountPublicAccessBlock **
- バケットレベル:**S3: GetBucketPublicAccessBlock **
詳細については、「権限」を参照してください。
エラーのトラブルシューティング
S3 バケットの「パブリックアクセスのブロック」設定をオンまたはオフにしようとすると、「アクセス拒否」エラーが表示されることがあります。このエラーをトラブルシューティングするには、次の点を確認してください:
- サービスコントロールポリシーに、アカウントレベルまたはバケットレベルの S3 Block Public Access 設定の変更を禁止する組織ポリシーが含まれていないことを確認します。s3:PutBucketPublicAccessBlockアクションとs3:PutBucketPublicAccessBlockアクションの拒否ステートメントを確認します。
- IAM ユーザーまたはロールにリソースに必要な権限があることを確認します。
- 設定を変更する S3 バケットに既存のパブリック S3 バケットポリシー (**Principal:「\ *」**の付いたバケットポリシーステートメント) がないことを確認します。
ユーザーの識別
バケットまたはアカウントの設定を変更した IAM エンティティを特定するには、AWS CloudTrail イベントを使用してください。CloudTrail コンソールでは、これらのイベントを次の EventNames にフィルタリングできます。
- アカウントレベルについては、PutAccountPublicAccessBlock を探してください。
- バケットレベルについては、PutBucketPublicAccessBlockを探してください。
発信者の ARN を特定するには、ログの **userIdentity ** フィールドと照合してください。
"userIdentity": {
"type": "AssumedRole",
"principalId": "[AccountID]:[RoleName]",
"arn": "arn:aws:sts::[AccountID]:assumed-role/[RoleName]/[RoleSession]",
次に、確認したい S3 バケットリソースを確認します。
"requestParameters": {
"publicAccessBlock": "",
"bucketName": "[BucketName]"
その他の考慮事項
- 広い IP アドレス範囲 (0.0.0.0/1 など) の aws: SourceIP 条件キーへのアクセスを許可するバケットポリシーは、パブリックと評価されます。
- IAM Access Analyzer for S3 を使用して、バケット ACL、バケットポリシー、またはパブリックアクセスを許可するアクセスポイントポリシーを含むバケットを確認できます。
- バケットの S3 コンソールの Access 列に Error と表示されている場合、IAM ロールまたはユーザーには、バケットとそのパブリックアクセス設定を一覧表示するための十分な権限がありません。ユーザーまたはロールポリシーに次の権限を必ず追加してください。
s3:GetAccountPublicAccessBlock
s3:GetBucketPublicAccessBlock
s3:GetBucketPolicyStatus
s3:GetBucketLocation
s3:GetBucketAcl
s3:ListAccessPoints
s3:ListAllMyBuckets
- Amazon S3 は、オブジェクト単位でのパブリックアクセスのブロック設定をサポートしていません。
- ブロックパブリックアクセス設定をアカウントに適用すると、その設定はグローバルにすべての AWS リージョンに適用されます。設定はすべてのリージョンですぐにまたは同時に有効になるわけではありませんが、最終的にはすべてのリージョンに反映されます。