putObjectAcl.go 2.2 KB

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