バケットポリシーの設定にミスがあり、Amazon Simple Storage Service (Amazon S3) バケットへのすべてのユーザーのアクセスが拒否されました。
簡単な説明
S3 バケットへのアクセスを復旧するには、バケットポリシーの条件を満たすようにアクセスステップを変更します。バケットポリシーの条件を満たせない場合は、AWS Organizations 管理アカウントを使用してください。AWS Organizations を利用できない場合は、ルートユーザーの AWS アカウントを使用してください。AWS Organizations を使用してルートアクセスを一元化するのがベストプラクティスです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
重要: セキュリティとプライバシー上の理由から、AWS サポートはお客様のデータにアクセスできず、お客様に代わってバケットポリシーにアクセスすることもできません。お客様が S3 バケットへのアクセスを復旧できない場合、AWS サポートが復旧することはできません。データセキュリティの詳細については、「責任共有モデル」を参照してください。
バケットポリシーの条件を満たすようにアクセスステップを変更する
バケットポリシーの条件を満たすようにアクセスステップを変更できれば、すぐにアクセスを復旧できます。その場合は、AWS Organizations やルートユーザーアカウントを使用する必要はありません。アクセスできるようになったら、ポリシーを変更して、自分や他のユーザーのアクセスをブロックしていた条件を削除します。
バケットへのアクセスを復旧するには、次の手順を実行します。
- バケットポリシーのコピーを取得します。これは、AWS CloudTrail レコード、まだアクセスできるチームメンバー、または AWS サポートの支援を通じて取得できます。
- 満たしていないバケットポリシーの条件がある場合は、ポリシーが true と評価されるまで必要なアクションをすべて実行します。S3 バケットへのアクセスをブロックする可能性があるバケットポリシー条件の例と、アクセスするためのアクションの例を次に示します。
| 条件タイプ | アクション |
|---|
| IP アドレス許可リスト (aws:SourceIP) | 許可された IP アドレスから接続するか、VPN を使用します。 |
| Amazon Virtual Private Cloud (Amazon VPC) (aws:sourceVpc) | 指定された Amazon VPC 内からリクエストを行います。 |
| Amazon VPC エンドポイント (aws:sourceVpce) | 正しいエンドポイントでリクエストを行います。 |
| 多要素認証 (MFA) 要件 (aws:MultiFactorAuthPresent) | MFA 認証を有効にして使用します。 |
| Deny ステートメントの条件ブロックが不足している | ルートユーザーアクセスを使用します。 |
- アクセスを復旧した後、バケットのロックアウトの原因となった条件を特定し、削除します。
- 変更をテストし、アクセス制御のレベルが正しいことを確認します。
AWS Organizations のメンバーアカウント
バケットポリシーの条件を満たせない場合は、AWS Organizations アカウントを使用して、誤ってロックされた S3 バケットへのアクセスを復旧してください。
S3 バケットへのアクセスを復旧するには、メンバーアカウントで特権アクションを実行し、設定ミスのあるバケットポリシーを削除します。次に、有効なバケットポリシーを追加します。
詳細については、「Centrally managing root access for customers using AWS Organizations」(AWS Organizations を使用している顧客のルートアクセスを一元的に管理する) を参照してください。
バケットポリシーの条件を満たせない場合や AWS Organizations を利用できない場合の対処方法
バケットポリシーの条件を満たさず、AWS Organizations を使用できない場合は、ロックアウトの原因となったバケットポリシー条件を削除してください。次の手順を実行します。
- AWS アカウントのルートユーザーとして AWS マネジメントコンソールにサインインします。
注: ルートユーザーアクセスが必要です。バケットポリシー条件を削除するには、管理者アクセスだけでは不十分です。
重要: アカウントのルートユーザーは、日常業務には使用しないでください。ルートユーザーの認証情報は、ルートユーザーとしてサインインする必要があるタスクにのみ使用してください。ルートユーザーの認証情報は、管理者アクセス許可を持つ AWS Identity and Access Management (IAM) ユーザーまたはロールとは別のものです。Allow または Deny アクセス許可を含む IAM ポリシーは、ルートユーザーアカウントにアタッチできません。セキュリティ上の観点から、アカウント管理者は、アカウントのルートユーザー用のパスワードを定期的に変更することをお勧めします。
- Amazon S3 コンソールを開きます。
- 正しく設定されていないバケットに移動します。
- [Permissions] (アクセス許可) タブをクリックします。
- [Bucket Policy] (バケットポリシー) で [Edit] (編集) を選択します。
- バケットポリシーで、バケットのロックアウトの原因となった条件を特定し、削除します。
- [Save Changes] (変更を保存) をクリックします。
- AWS マネジメントコンソールからサインアウトします。
アカウントのルートユーザーとしてバケットポリシーを変更した後は、バケットへのアクセス許可を持つ IAM ユーザーは修正されたバケットポリシーを適用できます。詳細については、「Amazon S3 バケットポリシーの例」と「Amazon S3 コンソールを使用したバケットポリシーの追加」を参照してください。
CloudTrail を使用してバケット名とポリシーを特定する
ロックアウト前にバケットに適用したポリシーがわからない場合は、AWS CloudTrail を使用してイベントを確認します。CloudTrail コンソールまたは AWS CLI を使用すると、アカウント内の最近の PutBucketPolicy API アクションを検索できます。
注: CloudTrail イベント履歴には、過去 90 日間のイベントが含まれます。管理イベントログを S3 バケットに送信して、より長いレコードを取得するように CloudTrail を設定できます。90 日以上前の PutBucketPolicy アクションの記録を取得するには、Amazon S3 の CloudTrail ログをクエリする必要があります。
コンソールで CloudTrail を使用するには、次の手順を実行します。
- CloudTrail コンソールを開きます。
- ナビゲーションペインで [Event history] (イベント履歴) を選択します。
- [Event history] (イベント履歴) ページの [Lookup attributes] (ルックアップ属性) で [Event name] (イベント名) を選択します。
- [Enter an event name] (イベント名を入力) 検索ペインで PutBucketPolicy を選択し、Enter キーを押します。
- 最新のイベントを選択し、詳細を確認します。イベントには、バケット名とポリシーを含むリクエストと応答のパラメータが表示されます。
AWS CLI から CloudTrail を使用するには、次の put-bucket-policy コマンドを実行します。
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=PutBucketPolicy --region example-region
注: example-region を実際の AWS リージョンに置き換えてください。