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
- Cloud
Mapping - Represents a cloud provider mapping for synced resources.
- Pagination
Params - Common pagination parameters
- Policy
Document - Policy document representation
- Policy
Statement - Provider
ArnInfo - Information extracted from a provider-specific ARN.
- Resource
- Represents a resource (type and ID).
- Session
Info - Session information for temporary credentials
- Tag
- Tag representation
- Tenant
Path - Represents a hierarchical tenant path.
- WamiArn
- Represents a WAMI ARN (Amazon Resource Name).
- Wami
Context - WAMI Context - carries authentication and authorization information
Enums§
- AmiError
- ArnParse
Error - Error type for ARN parsing.
- Service
- WAMI service types.
Traits§
- ArnTransformer
- Trait for transforming WAMI ARNs to and from provider-specific formats.
- Option
Ext - 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.