diff --git a/Cargo.lock b/Cargo.lock
index 76484079..34cf4af5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1925,6 +1925,7 @@ dependencies = [
"async-trait",
"aws-config",
"aws-credential-types",
+ "aws-sdk-s3tables",
"bytes",
"chrono",
"dashmap",
diff --git a/Cargo.toml b/Cargo.toml
index 5ad311ae..61de8d06 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -34,7 +34,8 @@ queries = { path = "crates/queries" }
async-trait = { version = "0.1.84" }
aws-config = { version = "1.5.17" }
aws-sdk-dynamodb = { version = "1.100.0" }
-aws-credential-types = { version = "1.2.1", features = ["hardcoded-credentials"]}
+aws-sdk-s3tables = { version = "1.47.0" }
+aws-credential-types = { version = "1.2.11", features = ["hardcoded-credentials"]}
axum = { version = "0.8.1", features = ["multipart", "macros"] }
axum-macros = "0.5"
bytes = { version = "1.8.0" }
diff --git a/crates/catalog-metastore/Cargo.toml b/crates/catalog-metastore/Cargo.toml
index 3b409c0b..17b26eab 100644
--- a/crates/catalog-metastore/Cargo.toml
+++ b/crates/catalog-metastore/Cargo.toml
@@ -10,7 +10,8 @@ error-stack = { path = "../error-stack" }
async-trait = { workspace = true }
aws-config = { workspace = true }
-aws-credential-types = { version = "1.2.11" }
+aws-sdk-s3tables = { workspace = true }
+aws-credential-types = { workspace = true }
chrono = { workspace = true }
dashmap = { workspace = true }
iceberg-rust = { workspace = true }
diff --git a/crates/catalog-metastore/src/metastore_bootstrap_config.rs b/crates/catalog-metastore/src/metastore_bootstrap_config.rs
index c50243e8..ae6f2579 100644
--- a/crates/catalog-metastore/src/metastore_bootstrap_config.rs
+++ b/crates/catalog-metastore/src/metastore_bootstrap_config.rs
@@ -3,7 +3,10 @@ use crate::{
SchemaIdent, TableFormat, TableIdent, Volume, VolumeIdent, VolumeType,
};
use aws_config::meta::credentials::CredentialsProviderChain;
-use aws_credential_types::provider::ProvideCredentials;
+use aws_config::{BehaviorVersion, Region};
+use aws_credential_types::Credentials;
+use aws_credential_types::provider::{ProvideCredentials, SharedCredentialsProvider};
+use aws_sdk_s3tables::Client as S3TablesClient;
use iceberg_rust::spec::table_metadata::TableMetadata;
use iceberg_rust::spec::util::strip_prefix;
use serde::Deserialize;
@@ -426,8 +429,14 @@ async fn load_volume_from_env() -> Result