Amazon S3 にファイルをアップロードしようとすると「403 禁止」エラーが表示されるのはなぜですか?

所要時間2分
0

Amazon S3 コンソールを使用して Amazon Simple Storage Service (Amazon S3) バケットにファイルをアップロードしようとしています。しかし、「403 禁止」エラーが表示されます。

簡単な説明

「403 禁止」エラーは、次の理由で発生する可能性があります。

  • s3:PutObject でオブジェクトを追加したり、s3:PutObjectAcl でオブジェクトの ACL を変更したりするための権限がありません。
  • AWS Key Management Service (AWS KMS) キーを使用する権限がありません。
  • バケットポリシーに明示的な拒否ステートメントがあります。
  • Amazon S3 パブリックアクセスブロックが有効になっています。
  • AWS Organizations のサービスコントロールポリシーで Amazon S3 へのアクセスが許可されていません。

解決策

s3:PutObject または s3:PutObjectAcl の権限を確認する

以下の手順に従ってください。

  1. AWS ID およびアクセス管理 (IAM) コンソールを開きます。
  2. ユーザーロールなど、バケットへのアクセスに使用される ID に移動します。ID の名前を選択します。
  3. [権限] タブを選択して各ポリシーを展開すると、その JSON ポリシードキュメントが表示されます。
  4. JSON ポリシードキュメントで、Amazon S3 アクセスに関連するポリシーを検索してください。次に、バケットに対する s3:PutObject または s3:PutObjectAcl アクションの権限があることを確認します。

AWS KMS キーを使用する許可を取得する

AWS KMS で暗号化されたオブジェクトをアップロードするには、AWS KMS アクションを実行する権限が必要です。少なくとも kms:Decrypt と kms:GenerateDataKey アクションを実行できる必要があります。

**重要:**別のアカウントのバケットにオブジェクトをアップロードする場合、AWS マネージドキー aws/S3 をデフォルトの暗号化キーとして使用することはできません。これは、AWS マネージドキーポリシーを変更できないためです。

バケットポリシーに明示的な拒否ステートメントがないか確認する

以下の手順に従ってください。

  1. Amazon S3 コンソールを開きます
  2. バケットのリストから、ファイルをアップロードする先のバケットを開きます。
  3. [権限] タブを選択します。
  4. [バケットポリシー] を選択します。
  5. "Effect": "Deny" を含むステートメントを探します。
  6. これらのステートメントで、バケットへのアップロードを妨げていないことを確認してください。

**重要:**バケットポリシーを "Effect": "Deny" を使用して保存する前に、S3 バケットへのアクセスを拒否するステートメントがないか確認してください。ロックアウトされた場合は、「誤って全ユーザーの Amazon S3 バケットへのアクセスを拒否してしまいました。アクセスを回復するにはどうすればよいですか?」をご覧ください。

次のステートメント例では、アップロードリクエストで ARN が arn:aws:kms:us-east-1:111122223333:key と一致する AWS KMS キーを使用してオブジェクトを暗号化しない限り、example-buckets3:PutObject へのアクセスを明示的に拒否します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::example-bucket/*",
      "Condition": {
        "StringNotLikeIfExists": {
          "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
        }
      },
      "Principal": "*"
    }
  ]
}

リクエストからパブリック ACL を削除するか、S3 ブロックパブリックアクセスを無効にする

PUT リクエストで public-readauthenticated-read などのパブリック ACL を渡すと、S3 オブジェクトがパブリックになります。このアカウントまたはバケットで S3 ブロックパブリックアクセス機能がオンになっている場合、アップロードリクエストは拒否されます。

: 必要でない状況では、オブジェクトをパブリックにすることはベストプラクティスではありません。

オブジェクトをパブリックオブジェクトとして正常にアップロードするには、必要に応じて S3 ブロックアクセス機能を変更します。オブジェクトをパブリックにする必要がない状況では、前述のパブリック ACL を PUT リクエストから削除してください。

アカウントレベルでの S3 ブロックパブリックアクセスの設定については、「アカウントのブロックパブリックアクセスの設定」を参照してください。バケットレベルでの設定については、「S3 バケットのブロックパブリックアクセスの設定」を参照してください。また、「パブリックの意味」も参照してください。

AWS Organizations のサービスコントロールポリシーを確認する

AWS Organizations を使用している場合は、サービスコントロールポリシーが S3 アクションを明示的に拒否しているかどうかを確認してください。必要に応じてポリシーを変更してください。

関連情報

Amazon S3 からの 403 アクセス拒否エラーのトラブルシューティング方法を教えてください。

Amazon S3 でバケットポリシーを変更しようとしたときに、「バケットポリシーを編集する権限がありません」というエラーをトラブルシューティングする方法を教えてください。

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ