桶相关接口 设置桶ACL 功能说明 设置桶ACL操作可以通过access control list(ACL)设置一个桶的访问权限。用户在设置桶的ACL之前需要具备WRITEACP 权限。 Bucket的权限说明: 权限类型 说明 READ 可以对bucket进行list操作 READACP 可以读取bucket的ACL信息。bucket的拥有者默认具有bucket的READACP权限 WRITE 可以在bucket中创建对象,修改原有对象数据和删除对象 WRITEACP 可以修改bucket的ACL信息,授予该权限相当于授予FULLCONTROL权限,因为具有WRITEACP权限的用户可以配置bucket的任意权限。bucket的拥有者默认具有bucket的WRITEACP权限 FULLCONTROL 同时授予READ、READACP、WRITE和WRITEACP权限 代码示例 plaintext func PutBucketAcl(svc s3.S3) { bucket : " " permission : "READACP" // FULLCONTROL、WRITE、WRITEACP、READ、READACP granteeDisplayName : " " granteeId : " " userType : "CanonicalUser" // 获取当前ACL currentACL, err : svc.GetBucketAcl(&s3.GetBucketAclInput{Bucket: aws.String(bucket)}) if err ! nil { fmt.Printf("fail to get acl of bucket, %vn", 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. %vn", err) os.Exit(1) } fmt.Println("You gave user with ", permission, "permission to bucket ", bucket) } 通过PutBucketAclRequest操作: PutBucketAclRequest操作首先生成一个"request.Request"对象,该对象是一个执行PutBucketAcl操作的请求。通过调用Request对象的Send方法完成设置bucket ACL信息的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。 plaintext func PutBucketAclRequest(svc s3.S3) { bucket : " " permission : "READACP" // FULLCONTROL、WRITE、WRITEACP、READ、READACP granteeDisplayName : " " granteeId : " " userType : "CanonicalUser" // 获取当前ACL currentACL, err : svc.GetBucketAcl(&s3.GetBucketAclInput{Bucket: aws.String(bucket)}) if err ! nil { fmt.Printf("fail to get acl of bucket, %vn", 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. %vn", err) } }
来自: