Amazon Simple Storage Service (Amazon S3) リソースへのアクセスを管理するために、S3 Block Public Access を使用したいと考えています。
解決策
Amazon S3 Block Public Access 設定は、複数のアクセスレベルに構成できます。
必要な権限を追加する
Amazon S3 Block Public Access の設定を変更するには、AWS Identity and Access Management (IAM) ユーザーまたはロールに次の権限が必要です。
- s3:PutAccountPublicAccessBlock
- s3:PutBucketPublicAccessBlock
現在の Amazon S3 Block Public Access の設定を確認するには、IAM ユーザーまたはロールに次の権限が必要です。
- s3:GetAccountPublicAccessBlock
- s3:GetBucketPublicAccessBlock
詳細については、「権限」を参照してください。
S3 Block Public Access の有効化または無効化
注: 2023 年 4 月以降、Amazon S3 では作成したすべてのバケットで S3 Block Public Access が自動的に有効になります。
S3 Block Public Access 設定は、アカウントレベル、バケットレベル、またはその両方で構成できます。
S3 Block Public Access を有効化する
S3 Block Public Access を有効にすると、Amazon S3 は次のアクションを実行します。
- 匿名リクエストと未認証リクエストを例外なく拒否します。ウェブブラウザまたは curl を使用して Amazon S3 の URI と URL にアクセスすると、"HTTP 403 Access Denied" エラーが発生します。
- Amazon S3 オブジェクトに適用した新しいパブリック ACL は無視され、S3 バケットとオブジェクトへのユーザーアクセスは取り消されます。
S3 Block Public Access を無効化する
S3 Block Public Access が無効な場合、Amazon S3 はパブリックバケットポリシーまたはパブリック ACL を使用してオブジェクトへのアクセスを許可します。LIST、GET などの Amazon S3 リクエストには、コストが発生する可能性があります。あるユーザーがパブリックバケットまたはオブジェクトに対して匿名リクエストを行った場合、お客様に対する AWS 請求が発生します。AWS Config ルールと IAM Access Analyzer for S3 は、バケットのパブリックステータスに関する警告を生成します。
S3 Block Public Access を無効にすると、Amazon S3 コンソールの [外部アクセスの概要] にアクセス設定が表示されます。
"Access Denied" と S3 バケットエラーのトラブルシューティング
S3 バケットで S3 Block Public Access の有効化または無効化を試行すると、"Access Denied" エラーが発生する場合があります。
この問題をトラブルシューティングするには、次の手順を実行します。
- AWS Organizations のサービスコントロールポリシー (SCP) により、アカウントまたはバケットレベルでの S3 Block Public Access の変更が妨げられていないことを確認します。s3:PutBucketPublicAccessBlock アクションと s3:PutAccountPublicAccessBlock アクションに Deny ステートメントが含まれていないか確認します。
- バケットの [アクセス] に Error と表示される場合は、IAM ポリシーに次の権限を追加し、バケットとパブリックアクセス設定を表示できるようにします。
s3:GetAccountPublicAccessBlock
s3:GetBucketPublicAccessBlock
s3:GetBucketPolicyStatus
s3:GetBucketLocation
s3:GetBucketAcl
s3:ListAccessPoints
s3:ListAllMyBuckets
S3 Block Public Access を変更した IAM ユーザーまたはロールを特定する
AWS CloudTrail イベント履歴を参照し、次の EventNames に関連するイベントを特定します。
- アカウントレベルでは、PutAccountPublicAccessBlock を確認します。
- バケットレベルでは、PutBucketPublicAccessBlock を確認します。
呼び出し元の Amazon リソースネーム (ARN) を特定するには、ログで UserIdentity フィールドを確認します。ログの例:
"userIdentity": {
"type": "AssumedRole",
"principalId": "[AccountID]:[RoleName]",
"arn": "arn:aws:sts::[AccountID]:assumed-role/[RoleName]/[RoleSession]",
次に bucketName を参照し、変更された S3 バケットを特定します。ログの例:
"requestParameters": {
"publicAccessBlock": "",
"bucketName": "[BucketName]"