AWS S3 doesObjectExist costs

AWS S3 Java SDK provides a method doesObjectExist() to check if an object exists in S3. What operation does it use internally? Is it GET, LIST, or HEAD ?

My concern is mainly related to its costs. From S3 documentation the costs of US west Oregon are-
PUT, COPY, POST, or LIST Requests $0.005 per 1,000 requests

GET, SELECT and all other Requests $0.0004 per 1,000 requests

Does the cost of doesObjectExist() fall under 1st or 2nd category? Also I was reading somewhere that this operation requires ListBucket and GetObject permissions. So does that mean this operation incurs cost of both the above categories?


Looking at the code, the doesObjectExist() method internally calls getObjectMetadata (link, link).

If you go a little deeper into the code, the actual HTTP request is a HEAD request, so I strongly suspect they are just doing a HEAD on the object itself.

The description of GetObjectMetadataRequest and the HEAD call on the REST API are also similar.

Regarding permissions, you are correct (the excerpt below also comes from the HEAD request on the REST API:

You need the s3:GetObject permission for this operation. For more information, go to Specifying Permissions in a Policy in the Amazon Simple Storage Service Developer Guide. If the object you request does not exist, the error Amazon S3 returns depends on whether you also have the s3:ListBucket permission.

Source: stackoverflow