Skip to main content

Crate wami

Crate wami 

Source
Expand description

WAMI - Who Am I: Multicloud Identity and Access Management library for Rust

This library provides a multicloud implementation of Identity and Access Management (IAM), Security Token Service (STS), and Single Sign-On Admin operations. It’s designed to work across multiple cloud providers (AWS, GCP, Azure, and custom platforms) and can be used for testing, development, or as a unified identity layer for multicloud environments.

§Features

  • 🌐 Multicloud Support: AWS, GCP, Azure, and custom identity providers
  • IAM Operations: Complete user, group, role, and policy management
  • STS Operations: Temporary credentials and identity inspection
  • SSO Admin Operations: Permission sets, assignments, and instances
  • Pluggable Storage: In-memory, database, or cloud-native backends
  • Async API: All operations are asynchronous for better performance
  • Type Safety: Strongly typed requests and responses

§Example

use wami::store::memory::InMemoryStore;
use wami::store::{Store, traits::UserStore};
use wami::arn::{TenantPath, WamiArn};
use wami::context::WamiContext;
use wami::wami::identity::user::builder::build_user;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Initialize logging
    env_logger::init();
     
    // Initialize store
    let mut store = InMemoryStore::default();
     
    // Create WamiContext
    let context = WamiContext::builder()
        .instance_id("123456789012")
        .tenant_path(TenantPath::single(0))
        .caller_arn(
            WamiArn::builder()
                .service(wami::arn::Service::Iam)
                .tenant_path(TenantPath::single(0))
                .wami_instance("123456789012")
                .resource("user", "admin")
                .build()?,
        )
        .is_root(false)
        .build()?;
     
    // Build a user using pure functions
    let user = build_user(
        "alice".to_string(),
        Some("/".to_string()),
        &context,
    )?;
     
    // Store the user
    let created_user = store.wami_store().await?.create_user(user).await?;
    println!("Created user: {}", created_user.user_name);
    println!("User ARN: {}", created_user.arn);
     
    // Retrieve the user
    let retrieved = store.wami_store().await?.get_user("alice").await?;
    if let Some(user) = retrieved {
        println!("Retrieved user: {}", user.user_name);
    }
     
    Ok(())
}

Re-exports§

pub use store::memory::InMemoryStore;
pub use store::SsoAdminStore;
pub use store::Store;
pub use store::StsStore;
pub use store::WamiStore;
pub use provider::ProviderConfig;
pub use service::hash_secret;
pub use service::verify_secret;
pub use service::AccessKeyService;
pub use service::AccountAssignmentService;
pub use service::ApplicationService;
pub use service::AssumeRoleService;
pub use service::AttachmentService;
pub use service::AuthenticationService;
pub use service::AuthorizationService;
pub use service::CredentialReportService;
pub use service::EvaluationService;
pub use service::FederationService;
pub use service::GroupService;
pub use service::IdentityService;
pub use service::InlinePolicyService;
pub use service::InstanceService as SsoInstanceService;
pub use service::LoginProfileService;
pub use service::MfaDeviceService;
pub use service::OAuthService;
pub use service::PermissionSetService;
pub use service::PolicyService;
pub use service::RoleService;
pub use service::ServerCertificateService;
pub use service::ServiceCredentialService;
pub use service::ServiceLinkedRoleService;
pub use service::SessionService;
pub use service::SessionTokenService;
pub use service::SigningCertificateService;
pub use service::TenantService;
pub use service::TrustedTokenIssuerService;
pub use service::UserService;
pub use wami::instance;
pub use wami::sso_admin;
pub use wami::sts;
pub use wami::tenant;
pub use wami::instance::InstanceBootstrap;
pub use wami::instance::RoleSeed;
pub use wami::instance::RootCredentials;
pub use wami::identity::Group;
pub use wami::identity::Role;
pub use wami::identity::RootUser;
pub use wami::identity::User;
pub use credentials::AccessKey;
pub use credentials::LoginProfile;
pub use credentials::MfaDevice;
pub use credentials::ServerCertificate;
pub use credentials::ServiceSpecificCredential;
pub use wami::policies::Policy;
pub use wami::reports::CredentialReport;
pub use wami::sts::Credentials;
pub use wami::sts::StsSession;
pub use wami::tenant::check_tenant_permission;
pub use wami::tenant::BillingInfo;
pub use wami::tenant::QuotaMode;
pub use wami::tenant::Tenant;
pub use wami::tenant::TenantAction;
pub use wami::tenant::TenantId;
pub use wami::tenant::TenantQuotas;
pub use wami::tenant::TenantStatus;
pub use wami::tenant::TenantType;
pub use wami::tenant::TenantUsage;
pub use credentials::access_key::AccessKeyLastUsed;
pub use credentials::access_key::CreateAccessKeyRequest;
pub use credentials::access_key::ListAccessKeysRequest;
pub use credentials::access_key::ListAccessKeysResponse;
pub use credentials::access_key::UpdateAccessKeyRequest;
pub use credentials::login_profile::CreateLoginProfileRequest;
pub use credentials::login_profile::GetLoginProfileRequest;
pub use credentials::login_profile::UpdateLoginProfileRequest;
pub use credentials::mfa_device::EnableMfaDeviceRequest;
pub use credentials::mfa_device::ListMfaDevicesRequest;
pub use credentials::server_certificate::DeleteServerCertificateRequest;
pub use credentials::server_certificate::GetServerCertificateRequest;
pub use credentials::server_certificate::GetServerCertificateResponse;
pub use credentials::server_certificate::ListServerCertificatesRequest;
pub use credentials::server_certificate::ListServerCertificatesResponse;
pub use credentials::server_certificate::UpdateServerCertificateRequest;
pub use credentials::server_certificate::UploadServerCertificateRequest;
pub use credentials::server_certificate::UploadServerCertificateResponse;
pub use credentials::service_credential::CreateServiceSpecificCredentialRequest;
pub use credentials::service_credential::CreateServiceSpecificCredentialResponse;
pub use credentials::service_credential::DeleteServiceSpecificCredentialRequest;
pub use credentials::service_credential::ListServiceSpecificCredentialsRequest;
pub use credentials::service_credential::ListServiceSpecificCredentialsResponse;
pub use credentials::service_credential::ResetServiceSpecificCredentialRequest;
pub use credentials::service_credential::ResetServiceSpecificCredentialResponse;
pub use credentials::service_credential::UpdateServiceSpecificCredentialRequest;
pub use credentials::signing_certificate::CertificateStatus;
pub use credentials::signing_certificate::DeleteSigningCertificateRequest;
pub use credentials::signing_certificate::ListSigningCertificatesRequest;
pub use credentials::signing_certificate::ListSigningCertificatesResponse;
pub use credentials::signing_certificate::SigningCertificate;
pub use credentials::signing_certificate::UpdateSigningCertificateRequest;
pub use credentials::signing_certificate::UploadSigningCertificateRequest;
pub use credentials::signing_certificate::UploadSigningCertificateResponse;
pub use wami::identity::group::CreateGroupRequest;
pub use wami::identity::group::ListGroupsRequest;
pub use wami::identity::group::ListGroupsResponse;
pub use wami::identity::group::UpdateGroupRequest;
pub use wami::identity::role::CreateRoleRequest;
pub use wami::identity::role::ListRolesRequest;
pub use wami::identity::role::ListRolesResponse;
pub use wami::identity::role::UpdateRoleRequest;
pub use wami::identity::service_linked_role::CreateServiceLinkedRoleRequest;
pub use wami::identity::service_linked_role::CreateServiceLinkedRoleResponse;
pub use wami::identity::service_linked_role::DeleteServiceLinkedRoleRequest;
pub use wami::identity::service_linked_role::DeleteServiceLinkedRoleResponse;
pub use wami::identity::service_linked_role::DeletionTaskFailureReason;
pub use wami::identity::service_linked_role::DeletionTaskInfo;
pub use wami::identity::service_linked_role::DeletionTaskStatus;
pub use wami::identity::service_linked_role::GetServiceLinkedRoleDeletionStatusRequest;
pub use wami::identity::service_linked_role::GetServiceLinkedRoleDeletionStatusResponse;
pub use wami::identity::service_linked_role::RoleUsageType;
pub use wami::identity::user::CreateUserRequest;
pub use wami::identity::user::ListUsersRequest;
pub use wami::identity::user::ListUsersResponse;
pub use wami::identity::user::UpdateUserRequest;
pub use wami::policies::attachment::AttachGroupPolicyRequest;
pub use wami::policies::attachment::AttachGroupPolicyResponse;
pub use wami::policies::attachment::AttachRolePolicyRequest;
pub use wami::policies::attachment::AttachRolePolicyResponse;
pub use wami::policies::attachment::AttachUserPolicyRequest;
pub use wami::policies::attachment::AttachUserPolicyResponse;
pub use wami::policies::attachment::AttachedPolicy;
pub use wami::policies::attachment::DetachGroupPolicyRequest;
pub use wami::policies::attachment::DetachGroupPolicyResponse;
pub use wami::policies::attachment::DetachRolePolicyRequest;
pub use wami::policies::attachment::DetachRolePolicyResponse;
pub use wami::policies::attachment::DetachUserPolicyRequest;
pub use wami::policies::attachment::DetachUserPolicyResponse;
pub use wami::policies::attachment::ListAttachedGroupPoliciesRequest;
pub use wami::policies::attachment::ListAttachedGroupPoliciesResponse;
pub use wami::policies::attachment::ListAttachedRolePoliciesRequest;
pub use wami::policies::attachment::ListAttachedRolePoliciesResponse;
pub use wami::policies::attachment::ListAttachedUserPoliciesRequest;
pub use wami::policies::attachment::ListAttachedUserPoliciesResponse;
pub use wami::policies::evaluation::ContextEntry;
pub use wami::policies::evaluation::EvaluationResult;
pub use wami::policies::evaluation::SimulateCustomPolicyRequest;
pub use wami::policies::evaluation::SimulatePolicyResponse;
pub use wami::policies::evaluation::SimulatePrincipalPolicyRequest;
pub use wami::policies::evaluation::StatementMatch;
pub use wami::policies::inline::DeleteGroupPolicyRequest;
pub use wami::policies::inline::DeleteGroupPolicyResponse;
pub use wami::policies::inline::DeleteRolePolicyRequest;
pub use wami::policies::inline::DeleteRolePolicyResponse;
pub use wami::policies::inline::DeleteUserPolicyRequest;
pub use wami::policies::inline::DeleteUserPolicyResponse;
pub use wami::policies::inline::GetGroupPolicyRequest;
pub use wami::policies::inline::GetGroupPolicyResponse;
pub use wami::policies::inline::GetRolePolicyRequest;
pub use wami::policies::inline::GetRolePolicyResponse;
pub use wami::policies::inline::GetUserPolicyRequest;
pub use wami::policies::inline::GetUserPolicyResponse;
pub use wami::policies::inline::InlinePolicy;
pub use wami::policies::inline::ListGroupPoliciesRequest;
pub use wami::policies::inline::ListGroupPoliciesResponse;
pub use wami::policies::inline::ListRolePoliciesRequest;
pub use wami::policies::inline::ListRolePoliciesResponse;
pub use wami::policies::inline::ListUserPoliciesRequest;
pub use wami::policies::inline::ListUserPoliciesResponse;
pub use wami::policies::inline::PutGroupPolicyRequest;
pub use wami::policies::inline::PutGroupPolicyResponse;
pub use wami::policies::inline::PutRolePolicyRequest;
pub use wami::policies::inline::PutRolePolicyResponse;
pub use wami::policies::inline::PutUserPolicyRequest;
pub use wami::policies::inline::PutUserPolicyResponse;
pub use wami::policies::policy::CreatePolicyRequest;
pub use wami::policies::policy::ListPoliciesRequest;
pub use wami::policies::policy::ListPoliciesResponse;
pub use wami::policies::policy::UpdatePolicyRequest;
pub use wami::reports::credential_report::AccountSummaryMap;
pub use wami::reports::credential_report::CredentialReport as CredentialReportType;
pub use wami::reports::credential_report::GenerateCredentialReportRequest;
pub use wami::reports::credential_report::GenerateCredentialReportResponse;
pub use wami::reports::credential_report::GetAccountSummaryRequest;
pub use wami::reports::credential_report::GetAccountSummaryResponse;
pub use wami::reports::credential_report::GetCredentialReportRequest;
pub use wami::reports::credential_report::GetCredentialReportResponse;
pub use wami::reports::credential_report::ReportState;
pub use wami::tags::ListResourceTagsRequest;
pub use wami::tags::TagResourceRequest;
pub use wami::tags::UntagResourceRequest;
pub use sts::AssumeRoleRequest;
pub use sts::GetSessionTokenRequest;

Modules§

arn
ARN (Amazon Resource Name) module for WAMI’s multi-tenant, multi-cloud architecture.
context
WAMI Context - Authentication and Authorization Context
credentials
Credential management: access keys, MFA devices, login profiles, and certificates.
error
provider
Cloud Provider Abstraction
service
Service Layer
store
Store Module
types
wami
WAMI - Web-compatible Access Management Interface

Structs§

AmiResponse
Common response wrapper for AWS operations
ArnBuilder
A fluent builder for constructing WAMI ARNs.
AwsConfig
AWS region configuration
CloudMapping
Represents a cloud provider mapping for synced resources.
PaginationParams
Common pagination parameters
PolicyDocument
Policy document representation
PolicyStatement
ProviderArnInfo
Information extracted from a provider-specific ARN.
Resource
Represents a resource (type and ID).
SessionInfo
Session information for temporary credentials
Tag
Tag representation
TenantPath
Represents a hierarchical tenant path.
WamiArn
Represents a WAMI ARN (Amazon Resource Name).
WamiContext
WAMI Context - carries authentication and authorization information

Enums§

AmiError
ArnParseError
Error type for ARN parsing.
Service
WAMI service types.

Traits§

ArnTransformer
Trait for transforming WAMI ARNs to and from provider-specific formats.
OptionExt
Extension trait for Option to provide convenient error handling

Functions§

available_providers
The providers this build can translate for.
create_memory_store
Create a new in-memory store
get_transformer
Gets the appropriate transformer for a given provider.
parse_arn
Parses a WAMI ARN from a string, returning a Result with AmiError.

Type Aliases§

Result