wami 0.17.1

Who Am I - Multicloud Identity, IAM, STS, and SSO operations library for Rust
Documentation
# Access Key Module

IAM access key resource management for WAMI. This module provides strongly typed
representations, builders, and request types for managing IAM access keys.

## Overview

Access keys are long-term credentials used for programmatic access to AWS services.
This module provides:

- **Model Types**`AccessKey` and `AccessKeyLastUsed` for representing access key
  resources
- **Builder Functions** – Context-aware builders that generate consistent WAMI ARNs
  and IDs
- **Request Types** – DTOs for service API operations (create, list, update)

## Models

### `AccessKey`

Represents an IAM access key with the following fields:

- `user_name` – The IAM user associated with the key
- `access_key_id` – Unique identifier (format: `AKIA` + 16 alphanumeric chars)
- `status` – Access key status (`Active` or `Inactive`)
- `create_date` – Timestamp when the key was created
- `secret_access_key` – Secret key (only provided during creation)
- `wami_arn` – WAMI ARN for cross-provider identification
- `providers` – List of cloud provider configurations

### `AccessKeyLastUsed`

Tracks usage information for access keys:

- `last_used_date` – When the key was last used
- `region` – AWS region where it was last used
- `service_name` – Service that was accessed

## Builder Functions

### `build_access_key`

Creates a new `AccessKey` with context-based identifiers:

```rust
use wami_core::context::WamiContext;
use wami_credentials::build_access_key;

let context = WamiContext::builder()
    .instance_id("123456789012")
    .tenant_path(wami_core::arn::TenantPath::single(0))
    .caller_arn(/* ... */)
    .build()
    .unwrap();

let access_key = build_access_key("alice".into(), &context)?;
```

### `update_access_key_status`

Updates the status of an access key:

```rust
use wami_credentials::update_access_key_status;

let access_key = update_access_key_status(access_key, "Inactive".to_string());
```

### `add_provider_to_access_key`

Adds a provider configuration to an access key:

```rust
use wami_credentials::add_provider_to_access_key;
use wami_provider::ProviderConfig;

let config = ProviderConfig::aws(/* ... */);
let access_key = add_provider_to_access_key(access_key, config);
```

## Request Types

The module provides request and response types for access key operations:
- `CreateAccessKeyRequest` – Request to create a new access key
- `ListAccessKeysRequest` – Request to list access keys for a user
- `ListAccessKeysResponse` – Response containing a list of access keys and pagination info
- `UpdateAccessKeyRequest` – Request to update an access key's status

## Usage Example

```rust
use wami_core::context::WamiContext;
use wami_credentials::{build_access_key, AccessKey};

let context = WamiContext::builder()
    .instance_id("123456789012")
    .tenant_path(wami_core::arn::TenantPath::single(0))
    .caller_arn(
        wami_core::arn::WamiArn::builder()
            .service(wami_core::arn::Service::Iam)
            .tenant(0)
            .wami_instance("123456789012")
            .resource("user", "admin")
            .build()
            .unwrap(),
    )
    .is_root(false)
    .build()
    .unwrap();

// Create a new access key
let access_key = build_access_key("alice".into(), &context)?;

// Access key ID follows AWS format (AKIA prefix)
assert!(access_key.access_key_id.starts_with("AKIA"));
assert_eq!(access_key.status, "Active");
assert!(access_key.wami_arn.to_string().contains("access-key"));
```