/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.S3.Model
{
///
/// Container for the parameters to the PutBucket operation.
/// Creates a new S3 bucket. To create a bucket, you must register with Amazon S3 and
/// have a valid Amazon Web Services Access Key ID to authenticate requests. Anonymous
/// requests are never allowed to create buckets. By creating the bucket, you become the
/// bucket owner.
///
///
///
/// Not every string is an acceptable bucket name. For information about bucket naming
/// restrictions, see Bucket
/// naming rules.
///
///
///
/// If you want to create an Amazon S3 on Outposts bucket, see Create
/// Bucket.
///
///
///
/// By default, the bucket is created in the US East (N. Virginia) Region. You can optionally
/// specify a Region in the request body. You might choose a Region to optimize latency,
/// minimize costs, or address regulatory requirements. For example, if you reside in
/// Europe, you will probably find it advantageous to create buckets in the Europe (Ireland)
/// Region. For more information, see Accessing
/// a bucket.
///
///
///
/// If you send your create bucket request to the s3.amazonaws.com
endpoint,
/// the request goes to the us-east-1 Region. Accordingly, the signature calculations
/// in Signature Version 4 must use us-east-1 as the Region, even if the location constraint
/// in the request specifies another Region where the bucket is to be created. If you
/// create a bucket in a Region other than US East (N. Virginia), your application must
/// be able to handle 307 redirect. For more information, see Virtual
/// hosting of buckets.
///
/// - Access control lists (ACLs)
-
///
///
/// When creating a bucket using this operation, you can optionally configure the bucket
/// ACL to specify the accounts or groups that should be granted specific permissions
/// on the bucket.
///
///
///
/// If your CreateBucket request includes the
BucketOwnerEnforced
value for
/// the x-amz-object-ownership
header, your request can either not specify
/// an ACL or specify bucket owner full control ACLs, such as the bucket-owner-full-control
/// canned ACL or an equivalent ACL expressed in the XML format. For more information,
/// see Controlling
/// object ownership in the Amazon S3 User Guide.
///
///
///
/// There are two ways to grant the appropriate permissions using the request headers.
///
/// -
///
/// Specify a canned ACL using the
x-amz-acl
request header. Amazon S3 supports
/// a set of predefined ACLs, known as canned ACLs. Each canned ACL has a predefined
/// set of grantees and permissions. For more information, see Canned
/// ACL.
///
/// -
///
/// Specify access permissions explicitly using the
x-amz-grant-read
, x-amz-grant-write
,
/// x-amz-grant-read-acp
, x-amz-grant-write-acp
, and x-amz-grant-full-control
/// headers. These headers map to the set of permissions Amazon S3 supports in an ACL.
/// For more information, see Access
/// control list (ACL) overview.
///
///
///
/// You specify each grantee as a type=value pair, where the type is one of the following:
///
/// -
///
///
id
– if the value specified is the canonical user ID of an Amazon Web
/// Services account
///
/// -
///
///
uri
– if you are granting permissions to a predefined group
///
/// -
///
///
emailAddress
– if the value specified is the email address of an Amazon
/// Web Services account
///
///
///
/// Using email addresses to specify a grantee is only supported in the following Amazon
/// Web Services Regions:
///
/// -
///
/// US East (N. Virginia)
///
///
-
///
/// US West (N. California)
///
///
-
///
/// US West (Oregon)
///
///
-
///
/// Asia Pacific (Singapore)
///
///
-
///
/// Asia Pacific (Sydney)
///
///
-
///
/// Asia Pacific (Tokyo)
///
///
-
///
/// Europe (Ireland)
///
///
-
///
/// South America (São Paulo)
///
///
///
/// For a list of all the Amazon S3 supported Regions and endpoints, see Regions
/// and Endpoints in the Amazon Web Services General Reference.
///
///
///
/// For example, the following x-amz-grant-read
header grants the Amazon
/// Web Services accounts identified by account IDs permissions to read object data and
/// its metadata:
///
///
///
/// x-amz-grant-read: id="11112222333", id="444455556666"
///
///
///
/// You can use either a canned ACL or specify access permissions explicitly. You cannot
/// do both.
///
/// - Permissions
-
///
///
/// In addition to
s3:CreateBucket
, the following permissions are required
/// when your CreateBucket includes specific headers:
///
/// -
///
/// ACLs - If your
CreateBucket
request specifies ACL permissions
/// and the ACL is public-read, public-read-write, authenticated-read, or if you specify
/// access permissions explicitly through any other ACL, both s3:CreateBucket
/// and s3:PutBucketAcl
permissions are needed. If the ACL the CreateBucket
/// request is private or doesn't specify any ACLs, only s3:CreateBucket
/// permission is needed.
///
/// -
///
/// Object Lock - If
ObjectLockEnabledForBucket
is set to true in
/// your CreateBucket
request, s3:PutBucketObjectLockConfiguration
/// and s3:PutBucketVersioning
permissions are required.
///
/// -
///
/// S3 Object Ownership - If your CreateBucket request includes the the
x-amz-object-ownership
/// header, s3:PutBucketOwnershipControls
permission is required.
///
///
///
/// The following operations are related to CreateBucket
:
///
///
///
public partial class PutBucketRequest : PutWithACLRequest
{
private string bucketName;
private S3Region bucketRegion;
private string bucketRegionName;
private bool useClientRegion = true;
private S3CannedACL cannedAcl;
private bool? _objectLockEnabledForBucket;
private ObjectOwnership _objectOwnership;
///
/// The canned ACL to apply to the bucket.
///
///
public S3CannedACL CannedACL
{
get { return this.cannedAcl; }
set { this.cannedAcl = value; }
}
// Check to see if ACL property is set
internal bool IsSetCannedACL()
{
return cannedAcl != null && cannedAcl != S3CannedACL.NoACL;
}
///
/// If set to true the bucket will be created in the same region
/// as the configuration of the AmazonS3 client.
/// If PutBucketRequest.BucketRegion or PutBucketRequest.BucketRegionName are set they take precedence over
/// this property.
/// Default: true.
///
public bool UseClientRegion
{
get { return this.useClientRegion; }
set
{
this.useClientRegion = value;
}
}
///
/// The name of the bucket to be created.
///
public string BucketName
{
get { return this.bucketName; }
set { this.bucketName = value; }
}
// Check to see if BucketName property is set
internal bool IsSetBucketName()
{
return this.bucketName != null;
}
///
/// The region locality for the bucket.
///
///
/// When set, this will determine where your data will
/// reside in S3. Refer
/// for a list of possible values.
///
public S3Region BucketRegion
{
get { return this.bucketRegion; }
set { this.bucketRegion = value; }
}
// Check to see if BucketRegion property is set
internal bool IsSetBucketRegion()
{
return this.bucketRegion != null;
}
///
/// The bucket region locality expressed using the name of the region.
/// When set, this will determine where your data will reside in S3.
/// Valid values: us-east-1, us-west-1, us-west-2, eu-west-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, sa-east-1
///
public string BucketRegionName
{
get { return this.bucketRegionName; }
set
{
this.bucketRegionName = value;
}
}
// Check to see if BucketRegionName property is set
internal bool IsSetBucketRegionName()
{
return !string.IsNullOrEmpty(this.bucketRegionName);
}
///
/// Gets and sets the property ObjectLockEnabledForBucket.
///
/// Specifies whether you want S3 Object Lock to be enabled for the new bucket.
///
///
public bool ObjectLockEnabledForBucket
{
get { return this._objectLockEnabledForBucket.GetValueOrDefault(); }
set { this._objectLockEnabledForBucket = value; }
}
// Check to see if ObjectLockEnabledForBucket property is set
internal bool IsSetObjectLockEnabledForBucket()
{
return this._objectLockEnabledForBucket.HasValue;
}
///
/// Gets and sets the property ObjectOwnership.
///
public ObjectOwnership ObjectOwnership
{
get { return this._objectOwnership; }
set { this._objectOwnership = value; }
}
// Check to see if ObjectOwnership property is set
internal bool IsSetObjectOwnership()
{
return this._objectOwnership != null;
}
}
}