putObjectAcl.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // +build example
  2. package main
  3. import (
  4. "flag"
  5. "fmt"
  6. "github.com/aws/aws-sdk-go/aws"
  7. "github.com/aws/aws-sdk-go/aws/session"
  8. "github.com/aws/aws-sdk-go/service/s3"
  9. )
  10. // Put an ACL on an S3 object
  11. //
  12. // Usage:
  13. // putBucketAcl <params>
  14. // -region <region> // required
  15. // -bucket <bucket> // required
  16. // -key <key> // required
  17. // -owner-name <owner-name>
  18. // -owner-id <owner-id>
  19. // -grantee-type <some type> // required
  20. // -uri <uri to group>
  21. // -email <email address>
  22. // -user-id <user-id>
  23. func main() {
  24. regionPtr := flag.String("region", "", "region of your request")
  25. bucketPtr := flag.String("bucket", "", "name of your bucket")
  26. keyPtr := flag.String("key", "", "of your object")
  27. ownerNamePtr := flag.String("owner-name", "", "of your request")
  28. ownerIDPtr := flag.String("owner-id", "", "of your request")
  29. granteeTypePtr := flag.String("grantee-type", "", "of your request")
  30. uriPtr := flag.String("uri", "", "of your grantee type")
  31. emailPtr := flag.String("email", "", "of your grantee type")
  32. userPtr := flag.String("user-id", "", "of your grantee type")
  33. displayNamePtr := flag.String("display-name", "", "of your grantee type")
  34. flag.Parse()
  35. // Based off the type, fields must be excluded.
  36. switch *granteeTypePtr {
  37. case s3.TypeCanonicalUser:
  38. emailPtr, uriPtr = nil, nil
  39. if *displayNamePtr == "" {
  40. displayNamePtr = nil
  41. }
  42. if *userPtr == "" {
  43. userPtr = nil
  44. }
  45. case s3.TypeAmazonCustomerByEmail:
  46. uriPtr, userPtr = nil, nil
  47. case s3.TypeGroup:
  48. emailPtr, userPtr = nil, nil
  49. }
  50. sess := session.Must(session.NewSession(&aws.Config{
  51. Region: regionPtr,
  52. }))
  53. svc := s3.New(sess)
  54. resp, err := svc.PutObjectAcl(&s3.PutObjectAclInput{
  55. Bucket: bucketPtr,
  56. Key: keyPtr,
  57. AccessControlPolicy: &s3.AccessControlPolicy{
  58. Owner: &s3.Owner{
  59. DisplayName: ownerNamePtr,
  60. ID: ownerIDPtr,
  61. },
  62. Grants: []*s3.Grant{
  63. {
  64. Grantee: &s3.Grantee{
  65. Type: granteeTypePtr,
  66. DisplayName: displayNamePtr,
  67. URI: uriPtr,
  68. EmailAddress: emailPtr,
  69. ID: userPtr,
  70. },
  71. Permission: aws.String(s3.BucketLogsPermissionFullControl),
  72. },
  73. },
  74. },
  75. })
  76. if err != nil {
  77. fmt.Println("failed", err)
  78. } else {
  79. fmt.Println("success", resp)
  80. }
  81. }