創建桶
功能說明
用戶通過創建桶操作創建桶(bucket)后才能訪問存儲資源,每個用戶可以擁有多個桶。桶的名稱在媒體存儲范圍內必須是全局唯一的,一旦創建之后無法修改名稱。桶的創建者默認是桶的擁有者,對桶擁有FULL_CONTROL權限,可以通過設置參數的方式為其他用戶配置創建桶的權限。桶的命名規范如下:
使用字母、數字和短橫線(-);
以小寫字母或者數字開頭和結尾;
長度在3-63字節之間。
代碼示例
func CreateBucket(svc *s3.S3) {
bucketName := "<your-bucket-name>"
// 創建桶
createBucketInput := &s3.CreateBucketInput{
Bucket: aws.String(bucketName),
GrantFullControl: aws.String("emailAddress=<user@example.com>"),
}
createBucketOutput, err := svc.CreateBucket(createBucketInput)
if err != nil {
fmt.Printf("Unable to create bucket %s, %v\n", bucketName, err)
}
// 等待桶創建
fmt.Printf("Waiting for bucket %s to be created...\n", bucketName)
err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{
Bucket: aws.String(bucketName),
})
if err != nil {
fmt.Printf("Error occurred while waiting for bucket to be created, %v", createBucketOutput)
}
?
fmt.Printf("Bucket %s successfully created\n", bucketName)
}通過CreateBucketRequest操作:
CreateBucketRequest操作首先生成一個"request.Request"對象,該對象是一個執行CreateBucket操作的請求。通過調用Request對象的Send方法完成創建bucket的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func CreateBucketRequest(svc *s3.S3) {
createBucketInput := &s3.CreateBucketInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, createBucketOutput := svc.CreateBucketRequest(createBucketInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to create bucket. %v\n", err)
} else {
fmt.Println(createBucketOutput)
}
}請求參數
CreateBucketInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| ACL | *string | 配置創建bucket預定義的標準ACL信息,例如private,public-read等 | 否 |
| Bucket | *string | 創建bucket的名稱 | 是 |
| GrantFullControl | *string | 用于自定義用戶對此bucket的READ、WRITE、READ_ACP、WRITE_ACP權限信息 | 否 |
| GrantRead | *string | 用于自定義用戶對此bucket的READ權限信息 | 否 |
| GrantReadACP | *string | 用于自定義用戶對此bucket的READ_ACP權限信息 | 否 |
| GrantWrite | *string | 用于自定義用戶對此bucket的WRITE權限信息 | 否 |
| GrantWriteACP | *string | 用于自定義用戶對此bucket的WRITE_ACP權限信息 | 否 |
獲取桶列表
功能說明
獲取桶列表可以顯示用戶全部可用的桶。
代碼示例
func ListBuckets(svc *s3.S3) {
listBucketsInput := &s3.ListBucketsInput{}
listBucketsOutput, err := svc.ListBuckets(listBucketsInput)
if err != nil {
fmt.Println("Failed to list buckets", err)
}
for _, b := range listBucketsOutput.Buckets {
fmt.Printf("* %s created on %s\n", aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))
}
}通過ListBucketsRequest操作:
ListBucketsRequest操作首先生成一個"request.Request"對象,該對象是一個執行ListBucket操作的請求。通過調用Request對象的Send方法完成列出可用桶的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func ListBucketRequest(svc *s3.S3) {
listBucketsInput := &s3.ListBucketsInput{}
req, listBucketsOutput := svc.ListBucketsRequest(listBucketsInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to list bucket. %v\n", err)
} else {
fmt.Println(listBucketsOutput)
}
}返回結果
ListBucketsOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| Buckets | []*Bucket | bucket信息的數組,包含了每個bucket的名字和創建時間 |
| Owner | *Owner | bucket的擁有者信息 |
判斷桶是否存在
功能說明
通過請求返回結果中的HTTP狀態碼快速判斷桶是否存在,返回狀態碼為200表示桶存在,返回狀態碼為404表示桶不存在。
代碼示例
func HeadBucket(svc *s3.S3) {
headBucketInput := &s3.HeadBucketInput{
Bucket: aws.String("<your-bucket-name>"),
}
_, err := svc.HeadBucket(headBucketInput)
?
if err != nil {
fmt.Printf("fail to head bucket, %v\n", err)
return
}
}通過HeadBucketRequest操作:
HeadBucketRequest操作首先生成一個"request.Request"對象,該對象是一個執行HeadBucket操作的請求。通過調用Request對象的Send方法完成判斷桶是否存在的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func HeadBucketRequest(svc *s3.S3) {
headBucketInput := &s3.HeadBucketInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, _ := svc.HeadBucketRequest(headBucketInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to head bucket. %v\n", err)
}
}請求參數
HeadBucketInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
刪除桶
功能說明
用于刪除桶(bucket),刪除一個桶前,需要先刪除該桶中的全部對象(包括object versions和delete markers)。
代碼示例
func DeleteBucket(svc *s3.S3) {
deleteBucketInput := &s3.DeleteBucketInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
_, err := svc.DeleteBucket(deleteBucketInput)
if err != nil {
fmt.Printf("fail to delete bucket. %v\n", err)
}
}通過DeleteBucketRequest操作:
DeleteBucketRequest操作首先生成一個"request.Request"對象,該對象是一個執行DeleteBucket操作的請求。通過調用Request對象的Send方法完成刪除bucket的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func DeleteBucketRequest(svc *s3.S3) {
deleteBucketInput := &s3.DeleteBucketInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, _ := svc.DeleteBucketRequest(deleteBucketInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to delete bucket. %v\n", err)
}
}請求參數
DeleteBucketInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
列舉桶內對象
功能說明
列舉桶內對象操作用于列出桶中的全部對象,該操作返回最多1000個對象信息,可以通過設置過濾條件來列出桶中符合特定條件的對象信息。
代碼示例
func ListObjects(svc *s3.S3) {
listObjectsInput := &s3.ListObjectsInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
ListObjectsOutput, err := svc.ListObjects(listObjectsInput)
if err != nil {
fmt.Printf("fail to list objects of bucket. %v\n", err)
}
for _, object := range ListObjectsOutput.Contents {
fmt.Println(*object.Key)
}
}通過ListObjectsRequest操作:
ListObjectsRequest操作首先生成一個"request.Request"對象,該對象是一個執行ListObjects操作的請求。通過調用Request對象的Send方法完成列出bucket中對象的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func ListObjectRequest(svc *s3.S3) {
listObjectsInput := &s3.ListObjectsInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, listObjectsOutput := svc.ListObjectsRequest(listObjectsInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to list objects. %v\n", err)
} else {
fmt.Println(listObjectsOutput)
}
}如果 list 大于1000,則返回的結果中 isTruncated 為true,通過返回的 nextMarker 標記可以作為下次讀取的起點。列舉所有對象示例代碼如下:
func ListAllObjects(svc *s3.S3) {
var nextMarker *string
?
for {
listObjectsInput := &s3.ListObjectsInput{
Bucket: aws.String("<your-bucket-name>"),
Marker: nextMarker,
}
?
req, listObjectsOutput := svc.ListObjectsRequest(listObjectsInput)
err := req.Send()
if err != nil {
fmt.Printf("Failed to list objects: %v\n", err)
return
}
?
if listObjectsOutput.Contents != nil {
for _, obj := range listObjectsOutput.Contents {
fmt.Println("Object Key:", *obj.Key)
}
}
?
if listObjectsOutput.IsTruncated != nil && *listObjectsOutput.IsTruncated {
nextMarker = listObjectsOutput.NextMarker
} else {
break
}
}
}請求參數
ListObjectsInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
| Delimiter | *string | 與Prefix參數一起用于對對象key進行分組的字符。所有key包含指定的Prefix且第一次出現Delimiter字符的對象作為一組。如果沒有指定Prefix參數,按Delimiter對所有對象key進行分割,多個對象分割后從對象key開始到第一個Delimiter之間相同的部分形成一組 | 否 |
| Marker | *string | 指定一個標識符,返回的對象的key將是按照字典順序排序后位于該標識符之后的所有對象 | 否 |
| MaxKeys | *int64 | 設置response中返回object key的數量,默認值和最大值均為1000 | 否 |
| Prefix | *string | 限定返回對象的key必須以Prefix作為前綴 | 否 |
返回結果
ListObjectsOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| CommonPrefixes | []*CommonPrefix | 當請求中設置了Delimiter和Prefix屬性時,所有包含指定的Prefix且第一次出現Delimiter字符的對象key作為一組 |
| Contents | []*Object | 對象數據,每個對象包含了Entity Tag、Key、LastModifiedTime、Owner和Size等信息 |
| Delimiter | *string | 與請求中設置的Delimiter一致 |
| IsTruncated | *bool | 當為false時表示返回結果中包含了全部符合本次請求查詢條件的對象信息,否則只返回了數量為MaxKeys個的對象信息 |
| Marker | *string | 與請求中設置的Marker一致 |
| MaxKeys | *int64 | 本次返回結果中包含的對象數量的最大值 |
| Name | *string | 執行本操作的桶名稱 |
| NextMarker | *string | 當返回結果中的IsTruncated為true時,可以使用NextMarker作為下次查詢的Marker,繼續查詢出下一部分的對象信息 |
| Prefix | *string | 與請求中設置的Prefix一致 |
列舉桶內多版本對象
功能說明
列舉桶內多版本對象操作可以獲取關于對象版本信息的元數據,執行該操作需要對桶有READ權限。
代碼示例
// 列出對象的版本信息
func ListObjectVersion(svc *s3.S3) {
listObjectVersionsInput := &s3.ListObjectVersionsInput{
Bucket: aws.String("<your-bucket-name>"),
Prefix: aws.String("<your-object-key>"),
}
?
listObjectVersionsOutput, err := svc.ListObjectVersions(listObjectVersionsInput)
if err != nil {
fmt.Printf("fail to list object versions. %v\n", err)
return
}
fmt.Println(listObjectVersionsOutput)
}通過ListObjectVersionsRequest操作
ListObjectVersionsRequest操作首先生成一個"request.Request"對象,該對象是一個執行ListObjectVersions操作的請求。通過調用Request對象的Send方法來獲取對象版本信息 。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func ListObjectVersionsRequest(svc *s3.S3) {
listObjectVersionsInput := &s3.ListObjectVersionsInput{
Bucket: aws.String("<your-bucket-name>"),
KeyMarker: aws.String("<your-object-key>"),
}
req, listObjectVersionsOutput := svc.ListObjectVersionsRequest(listObjectVersionsInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to list object versions. %v\n", err)
} else {
fmt.Println(listObjectVersionsOutput)
}
}請求參數
ListObjectVersionsInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 查詢版本信息的對象所在的桶的名稱 | 是 |
| Delimiter | *string | 與Prefix參數一起用于對對象key進行分組的字符。所有key包含指定的Prefix且第一次出現Delimiter字符之間的對象作為一組。如果沒有指定Prefix參數,按Delimiter對所有對象key進行分割,多個對象分割后從對象key開始到第一個Delimiter之間相同的部分形成一組 | 否 |
| KeyMarker | *string | 指定一個標識符,返回的對象的key將是按照字典順序排序后位于該標識符之后的所有對象 | 否 |
| MaxKeys | *int64 | 設置查詢結果中返回對象key的數量,默認值和最大值均為1000 | 否 |
| Prefix | *string | 限定返回對象的key必須以Prefix作為前綴 | 否 |
| VersionIdMarker | *string | 列舉多版本時指定對象的起始版本Id | 否 |
返回結果
ListObjectVersionsOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| CommonPrefixes | []*CommonPrefix | 當請求中設置了Delimiter和Prefix屬性時,所有包含指定的Prefix且第一次出現Delimiter字符的對象key作為一組 |
| DeleteMarkers | []*DeleteMarkerEntry | 對象刪除標記信息數組,數組中每一項包含了是否為最新版本、對象key、最新修改時間、擁有者和版本Id等信息 |
| Delimiter | *string | 與請求中設置的Delimiter一致 |
| IsTruncated | *bool | 當為false時表示返回結果中包含了全部符合本次請求查詢條件的對象版本信息,否則只返回了MaxKeys個對象版本信息 |
| KeyMarker | *string | 與請求中設置的KeyMarker一致 |
| MaxKeys | *int64 | 本次返回結果中包含的對象版本信息數量的最大值 |
| Name | *string | 執行本操作的桶名稱 |
| NextKeyMarker | *string | 當返回結果中的IsTruncated為true時,可以使用NextKeyMarker作為下次查詢請求中的KeyMarker,繼續查詢出下一部分的對象版本信息 |
| NextVersionIdMarker | *string | 當返回結果中的IsTruncated為true時,可以使用NextVersionIdMarker作為下次查詢請求中的VersionIdMarker,繼續查詢出下一部分的對象版本信息 |
| Prefix | *string | 與請求中設置的Prefix一致 |
| VersionIdMarker | *string | 表示列舉多版本對象的起始版本Id,與請求中的該參數對應 |
| Versions | []*ObjectVersion | 對象版本信息的數組,數組中每一項包含了對象的Entity Tag、是否為最新版本、對象key、最新修改時間、擁有者、大小、存儲類型和版本Id的信息 |
設置桶ACL
功能說明
設置桶ACL操作可以通過access control list(ACL)設置一個桶的訪問權限。用戶在設置桶的ACL之前需要具備WRITE_ACP 權限。
Bucket的權限說明:
| 權限類型 | 說明 |
|---|---|
| READ | 可以對bucket進行list操作 |
| READ_ACP | 可以讀取bucket的ACL信息。bucket的擁有者默認具有bucket的READ_ACP權限 |
| WRITE | 可以在bucket中創建對象,修改原有對象數據和刪除對象 |
| WRITE_ACP | 可以修改bucket的ACL信息,授予該權限相當于授予FULL_CONTROL權限,因為具有WRITE_ACP權限的用戶可以配置bucket的任意權限。bucket的擁有者默認具有bucket的WRITE_ACP權限 |
| FULL_CONTROL | 同時授予READ、READ_ACP、WRITE和WRITE_ACP權限 |
代碼示例
func PutBucketAcl(svc *s3.S3) {
bucket := "<your-bucket-name>"
permission := "READ_ACP" // FULL_CONTROL、WRITE、WRITE_ACP、READ、READ_ACP
granteeDisplayName := "<your-display-name>"
granteeId := "<your-user-id>"
userType := "CanonicalUser"
// 獲取當前ACL
currentACL, err := svc.GetBucketAcl(&s3.GetBucketAclInput{Bucket: aws.String(bucket)})
if err != nil {
fmt.Printf("fail to get acl of bucket, %v\n", err)
os.Exit(1)
}
// 創建一個新的授權信息
var newGrantee = s3.Grantee{
Type: aws.String(userType),
DisplayName: aws.String(granteeDisplayName),
ID: aws.String(granteeId),
}
var newGrant = s3.Grant{Grantee: &newGrantee, Permission: &permission}
?
grants := currentACL.Grants
owner := *currentACL.Owner.DisplayName
ownerId := *currentACL.Owner.ID
grants = append(grants, &newGrant)
// 添加一個授權信息
putBucketAclInput := &s3.PutBucketAclInput{
Bucket: &bucket,
AccessControlPolicy: &s3.AccessControlPolicy{
Grants: grants,
Owner: &s3.Owner{
DisplayName: &owner,
ID: &ownerId,
},
},
}
?
_, err = svc.PutBucketAcl(putBucketAclInput)
if err != nil {
fmt.Printf("fail to put acl to bucket. %v\n", err)
os.Exit(1)
}
fmt.Println("You gave user with ", permission, "permission to bucket ", bucket)
}通過PutBucketAclRequest操作:
PutBucketAclRequest操作首先生成一個"request.Request"對象,該對象是一個執行PutBucketAcl操作的請求。通過調用Request對象的Send方法完成設置bucket ACL信息的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func PutBucketAclRequest(svc *s3.S3) {
bucket := "<your-bucket-name>"
permission := "READ_ACP" // FULL_CONTROL、WRITE、WRITE_ACP、READ、READ_ACP
granteeDisplayName := "<your-display-name>"
granteeId := "<your-user-id>"
userType := "CanonicalUser"
// 獲取當前ACL
currentACL, err := svc.GetBucketAcl(&s3.GetBucketAclInput{Bucket: aws.String(bucket)})
if err != nil {
fmt.Printf("fail to get acl of bucket, %v\n", err)
os.Exit(1)
}
// 創建一個新的授權信息
var newGrantee = s3.Grantee{
Type: aws.String(userType),
DisplayName: aws.String(granteeDisplayName),
ID: aws.String(granteeId),
}
var newGrant = s3.Grant{Grantee: &newGrantee, Permission: &permission}
?
grants := currentACL.Grants
owner := *currentACL.Owner.DisplayName
ownerId := *currentACL.Owner.ID
grants = append(grants, &newGrant)
// 添加一個授權信息
putBucketAclInput := &s3.PutBucketAclInput{
Bucket: &bucket,
AccessControlPolicy: &s3.AccessControlPolicy{
Grants: grants,
Owner: &s3.Owner{
DisplayName: &owner,
ID: &ownerId,
},
},
}
?
req, _ := svc.PutBucketAclRequest(putBucketAclInput)
?
err = req.Send()
if err != nil {
fmt.Printf("fail to put bucket acl. %v\n", err)
}
}?請求參數
PutBucketAclInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| ACL | *string | 配置此bucket預定義的標準ACL信息,例如private,public-read等 | 否 |
| AccessControlPolicy | *AccessControlPolicy | 配置該bucket對于每個用戶的ACL授權信息 | 否 |
| Bucket | *string | bucket的名稱 | 是 |
| GrantFullControl | *string | 用于自定義用戶對此bucket的FULL_CONTROL權限信息 | 否 |
| GrantRead | *string | 用于自定義用戶對此bucket的READ權限信息 | 否 |
| GrantReadACP | *string | 用于自定義用戶對此bucket ACL的READ權限信息 | 否 |
| GrantWrite | *string | 用于自定義用戶對此bucket的WRITE權限信息 | 否 |
| GrantWriteACP | *string | 用于自定義用戶對此bucket ACL的WRITE權限信息 | 否 |
用戶可以通過ACL參數設置bucket的訪問權限,也可以通過GrantFullControl、GrantRead、GrantReadACP、GrantWrite、GrantWriteACP等參數設置bucket的訪問權限,但二者只能同時使用一種方式。
獲取桶ACL
功能說明
獲取桶ACL操作用戶獲取bucket的access control list(ACL)信息。桶的ACL可以在創建的時候設置并且通過API查看,用戶需要具有READ_ACP(讀取桶ACL信息)權限才可以查詢桶的ACL信息。
代碼示例
// 獲取桶的ACL信息
func GetBucketAcl(svc *s3.S3) {
getBucketAclInput := &s3.GetBucketAclInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
getBucketAclOutput, err := svc.GetBucketAcl(getBucketAclInput)
if err != nil {
fmt.Printf("fail to get bucekt acl. %v\n", err)
return
}
owner := getBucketAclOutput.Owner
fmt.Printf("owner is %v with ID %v\n", *owner.DisplayName, *owner.ID)
for _, grant := range getBucketAclOutput.Grants {
fmt.Println(grant.String())
}
}通過GetBucketAclRequest操作:
GetBucketAclRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketAcl操作的請求。通過調用Request對象的Send方法完成獲取bucket ACL信息的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketAclRequest(svc *s3.S3) {
getBucketAclInput := &s3.GetBucketAclInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, getBucketAclOutput := svc.GetBucketAclRequest(getBucketAclInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket acl. %v\n", err)
} else {
fmt.Println(getBucketAclOutput)
}
}請求參數
GetBucketAclInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketAclOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| Grants | []*Grant | Grant信息的數組,包含了每項授權和被授予人的信息 |
| Owner | *Owner | bucket的擁有者信息 |
設置桶策略
功能說明
桶策略(bukcet policy)可以靈活地配置用戶各種操作和訪問資源的權限。訪問控制列表(access control lists,ACL)只能對單一對象設置權限,而桶策略可以基于各種條件對一個桶內的全部或者一組對象配置權限。桶的擁有者擁有PutBucketPolicy操作的權限,如果桶已經被設置了policy,則新的policy會覆蓋原有的policy。
設置桶策略操作可以設置桶策略,描述桶策略的信息以JSON格式的字符串形式通過Policy參數傳入。一個policy的示例如下:
{
"Id":"PolicyId",
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ExampleStatementID1",
"Principal":{
"AWS":[
"arn:aws:iam:::user/userId",
"arn:aws:iam:::user/userName"
]
},
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:CreateBucket"
],
"Resource":[
"arn:aws:iam:::exampleBucket"
],
"Condition":"some conditions"
},
......
]
}Statement的內容說明如下:
| 元素 | 描述 | 是否必要 |
|---|---|---|
| Sid | statement Id,可選關鍵字,描述statement的字符串 | 否 |
| Principal | 可選關鍵字,被授權人,指定本條statement權限針對的Domain以及User,支持通配符“*”,表示所有用戶(匿名用戶)。當對Domain下所有用戶授權時,Principal格式為arn:aws:iam:::user/*。當對某個User進行授權時,Principal格式為arn:aws:iam:::user/userId或者arn:aws:iam:::user/userName。 | 可選,Principal與NotPrincipal選其一 |
| NotPrincipal | 可選關鍵字,不被授權人,statement匹配除此之外的其他人。取值同Principal | 可選,NotPrincipal與Principal選其一 |
| Action | 可選關鍵字,指定本條statement作用的操作,Action字段為對象存儲支持的所有操作集合,以字符串形式表示,不區分大小寫。支持通配符“*”,表示該資源能進行的所有操作。例如:"Action":["List*", "Get*"] | 可選,Action與NotAction選其一 |
| NotAction | 可選關鍵字,指定一組操作,statement匹配除該組操作之外的其他操作。 取值同Action | 可選,NotAction與Action選其一 |
| Effect | 必選關鍵字,效果,指定本條statement的權限是允許還是拒絕,Effect的值必須為Allow或者Deny | 必選 |
| Resource | 可選關鍵字,指定statement起作用的一組資源,支持通配符“*”,表示所有資源 | 可選,Resource與NotResource選其一 |
| NotResource | 可選關鍵字,指定一組資源,statement匹配除該組資源之外的其他資源。 取值同Resource | 可選,NotResource與Resource選其一 |
| Condition | 可選關鍵字,本條statement生效的條件 | 可選 |
代碼示例
// 設置桶策略
func PutBucketPolicy(svc *s3.S3) {
putBucketPolicyInput := &s3.PutBucketPolicyInput{
Bucket: aws.String("<your-bucket-name>"),
Policy: aws.String("<example-policy>"),
}
_, err := svc.PutBucketPolicy(putBucketPolicyInput)
if err != nil {
fmt.Printf("fail to put bucket policy. %v\n", err)
}
}通過PutBucketPolicyRequest操作:
PutBucketPolicyRequest操作首先生成一個"request.Request"對象,該對象是一個執行PutBucketPolicy操作的請求。通過調用Request對象的Send方法完成設置桶策略的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func PutBucketPolicyRequest(svc *s3.S3) {
putBucketPolicyInput := &s3.PutBucketPolicyInput{
Bucket: aws.String("<your-bucket-name>"),
Policy: aws.String("<example-policy>"),
}
req, _ := svc.PutBucketPolicyRequest(putBucketPolicyInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket policy. %v\n", err)
}
}請求參數
PutBucketPolicyInput可以設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 桶的名稱 | 是 |
| Policy | *string | JSON格式的桶策略信息 | 是 |
獲取桶策略
功能說明
獲取桶策略操作用于獲取桶的policy,policy配置功能可以使用戶根據需求更精確地定義桶的訪問策略。桶的擁有者可以查看桶的policy信息。
代碼示例
// 獲取桶的策略信息
func GetBucketPolicy(svc *s3.S3) {
getBucketPolicyInput := &s3.GetBucketPolicyInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
getBucketPolicyOutput, err := svc.GetBucketPolicy(getBucketPolicyInput)
if err != nil {
fmt.Printf("fail to get policy of bucket. %v\n", err)
return
}
fmt.Printf("policy of bucket: %v\n", *getBucketPolicyOutput.Policy)
}通過GetBucketPolicyRequest操作:
GetBucketPolicyRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketPolicy操作的請求。通過調用Request對象的Send方法完成獲取bucket policy信息的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketPolicyRequest(svc *s3.S3) {
getBucketPolicyInput := &s3.GetBucketPolicyInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, getBucketPolicyOutput := svc.GetBucketPolicyRequest(getBucketPolicyInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket policy. %v\n", err)
} else {
fmt.Println(getBucketPolicyOutput)
}
}請求參數
GetBucketPolicyInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 桶的名稱 | 是 |
返回結果
GetBucketPolicyOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| Policy | *string | JSON格式的桶策略信息 |
刪除桶策略
功能說明
刪除桶策略操作可以刪除桶已經配置的策略,桶的創建者默認擁有刪除桶策略的權限。
代碼示例
func DeleteBucketPolicy(svc *s3.S3) {
deleteBucketPolicyInput := &s3.DeleteBucketPolicyInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
_, err := svc.DeleteBucketPolicy(deleteBucketPolicyInput)
if err != nil {
fmt.Printf("fail to delete bucket policy. %v\n", err)
return
}
}通過DeleteBucketPolicyRequest操作:
DeleteBucketPolicyRequest操作首先生成一個"request.Request"對象,該對象是一個執行DeleteBucketPolicy操作的請求。通過調用Request對象的Send方法完成刪除桶策略的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func DeleteBucketPolicyRequest(svc *s3.S3) {
deleteBucketPolicyInput := &s3.DeleteBucketPolicyInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, _ := svc.DeleteBucketPolicyRequest(deleteBucketPolicyInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to delete bucket policy. %v\n", err)
}
}請求參數
DeleteBucketPolicyInput可以設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 桶的名稱 | 是 |
設置桶生命周期規則
功能說明
設置桶生命周期規則操作可以設置桶的生命周期規則,規則可以通過匹配對象key前綴、標簽的方法設置當前版本或者歷史版本對象的過期時間,對象過期后會被自動刪除。桶的版本控制狀態必須處于Enabled或者Suspended,歷史版本對象過期時間配置才能生效。每次執行操作會覆蓋桶中已存在的生命周期規則。
代碼示例
// 設置桶生命周期規則
func PutBucketLifecycleConfiguration(svc *s3.S3) {
// rule1:設置匹配指定前綴的對象一天后過期
rule1 := &s3.LifecycleRule{
ID: aws.String("expireAfterOneDay"),
Status: aws.String("Enabled"),
Filter: &s3.LifecycleRuleFilter{
Prefix: aws.String("expireAfterOneDay/"),
},
Expiration: &s3.LifecycleExpiration{
Days: aws.Int64(1),
},
}
// rule2: 設置匹配指定前綴的對象的歷史版本一天后過期
rule2 := &s3.LifecycleRule{
ID: aws.String("noncurrentVersionExpireAfterOneDay"),
Status: aws.String("Enabled"),
Filter: &s3.LifecycleRuleFilter{
Prefix: aws.String("noncurrentVersionExpireAfterOneDay/"),
},
NoncurrentVersionExpiration: &s3.NoncurrentVersionExpiration{
NoncurrentDays: aws.Int64(1),
},
}
// rule3: 設置匹配指定標簽信息的對象一天后過期
rule3 := &s3.LifecycleRule{
ID: aws.String("withTagsExpireAfterOneDay"),
Status: aws.String("Enabled"),
Expiration: &s3.LifecycleExpiration{
Days: aws.Int64(1),
},
Filter: &s3.LifecycleRuleFilter{
Tag: &s3.Tag{
Key: aws.String("<key1>"),
Value: aws.String("<value1>"),
},
},
}
putBucketLifecycleConfigurationInput := &s3.PutBucketLifecycleConfigurationInput{
Bucket: aws.String("<your-bucket-name>"),
LifecycleConfiguration: &s3.BucketLifecycleConfiguration{
Rules: []*s3.LifecycleRule{rule1, rule2, rule3},
},
}
_, err := svc.PutBucketLifecycleConfiguration(putBucketLifecycleConfigurationInput)
if err != nil {
fmt.Printf("fail to put bucket lifecycle configuration. %v\n", err)
}
}通過PutBucketLifecycleConfigurationRequest操作:
PutBucketLifecycleConfigurationRequest操作首先生成一個"request.Request"對象,該對象是一個執行PutBucketLifecycleConfiguration操作的請求。通過調用Request對象的Send方法完成獲設置桶生命周期規則的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func PutBucketLifecycleConfigurationRequest(svc *s3.S3) {
// rule1:設置匹配指定前綴的對象一天后過期
rule1 := &s3.LifecycleRule{
ID: aws.String("expireAfterOneDay"),
Status: aws.String("Enabled"),
Filter: &s3.LifecycleRuleFilter{
Prefix: aws.String("expireAfterOneDay/"),
},
Expiration: &s3.LifecycleExpiration{
Days: aws.Int64(1),
},
}
// rule2: 設置匹配指定前綴的對象的歷史版本一天后過期
rule2 := &s3.LifecycleRule{
ID: aws.String("noncurrentVersionExpireAfterOneDay"),
Status: aws.String("Enabled"),
Filter: &s3.LifecycleRuleFilter{
Prefix: aws.String("noncurrentVersionExpireAfterOneDay/"),
},
NoncurrentVersionExpiration: &s3.NoncurrentVersionExpiration{
NoncurrentDays: aws.Int64(1),
},
}
// rule3: 設置匹配指定標簽信息的對象一天后過期
rule3 := &s3.LifecycleRule{
ID: aws.String("withTagsExpireAfterOneDay"),
Status: aws.String("Enabled"),
Expiration: &s3.LifecycleExpiration{
Days: aws.Int64(1),
},
Filter: &s3.LifecycleRuleFilter{
Tag: &s3.Tag{
Key: aws.String("<key1>"),
Value: aws.String("<value1>"),
},
},
}
putBucketLifecycleConfigurationInput := &s3.PutBucketLifecycleConfigurationInput{
Bucket: aws.String("<your-bucket-name>"),
LifecycleConfiguration: &s3.BucketLifecycleConfiguration{
Rules: []*s3.LifecycleRule{rule1, rule2, rule3},
},
}
?
req, _ := svc.PutBucketLifecycleConfigurationRequest(putBucketLifecycleConfigurationInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket policy. %v\n", err)
}
}請求參數
PutBucketLifecycleConfigurationInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
| LifecycleConfiguration | *BucketLifecycleConfiguration | 封裝了生命周期規則的數組 | 是 |
查看桶生命周期規則
功能說明
查看桶生命周期規則操作可以查看桶當前的生命周期規則。生命周期管理可以通過設置規則實現自動清理過期的對象,優化存儲空間。
代碼示例
func GetBucketLifecycleConfiguration(svc *s3.S3) {
getBucketLifecycleConfigurationInput := &s3.GetBucketLifecycleConfigurationInput{
Bucket: aws.String("<your-bucket-name>"),
}
getBucketLifecycleConfigurationOutput, err := svc.GetBucketLifecycleConfiguration(getBucketLifecycleConfigurationInput)
if err != nil {
fmt.Printf("fail to get bucket lifecycle. %v\n", err)
?
return
}
fmt.Println(getBucketLifecycleConfigurationOutput)
}通過GetBucketLifecycleConfigurationRequest操作:
GetBucketLifecycleConfigurationRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketLifecycleConfiguration操作的請求。通過調用Request對象的Send方法完成獲取桶當前生命周期規則的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketLifecycleConfigurationRequest(svc *s3.S3) {
getBucketLifecycleConfigurationInput := &s3.GetBucketLifecycleConfigurationInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, getBucketLifecycleConfigurationOutput := svc.GetBucketLifecycleConfigurationRequest(getBucketLifecycleConfigurationInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket policy. %v\n", err)
} else {
fmt.Println(getBucketLifecycleConfigurationOutput)
}
}請求參數
GetBucketLifecycleConfigurationInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketLifecycleConfigurationOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| Rules | []*LifecycleRule | 一個描述生命周期管理的規則數組,一條規則包含了規則ID、匹配的對象key前綴、匹配的對象標簽信息、當前版本對象過期時間、歷史版本對象過期時間和是否生效標識等信息 |
刪除桶生命周期規則
功能說明
刪除桶生命周期操作可以刪除桶中的全部生命周期規則。
代碼示例
func DeleteBucketLifeCycle(svc *s3.S3) {
deleteBucketLifecycleInput := &s3.DeleteBucketLifecycleInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
_, err := svc.DeleteBucketLifecycle(deleteBucketLifecycleInput)
if err != nil {
fmt.Printf("fail to delete bucket lifecycle. %v\n", err)
}
}通過DeleteBucketLifecycleRequest操作:
DeleteBucketLifecycleRequest操作首先生成一個"request.Request"對象,該對象是一個執行DeleteBucketLifecycle操作的請求。通過調用Request對象的Send方法完成刪除桶生命周期規則的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func DeleteBucketLifeCycleRequest(svc *s3.S3) {
deleteBucketLifecycleInput := &s3.DeleteBucketLifecycleInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, _ := svc.DeleteBucketLifecycleRequest(deleteBucketLifecycleInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket policy. %v\n", err)
}
}請求參數
DeleteBucketLifecycleInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
配置桶的website配置
功能說明
設置桶的靜態網站配置。
代碼示例
func PutBucketWebsite(svc *s3.S3) {
putBucketWebsiteInput := &s3.PutBucketWebsiteInput{
Bucket: aws.String("<your-bucket-name>"),
WebsiteConfiguration: &s3.WebsiteConfiguration{
ErrorDocument: &s3.ErrorDocument{
Key: aws.String("error.html"),
},
IndexDocument: &s3.IndexDocument{
Suffix: aws.String("index.html"),
},
},
}
?
_, err := svc.PutBucketWebsite(putBucketWebsiteInput)
if err != nil {
fmt.Printf("fail to put bucket website. %v\n", err)
}
}通過PutBucketWebsiteRequest操作設置桶網站配置:
PutBucketWebsiteRequest操作首先生成一個"request.Request"對象,該對象是一個執行PutBucketWebsite操作的請求。通過調用Request對象的Send方法完成設置桶靜態網站配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func PutBucketWebsiteRequest(svc *s3.S3) {
putBucketWebsiteInput := &s3.PutBucketWebsiteInput{
Bucket: aws.String("<your-bucket-name>"),
WebsiteConfiguration: &s3.WebsiteConfiguration{
ErrorDocument: &s3.ErrorDocument{
Key: aws.String("error.html"),
},
IndexDocument: &s3.IndexDocument{
Suffix: aws.String("index.html"),
},
},
}
?
req, _ := svc.PutBucketWebsiteRequest(putBucketWebsiteInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket website. %v\n", err)
}
}請求參數
PutBucketWebsiteInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
| WebsiteConfiguration | *WebsiteConfiguration | 描述桶網站配置的配置項 | 是 |
獲取桶的website配置
功能說明
獲取桶的靜態網站配置。
代碼示例
func GetBucketWebsite(svc *s3.S3) {
getBucketWebsiteInput := &s3.GetBucketWebsiteInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
getBucketWebsiteOutput, err := svc.GetBucketWebsite(getBucketWebsiteInput)
if err != nil {
fmt.Printf("fail to get bucket website. %v\n", err)
} else {
fmt.Println(getBucketWebsiteOutput)
}
}通過GetBucketWebsiteRequest操作獲取桶網站配置:
GetBucketWebsiteRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketWebsite操作的請求。通過調用Request對象的Send方法完成獲取桶靜態網站配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketWebsiteRequest(svc *s3.S3) {
getBucketWebsiteInput := &s3.GetBucketWebsiteInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, getBucketWebsiteOutput := svc.GetBucketWebsiteRequest(getBucketWebsiteInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket website. %v\n", err)
} else {
fmt.Println(getBucketWebsiteOutput)
}
}請求參數
GetBucketWebsiteInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketWebsiteOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| ErrorDocument | *ErrorDocument | 錯誤頁面信息 |
| IndexDocument | *IndexDocument | 默認主頁頁面信息 |
| RedirectAllRequestsTo | *RedirectAllRequestsTo | 重定向全部請求配置 |
| RoutingRules | []*RoutingRule | 重定向規則配置 |
刪除桶的website配置
功能說明
刪除桶的靜態網站配置。
代碼示例
func DeleteBucketWebsite(svc *s3.S3) {
deleteBucketWebsiteInput := &s3.DeleteBucketWebsiteInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
_, err := svc.DeleteBucketWebsite(deleteBucketWebsiteInput)
if err != nil {
fmt.Printf("fail to delete bucket website. %v\n", err)
}
}通過DeleteBucketWebsiteRequest操作:
DeleteBucketWebsiteRequest操作首先生成一個"request.Request"對象,該對象是一個執行DeleteBucketWebsite操作的請求。通過調用Request對象的Send方法完成刪除桶靜態網站配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func DeleteBucketWebsiteRequest(svc *s3.S3) {
deleteBucketWebsiteInput := &s3.DeleteBucketWebsiteInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, _ := svc.DeleteBucketWebsiteRequest(deleteBucketWebsiteInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to delete bucket website. %v\n", err)
}
}請求參數
DeleteBucketWebsiteInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
設置桶的多版本狀態
功能說明
設置桶多版本狀態操作可以設置版本控制狀態。桶的版本控制狀態可以設置為以下的值:
Enabled:對bucket中的所有對象啟用版本控制,之后每個添加到bucket中的對象都會被設置一個唯一的version id。
Suspended:關閉bucket的版本控制,之后每個添加到bucket中的對象的version ID會被設置為null。
代碼示例
func PutBucketVersioning(svc *s3.S3) {
putBucketVersioningInput := &s3.PutBucketVersioningInput{
Bucket: aws.String("<your-bucket-name>"),
VersioningConfiguration: &s3.VersioningConfiguration{
Status: aws.String("Enabled"), //啟用版本控制:Enabled,暫停版本控制:Suspended
},
}
?
_, err := svc.PutBucketVersioning(putBucketVersioningInput)
if err != nil {
fmt.Printf("fail to put bucket versioning. %v\n", err)
return
}
}通過PutBucketVersioningRequest操作:
PutBucketVersioningRequest操作首先生成一個"request.Request"對象,該對象是一個執行PutBucketVersioning操作的請求。通過調用Request對象的Send方法完成配置bucket版本控制信息的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func PutBucketVersioningRequest(svc *s3.S3) {
putBucketVersioningInput := &s3.PutBucketVersioningInput{
Bucket: aws.String("<your-bucket-name>"),
VersioningConfiguration: &s3.VersioningConfiguration{
Status: aws.String("Enabled"), //啟用版本控制
},
}
req, _ := svc.PutBucketVersioningRequest(putBucketVersioningInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket versioning request. %v\n", err)
}
}請求參數
PutBucketVersioningInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
| VersioningConfiguration | *VersioningConfiguration | 封裝了設置版本控制狀態的參數 | 是 |
獲取桶的多版本狀態
功能說明
獲取桶的多版本狀態操作可以獲取桶的版本控制狀態信息。只有bucket的擁有者才能獲取到桶的版本控制信息。
每個桶的版本控制有三個狀態:未開啟、開啟(Enabled)和暫停(Suspended)版本控制,如果桶從來沒有被設置過版本控制狀態,那么該桶默認為未開啟版本控制狀態,執行GetBucketVersioning操作不能獲取任何版本控制信息。
代碼示例
func GetBucketVersioning(svc *s3.S3){
getBucketVersioningInput := &s3.GetBucketVersioningInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
getBucketVersioningOutput, err := svc.GetBucketVersioning(getBucketVersioningInput)
if err != nil {
fmt.Printf("fail to get bucket versioning. %v\n", err)
return
}
fmt.Println(getBucketVersioningOutput)
}通過GetBucketVersioningRequest操作:
GetBucketVersioningRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketVersioning操作的請求。通過調用Request對象的Send方法完成獲取bucket版本控制配置信息的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketVersioningRequest(svc *s3.S3) {
getBucketVersioningInput := &s3.GetBucketVersioningInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, getBucketVersioningOutput := svc.GetBucketVersioningRequest(getBucketVersioningInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket versioning. %v\n", err)
} else {
fmt.Println(getBucketVersioningOutput)
}
}請求參數
GetBucketVersioningInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketVersioningOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| Status | *string | 桶的版本控制設置狀態 |
設置桶的CORS配置
功能說明
設置桶的跨域資源共享CORS(Cross-Origin Resource Sharing)規則。桶默認不開啟跨域資源共享規則,設置桶的跨域資源共享規則時,新配置的規則會覆蓋已有的規則。
代碼示例
func PutBucketCors(svc *s3.S3) {
putBucketCorsInput := &s3.PutBucketCorsInput{
Bucket: aws.String("<your-bucket-name>"),
CORSConfiguration: &s3.CORSConfiguration{
CORSRules: []*s3.CORSRule{
{
AllowedHeaders: []*string{
aws.String("*"),
},
AllowedMethods: []*string{
aws.String("PUT"),
aws.String("POST"),
aws.String("DELETE"),
},
AllowedOrigins: []*string{
aws.String("//www.example.com"),
},
ExposeHeaders: []*string{
aws.String("x-amz-server-side-encryption"),
},
MaxAgeSeconds: aws.Int64(3000),
},
{
AllowedHeaders: []*string{
aws.String("Authorization"),
},
AllowedMethods: []*string{
aws.String("GET"),
},
AllowedOrigins: []*string{
aws.String("*"),
},
MaxAgeSeconds: aws.Int64(3000),
},
},
},
}
?
_, err := svc.PutBucketCors(putBucketCorsInput)
if err != nil {
fmt.Printf("fail to put bucket cors. %v\n", err)
}
}通過PutBucketCorsRequest操作:
PutBucketCorsRequest操作首先生成一個"request.Request"對象,該對象是一個執行PutBucketCors操作的請求。通過調用Request對象的Send方法完成設置桶CORS配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func PutBucketCorsRequest(svc *s3.S3) {
putBucketCorsInput := &s3.PutBucketCorsInput{
Bucket: aws.String("<your-bucket-name>"),
CORSConfiguration: &s3.CORSConfiguration{
CORSRules: []*s3.CORSRule{
{
AllowedHeaders: []*string{
aws.String("*"),
},
AllowedMethods: []*string{
aws.String("PUT"),
aws.String("POST"),
aws.String("DELETE"),
},
AllowedOrigins: []*string{
aws.String("//www.example.com"),
},
ExposeHeaders: []*string{
aws.String("x-amz-server-side-encryption"),
},
MaxAgeSeconds: aws.Int64(3000),
},
{
AllowedHeaders: []*string{
aws.String("Authorization"),
},
AllowedMethods: []*string{
aws.String("GET"),
},
AllowedOrigins: []*string{
aws.String("*"),
},
MaxAgeSeconds: aws.Int64(3000),
},
},
},
}
?
req, _ := svc.PutBucketCorsRequest(putBucketCorsInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket cors. %v\n", err)
}
}請求參數
PutBucketCorsInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
| CORSConfiguration | *CORSConfiguration | 描述桶跨域配置的配置信息 | 是 |
獲取桶的CORS配置
功能說明
獲取指定桶當前生效的跨域資源共享CORS(Cross-Origin Resource Sharing)規則。
代碼示例
func GetBucketCors(svc *s3.S3) {
getBucketCorsInput := &s3.GetBucketCorsInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
getBucketCorsOutput, err := svc.GetBucketCors(getBucketCorsInput)
if err != nil {
fmt.Printf("fail to get bucket cors. %v\n", err)
} else {
fmt.Println(getBucketCorsOutput)
}
}通過GetBucketCorsRequest操作:
GetBucketCorsRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketCors操作的請求。通過調用Request對象的Send方法完成獲取桶CORS配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketCorsRequest(svc *s3.S3) {
getBucketCorsInput := &s3.GetBucketCorsInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, getBucketCorsOutput := svc.GetBucketCorsRequest(getBucketCorsInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket cors. %v\n", err)
} else {
fmt.Println(getBucketCorsOutput)
}
}請求參數
GetBucketCorsInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketCorsOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| CORSRules | []*CORSRule | 桶設置的跨域資源共享規則的集合 |
刪除桶的CORS配置
功能說明
刪除指定桶的跨域資源共享CORS(Cross-Origin Resource Sharing)所有規則并關閉跨域資源共享功能。
代碼示例
func DeleteBucketCors(svc *s3.S3) {
deleteBucketCorsInput := &s3.DeleteBucketCorsInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
_, err := svc.DeleteBucketCors(deleteBucketCorsInput)
if err != nil {
fmt.Printf("fail to delete bucket website. %v\n", err)
}
}通過DeleteBucketCorsRequest操作:
DeleteBucketCorsRequest操作首先生成一個"request.Request"對象,該對象是一個執行DeleteBucketCors操作的請求。通過調用Request對象的Send方法完成刪除桶CORS配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func DeleteBucketCorsRequest(svc *s3.S3) {
deleteBucketCorsInput := &s3.DeleteBucketCorsInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, _ := svc.DeleteBucketCorsRequest(deleteBucketCorsInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to delete bucket website. %v\n", err)
}
}?請求參數
DeleteBucketCorsInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
設置桶標簽
功能說明
以key-value的形式為桶設置標簽,通過設置通標簽可以標記桶的用途,方便對其進行分類和管理。
代碼示例
func PutBucketTagging(svc *s3.S3) {
putBucketTaggingInput := &s3.PutBucketTaggingInput{
Bucket: aws.String("<your-bucket-name>"),
Tagging: &s3.Tagging{
TagSet: []*s3.Tag{
{
Key: aws.String("<key1>"),
Value: aws.String("<value1>"),
},
{
Key: aws.String("<key2>"),
Value: aws.String("<value2>"),
},
},
},
}
?
_, err := svc.PutBucketTagging(putBucketTaggingInput)
if err != nil {
fmt.Printf("fail to put bucket tagging. %v\n", err)
}
}通過PutBucketTaggingRequest操作:
PutBucketTaggingRequest操作首先生成一個"request.Request"對象,該對象是一個執行PutBucketTagging操作的請求。通過調用Request對象的Send方法完成設置桶標簽的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func PutBucketTaggingRequest(svc *s3.S3) {
putBucketTaggingInput := &s3.PutBucketTaggingInput{
Bucket: aws.String("<your-bucket-name>"),
Tagging: &s3.Tagging{
TagSet: []*s3.Tag{
{
Key: aws.String("<key1>"),
Value: aws.String("<value1>"),
},
{
Key: aws.String("<key2>"),
Value: aws.String("<value2>"),
},
},
},
}
?
req, _ := svc.PutBucketTaggingRequest(putBucketTaggingInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to put bucket tagging. %v\n", err)
}
}請求參數
PutBucketTaggingInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
| Tagging | *Tagging | 描述桶標簽的信息 | 是 |
獲取桶標簽
功能說明
獲取指定桶的標簽信息。
代碼示例
func GetBucketTagging(svc *s3.S3) {
getBucketTaggingInput := &s3.GetBucketTaggingInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
getBucketTaggingOutput, err := svc.GetBucketTagging(getBucketTaggingInput)
if err != nil {
fmt.Printf("fail to get bucket tagging. %v\n", err)
return
}
fmt.Println(getBucketTaggingOutput)
}通過GetBucketTaggingRequest操作:
GetBucketTaggingRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketTagging操作的請求。通過調用Request對象的Send方法完成獲取桶標簽的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketTaggingRequest(svc *s3.S3) {
getBucketTaggingInput := &s3.GetBucketTaggingInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, getBucketTaggingOutput := svc.GetBucketTaggingRequest(getBucketTaggingInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket tagging. %v\n", err)
} else {
fmt.Println(getBucketTaggingOutput)
}
}請求參數
GetBucketTaggingInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketTaggingOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| TagSet | []*Tag | 桶的標簽集合,以key-value的形式描述桶標簽信息 |
刪除桶標簽
功能說明
刪除指定桶的全部標簽。
代碼示例
func DeleteBucketTagging(svc *s3.S3) {
deleteBucketTaggingInput := &s3.DeleteBucketTaggingInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
_, err := svc.DeleteBucketTagging(deleteBucketTaggingInput)
if err != nil {
fmt.Printf("fail to delete bucket tagging. %v\n", err)
return
}
}通過DeleteBucketTaggingRequest操作:
DeleteBucketTaggingRequest操作首先生成一個"request.Request"對象,該對象是一個執行DeleteBucketTagging操作的請求。通過調用Request對象的Send方法完成刪除桶標簽的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func DeleteBucketTaggingRequest(svc *s3.S3) {
deleteBucketTaggingInput := &s3.DeleteBucketTaggingInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, _ := svc.DeleteBucketTaggingRequest(deleteBucketTaggingInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to delete bucket tagging. %v\n", err)
}
}請求參數
DeleteBucketTaggingInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
設置桶加密配置
功能說明
獲取指定桶的加密配置信息。
代碼示例
func GetBucketEncryption(svc *s3.S3) {
getBucketEncryptionInput := &s3.GetBucketEncryptionInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
GetBucketEncryptionOutput, err := svc.GetBucketEncryption(getBucketEncryptionInput)
if err != nil {
fmt.Printf("fail to get bucket encryption. %v\n", err)
} else {
fmt.Println(GetBucketEncryptionOutput)
}
}通過GetBucketEncryptionRequest操作:
GetBucketEncryptionRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketEncryption操作的請求。通過調用Request對象的Send方法完成獲取桶加密配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketEncryptionRequest(svc *s3.S3) {
GetBucketEncryptionInput := &s3.GetBucketEncryptionInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, GetBucketEncryptionOutput := svc.GetBucketEncryptionRequest(GetBucketEncryptionInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket encryption. %v\n", err)
} else {
fmt.Println(GetBucketEncryptionOutput)
}
}請求參數
GetBucketEncryptionInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketEncryptionOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| ServerSideEncryptionConfiguration | *ServerSideEncryptionConfiguration | 桶設置的加密配置信息 |
獲取桶加密配置
功能說明
獲取指定桶的加密配置信息。
代碼示例
func GetBucketEncryption(svc *s3.S3) {
getBucketEncryptionInput := &s3.GetBucketEncryptionInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
GetBucketEncryptionOutput, err := svc.GetBucketEncryption(getBucketEncryptionInput)
if err != nil {
fmt.Printf("fail to get bucket encryption. %v\n", err)
} else {
fmt.Println(GetBucketEncryptionOutput)
}
}通過GetBucketEncryptionRequest操作:
GetBucketEncryptionRequest操作首先生成一個"request.Request"對象,該對象是一個執行GetBucketEncryption操作的請求。通過調用Request對象的Send方法完成獲取桶加密配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func GetBucketEncryptionRequest(svc *s3.S3) {
GetBucketEncryptionInput := &s3.GetBucketEncryptionInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, GetBucketEncryptionOutput := svc.GetBucketEncryptionRequest(GetBucketEncryptionInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to get bucket encryption. %v\n", err)
} else {
fmt.Println(GetBucketEncryptionOutput)
}
}請求參數
GetBucketEncryptionInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |
返回結果
GetBucketEncryptionOutput返回的屬性如下:
| 屬性名 | 類型 | 說明 |
|---|---|---|
| ServerSideEncryptionConfiguration | *ServerSideEncryptionConfiguration | 桶設置的加密配置信息 |
刪除桶加密配置
功能說明
刪除指定桶的全部加密配置,停用上傳對象時自動加密功能。
代碼示例
func DeleteBucketEncryption(svc *s3.S3) {
deleteBucketEncryptionInput := &s3.DeleteBucketEncryptionInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
_, err := svc.DeleteBucketEncryption(deleteBucketEncryptionInput)
if err != nil {
fmt.Printf("fail to delete bucket encryption. %v\n", err)
}
}通過DeleteBucketEncryptionRequest操作:
DeleteBucketEncryptionRequest操作首先生成一個"request.Request"對象,該對象是一個執行DeleteBucketEncryption操作的請求。通過調用Request對象的Send方法完成刪除桶加密配置的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func DeleteBucketEncryptionRequest(svc *s3.S3) {
deleteBucketEncryptionInput := &s3.DeleteBucketEncryptionInput{
Bucket: aws.String("<your-bucket-name>"),
}
?
req, _ := svc.DeleteBucketEncryptionRequest(deleteBucketEncryptionInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to delete bucket encryption. %v\n", err)
}
}請求參數
DeleteBucketEncryptionInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | bucket的名稱 | 是 |