Expand description
ARN (Amazon Resource Name) module for WAMI’s multi-tenant, multi-cloud architecture.
This module provides a comprehensive ARN system that supports:
- Multi-tenant hierarchies (e.g.,
t1/t2/t3) - Multi-cloud provider mapping (AWS, GCP, Azure, Scaleway)
- Resource identification by stable IDs (not names)
- Bidirectional transformation between WAMI and provider-specific formats
§ARN Format
§WAMI Native (no cloud sync):
arn:wami:{service}:{tenant_path}:wami:{wami_instance_id}:{resource_type}/{resource_id}
Example: arn:wami:iam:12345678/87654321/99999999:wami:999888777:user/77557755§Cloud-Synced Resources:
arn:wami:{service}:{tenant_path}:wami:{wami_instance_id}:{provider}:{provider_account_id}:{resource_type}/{resource_id}
Examples:
- arn:wami:iam:12345678/87654321/99999999:wami:999888777:aws:223344556677:user/77557755
- arn:wami:iam:12345678/87654321/99999999:wami:999888777:gcp:554433221:user/77557755§Usage
§Building ARNs
Use the fluent builder API:
use wami_core::arn::{WamiArn, Service};
// WAMI native ARN
let arn = WamiArn::builder()
.service(Service::Iam)
.tenant_hierarchy(vec![12345678, 87654321, 99999999])
.wami_instance("999888777")
.resource("user", "77557755")
.build()
.unwrap();
assert_eq!(
arn.to_string(),
"arn:wami:iam:12345678/87654321/99999999:wami:999888777:user/77557755"
);
// Cloud-synced ARN
let arn = WamiArn::builder()
.service(Service::Iam)
.tenant(12345678)
.wami_instance("999888777")
.cloud_provider("aws", "223344556677")
.resource("user", "77557755")
.build()
.unwrap();
assert!(arn.is_cloud_synced());§Parsing ARNs
use wami_core::arn::WamiArn;
use std::str::FromStr;
let arn = WamiArn::from_str("arn:wami:iam:12345678:wami:999888777:user/77557755").unwrap();
assert_eq!(arn.resource_type(), "user");
assert_eq!(arn.primary_tenant(), Some("12345678".to_string()));§Transforming to Provider Formats
Requires the aws feature; provider translations are off by default.
use wami_core::arn::{WamiArn, Service, AwsArnTransformer, ArnTransformer};
let arn = WamiArn::builder()
.service(Service::Iam)
.tenant(12345678)
.wami_instance("999888777")
.cloud_provider("aws", "223344556677")
.resource("user", "77557755")
.build()
.unwrap();
let transformer = AwsArnTransformer;
let aws_arn = transformer.to_provider_arn(&arn).unwrap();
assert_eq!(aws_arn, "arn:aws:iam::223344556677:user/77557755");Re-exports§
pub use builder::ArnBuilder;pub use matching::glob_match;pub use matching::matches_arn_pattern;pub use matching::MatchContext;pub use parser::parse_arn;pub use parser::ArnParseError;pub use transformer::available_providers;pub use transformer::get_transformer;pub use transformer::ArnTransformer;pub use transformer::ProviderArnInfo;pub use types::CloudMapping;pub use types::Resource;pub use types::Service;pub use types::TenantPath;pub use types::WamiArn;pub use types::ROOT_TENANT_ID;pub use types::ROOT_USER_NAME;
Modules§
- builder
- Fluent builder for constructing WAMI ARNs.
- matching
- ARN Pattern Matching with Variable Substitution and Double-Star Globbing
- parser
- ARN parsing and serialization.
- transformer
- Translating WAMI ARNs to and from provider formats.
- types
- Core ARN types and structures for WAMI’s multi-tenant, multi-cloud architecture.