doc.go 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Package processcreds is a credentials provider to retrieve credentials from a
  2. // external CLI invoked process.
  3. //
  4. // WARNING: The following describes a method of sourcing credentials from an external
  5. // process. This can potentially be dangerous, so proceed with caution. Other
  6. // credential providers should be preferred if at all possible. If using this
  7. // option, you should make sure that the config file is as locked down as possible
  8. // using security best practices for your operating system.
  9. //
  10. // # Concurrency and caching
  11. //
  12. // The Provider is not safe to be used concurrently, and does not provide any
  13. // caching of credentials retrieved. You should wrap the Provider with a
  14. // `aws.CredentialsCache` to provide concurrency safety, and caching of
  15. // credentials.
  16. //
  17. // # Loading credentials with the SDKs AWS Config
  18. //
  19. // You can use credentials from a AWS shared config `credential_process` in a
  20. // variety of ways.
  21. //
  22. // One way is to setup your shared config file, located in the default
  23. // location, with the `credential_process` key and the command you want to be
  24. // called. You also need to set the AWS_SDK_LOAD_CONFIG environment variable
  25. // (e.g., `export AWS_SDK_LOAD_CONFIG=1`) to use the shared config file.
  26. //
  27. // [default]
  28. // credential_process = /command/to/call
  29. //
  30. // Loading configuration using external will use the credential process to
  31. // retrieve credentials. NOTE: If there are credentials in the profile you are
  32. // using, the credential process will not be used.
  33. //
  34. // // Initialize a session to load credentials.
  35. // cfg, _ := config.LoadDefaultConfig(context.TODO())
  36. //
  37. // // Create S3 service client to use the credentials.
  38. // svc := s3.NewFromConfig(cfg)
  39. //
  40. // # Loading credentials with the Provider directly
  41. //
  42. // Another way to use the credentials process provider is by using the
  43. // `NewProvider` constructor to create the provider and providing a it with a
  44. // command to be executed to retrieve credentials.
  45. //
  46. // The following example creates a credentials provider for a command, and wraps
  47. // it with the CredentialsCache before assigning the provider to the Amazon S3 API
  48. // client's Credentials option.
  49. //
  50. // // Create credentials using the Provider.
  51. // provider := processcreds.NewProvider("/path/to/command")
  52. //
  53. // // Create the service client value configured for credentials.
  54. // svc := s3.New(s3.Options{
  55. // Credentials: aws.NewCredentialsCache(provider),
  56. // })
  57. //
  58. // If you need more control, you can set any configurable options in the
  59. // credentials using one or more option functions.
  60. //
  61. // provider := processcreds.NewProvider("/path/to/command",
  62. // func(o *processcreds.Options) {
  63. // // Override the provider's default timeout
  64. // o.Timeout = 2 * time.Minute
  65. // })
  66. //
  67. // You can also use your own `exec.Cmd` value by satisfying a value that satisfies
  68. // the `NewCommandBuilder` interface and use the `NewProviderCommand` constructor.
  69. //
  70. // // Create an exec.Cmd
  71. // cmdBuilder := processcreds.NewCommandBuilderFunc(
  72. // func(ctx context.Context) (*exec.Cmd, error) {
  73. // cmd := exec.CommandContext(ctx,
  74. // "customCLICommand",
  75. // "-a", "argument",
  76. // )
  77. // cmd.Env = []string{
  78. // "ENV_VAR_FOO=value",
  79. // "ENV_VAR_BAR=other_value",
  80. // }
  81. //
  82. // return cmd, nil
  83. // },
  84. // )
  85. //
  86. // // Create credentials using your exec.Cmd and custom timeout
  87. // provider := processcreds.NewProviderCommand(cmdBuilder,
  88. // func(opt *processcreds.Provider) {
  89. // // optionally override the provider's default timeout
  90. // opt.Timeout = 1 * time.Second
  91. // })
  92. package processcreds