# `ReqManagedAgents.AWS.SigV4`
[🔗](https://github.com/cash-mckeeman/req_managed_agents/blob/v0.13.0/req_managed_agents/lib/req_managed_agents/aws/sig_v4.ex#L1)

Service-neutral AWS SigV4 request signing using the optional `:ex_aws_auth` dependency.

# `creds`

```elixir
@type creds() :: %{
  access_key_id: String.t(),
  secret_access_key: String.t(),
  region: String.t(),
  security_token: String.t() | nil
}
```

# `from_env`

```elixir
@spec from_env(keyword()) :: creds()
```

Resolve credentials from `opts`, application env, or the standard AWS_*
env vars (session-token aware). Called with no args by default, so plain
`from_env()` callers keep working unchanged.

# `sign_request`

```elixir
@spec sign_request(atom(), String.t(), iodata(), keyword()) :: [
  {String.t(), String.t()}
]
```

Return the signed header list for `method`/`url`/`body`. Caller attaches these
to the request. `:credentials` defaults to `from_env/1`; `:service` is required; `:headers` are base headers folded into the canonical set.

Returns a list of `{header_name, header_value}` tuples. The `authorization` and
`x-amz-date` headers are always present; `x-amz-security-token` is included when
a `security_token` is set in the credentials.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
