headBucket method
You can use this operation to determine if a bucket exists and if you have
permission to access it. The action returns a 200 OK HTTP
status code if the bucket exists and you have permission to access it. You
can make a HeadBucket call on any bucket name to any Region
in the partition, and regardless of the permissions on the bucket, you
will receive a response header with the correct bucket location so that
you can then make a proper, signed request to the appropriate Regional
endpoint.
- Authentication and authorization
-
General purpose buckets - Request to public buckets that grant the
s3:ListBucket permission publicly do not need to be signed. All other
HeadBucketrequests must be authenticated and signed by using IAM credentials (access key ID and secret access key for the IAM identities). All headers with thex-amz-prefix, includingx-amz-copy-source, must be signed. For more information, see REST Authentication.Directory buckets - You must use IAM credentials to authenticate and authorize your access to the
HeadBucketAPI operation, instead of using the temporary security credentials through theCreateSessionAPI operation.Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.
- Permissions
-
-
General purpose bucket permissions - To use this operation, you
must have permissions to perform the
s3:ListBucketaction. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see Managing access permissions to your Amazon S3 resources in the Amazon S3 User Guide. -
Directory bucket permissions - You must have the
s3express:CreateSessionpermission in theActionelement of a policy. If no session mode is specified, the session will be created with the maximum allowable privilege, attemptingReadWritefirst, thenReadOnlyifReadWriteis not permitted. If you want to explicitly restrict the access to be read-only, you can set thes3express:SessionModecondition key toReadOnlyon the bucket.For more information about example bucket policies, see Example bucket policies for S3 Express One Zone and Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone in the Amazon S3 User Guide.
-
General purpose bucket permissions - To use this operation, you
must have permissions to perform the
- HTTP Host header syntax
-
Directory buckets - The HTTP Host header syntax is
Bucket-name.s3express-zone-id.region-code.amazonaws.com.
May throw NotFound.
Parameter bucket :
The bucket name.
Directory buckets - When you use this operation with a directory
bucket, you must use virtual-hosted-style requests in the format
Bucket-name.s3express-zone-id.region-code.amazonaws.com.
Path-style requests are not supported. Directory bucket names must be
unique in the chosen Zone (Availability Zone or Local Zone). Bucket names
must follow the format
bucket-base-name--zone-id--x-s3 (for example,
amzn-s3-demo-bucket--usw2-az1--x-s3). For information
about bucket naming restrictions, see Directory
bucket naming rules in the Amazon S3 User Guide.
Access points - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form AccessPointName-AccountId.s3-accesspoint.Region.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see Using access points in the Amazon S3 User Guide.
Object Lambda access points - When you use this API operation with
an Object Lambda access point, provide the alias of the Object Lambda
access point in place of the bucket name. If the Object Lambda access
point alias in a request is not valid, the error code
InvalidAccessPointAliasError is returned. For more
information about InvalidAccessPointAliasError, see List
of Error Codes.
S3 on Outposts - When you use this action with S3 on Outposts, you
must direct requests to the S3 on Outposts hostname. The S3 on Outposts
hostname takes the form
AccessPointName-AccountId.outpostID.s3-outposts.Region.amazonaws.com.
When you use this action with S3 on Outposts, the destination bucket must
be the Outposts access point ARN or the access point alias. For more
information about S3 on Outposts, see What
is S3 on Outposts? in the Amazon S3 User Guide.
Parameter expectedBucketOwner :
The account ID of the expected bucket owner. If the account ID that you
provide does not match the actual owner of the bucket, the request fails
with the HTTP status code 403 Forbidden (access denied).
Implementation
Future<HeadBucketOutput> headBucket({
required String bucket,
String? expectedBucketOwner,
}) async {
final headers = <String, String>{
if (expectedBucketOwner != null)
'x-amz-expected-bucket-owner': expectedBucketOwner.toString(),
};
final $result = await _protocol.sendRaw(
method: 'HEAD',
requestUri: '/${Uri.encodeComponent(bucket)}',
headers: headers,
exceptionFnMap: _exceptionFns,
);
final $elem = await _s.xmlFromResponse($result);
return HeadBucketOutput(
accessPointAlias: _s.extractHeaderBoolValue(
$result.headers, 'x-amz-access-point-alias'),
bucketArn:
_s.extractHeaderStringValue($result.headers, 'x-amz-bucket-arn'),
bucketLocationName: _s.extractHeaderStringValue(
$result.headers, 'x-amz-bucket-location-name'),
bucketLocationType: _s
.extractHeaderStringValue(
$result.headers, 'x-amz-bucket-location-type')
?.let(LocationType.fromString),
bucketRegion:
_s.extractHeaderStringValue($result.headers, 'x-amz-bucket-region'),
);
}