Bring your own bucket
Verify S3 access and configure customer-owned storage for a cluster or database.
Bring your own bucket
This guide configures customer-owned storage for RawTree Cloud. It changes the storage destinations without moving database compute into your cloud account. For that deployment model, see RawTree BYOC.
Configure a customer IAM role and separate data and backup destinations. The
API stores the storage configuration and returns bucket and path metadata.
Send API requests to https://api.rawtree.com.
Verify access for a cluster
Prepare two S3 buckets and an IAM role. Send the proposed External ID in
s3_storage_access, not in s3_storage.
Call POST /v1/clusters/verify-s3-access?organization=<organization>:
{
"s3_storage_access": {
"external_id": "rawtree-example-external-id"
},
"s3_storage": {
"data": { "bucket": "acme-data", "path": "rawtree/data" },
"backups": { "bucket": "acme-backups", "path": "rawtree/backups" },
"role_arn": "arn:aws:iam::123456789012:role/RawTreeStorage"
}
}The response contains verified and message:
{ "verified": true, "message": "<verification result>" }Resolve any returned validation error before creating the cluster. The check does not save the External ID.
The role ARN must contain a 12-digit account ID and a role/ resource. The
external ID must contain 2–1,224 letters, numbers, or _ + = , . @ : / -.
The backend delegates access verification to the cluster service. The verifier
checks role trust and S3 permissions, but the backend source does not enumerate
S3 actions. Newly changed IAM policies may need several seconds to propagate.
Create a cluster with the buckets
Send the same s3_storage object with
POST /v1/clusters?organization=<organization>, along with the required name,
region ID, replica count, and size.
Choose an enabled region from GET /v1/regions.
{
"name": "analytics",
"region_id": "11111111-1111-4111-8111-111111111111",
"replicas": 1,
"size": { "cpu_cores": 2, "memory_gib": 8 },
"s3_storage_access": {
"external_id": "rawtree-example-external-id",
"resource_tag": "rawtree-example-resource-tag"
},
"s3_storage": {
"data": { "bucket": "acme-data", "path": "rawtree/data" },
"backups": { "bucket": "acme-backups", "path": "rawtree/backups" },
"role_arn": "arn:aws:iam::123456789012:role/RawTreeStorage"
}
}Save id and s3_storage_access from the cluster response. These identity
values cannot change after cluster creation. Apply
rawtree.com/cluster=<resource_tag> to both buckets and the IAM role. The size
and replica count must match GET /v1/clusters/sizes.
Verify access for a database
Database-level storage requires a cluster with S3 access configured. Call
POST /v1/databases/verify-s3-access with the database name and bucket settings:
{
"name": "analytics_archive",
"s3_storage": {
"data": { "bucket": "acme-archive-data", "path": "tables" },
"backups": { "bucket": "acme-archive-backups", "path": "snapshots" },
"role_arn": "arn:aws:iam::123456789012:role/RawTreeStorage"
}
}The backend loads the cluster's saved External ID. The customer role trust
policy must require that ID. Do not add external_id to a database request.
Tag both database buckets and the customer IAM role with
rawtree.com/cluster=<resource_tag> from the cluster response. The verification
response contains verified and message. If it succeeds, send the same object to
POST /v1/databases. Its response contains the created database:
{ "database": { "name": "analytics_archive" } }Save database.name for later requests.
Untested: These steps require real AWS credentials, buckets, IAM policies, and an environment that supports customer-owned S3 storage.