aws s3 commands or Boto3 code against your buckets using credentials that expire on their own.
CoreWeave sandboxes are in public preview. For access, contact your CoreWeave account team, CoreWeave Support, or email support@coreweave.com.
How it works
The sandbox gateway issues each sandbox a JSON Web Token (JWT) from the fixed CoreWeave issuerhttps://oidc.cwsandbox.com. AI Object Storage validates that token against a workload federation configuration in your organization, derives a role identity from the token’s iss and sub claims, and returns temporary credentials scoped by your access policies.
Three pieces of configuration have to line up:
The derived role identity follows the format
role/https://oidc.cwsandbox.com:user:[USER-ID], where [USER-ID] is the CoreWeave user ID of the caller whose API access token started the sandbox. Because the subject varies per user, access policies either list each user’s role or match the whole issuer with a trailing wildcard. See Grant permissions to the sandbox role.
Inside the sandbox, no credential-fetching process of your own is needed. The AWS SDK’s container credentials provider reads the mounted token, calls the CoreWeave credential endpoint, and refreshes the credentials before they expire.
Before you begin
The administrator steps require the following:- A CoreWeave organization with AI Object Storage enabled, and at least one bucket. To create one, see Create a bucket.
- Administrator privileges for your organization: the IAM Admin and Object Storage Admin roles, or equivalent legacy access.
- The
SANDBOX_ADMINaction in Identity and Access Management (IAM), which lets you set the sandbox WIF configuration. Grant it on the Access Policies page in the cloud console. - Your CoreWeave organization ID, shown on the Settings page in the cloud console.
- A CoreWeave API access token. Generate one on the Tokens page and copy the Token Secret value. For more information, see Manage API access tokens.
curl examples on this page can read it:
Step 1: Create an OIDC workload federation config
Register the sandbox issuer with your organization so that AI Object Storage accepts sandbox tokens.- In the cloud console, go to the Workload Federation page.
- Click Create OIDC configuration.
-
Provide the following values:
- Name: a name that identifies this configuration, such as
coreweave-sandboxes. - Issuer URL:
https://oidc.cwsandbox.com - Client ID (Audience):
https://oidc.cwsandbox.com - Description (Optional): a description of this configuration.
- Name: a name that identifies this configuration, such as
- Click Create.
Step 2: Grant permissions to the sandbox role
Organization access policies decide what a sandbox can do with the credentials it receives. Two grants are required, and they must be separate statements because the token exchange action is global while the S3 actions are scoped to buckets. The following policy grants the token exchange. Thecwobject:CreateAccessKeyOIDC action operates on all resources, so its statement uses "resources": ["*"]. Replace [USER-ID] with the CoreWeave user ID whose API access token starts sandboxes:
role/https://oidc.cwsandbox.com:*. Because the issuer portion still has to match exactly, this grant applies only to sandbox tokens, not to other identity providers you federate.
Next, grant the credentials permission to act on buckets. Replace [BUCKET-NAME] with the bucket your sandboxes use:
arn:aws:iam::[ORG-ID]:role/https://oidc.cwsandbox.com:*, and claims are referenced as condition keys named oidc:[ORG-ID]:[CLAIM]. See Token claims for the claims a sandbox token carries.
Step 3: Register the WIF configuration with the sandbox control plane
Tell the sandbox control plane which workload federation configuration to mint tokens against, and set the ceiling on what any sandbox in your organization may request. There is one configuration per organization, and the request is an idempotent upsert. Replace[WIF-CONFIG-ID] with the Config ID from Step 1 and [BUCKET-NAME] with each bucket you want to allow:
Set the sandbox WIF configuration
The organization comes from the authenticated caller, so the request body has no organization field, and callers can only manage their own organization’s configuration.
Confirm the configuration was stored:
Get the sandbox WIF configuration
Delete the sandbox WIF configuration
Step 4: Request object storage access when you start a sandbox
Steps 1 through 3 are one-time administrator setup for the organization. The remaining steps are what a researcher does for each sandbox that needs object storage. Object storage access is opt-in per sandbox. AddobjectStorageAccess to the start request, naming the buckets the sandbox needs and the permission level it requires:
Start a sandbox with object storage access
buckets list must be a subset of allowedBuckets, and permission cannot exceed maxPermission. A request that asks for more than the organization allows is rejected, as is any request made while the organization has no active WIF configuration.
Requesting a narrower scope than the ceiling is worthwhile: a sandbox that only reads training data should ask for OBJECT_STORAGE_PERMISSION_READ even in an organization whose ceiling is read-write.
Step 5: Use the credentials inside the sandbox
When a sandbox starts withobjectStorageAccess, the control plane mounts its OIDC token and sets the environment variables that AWS SDKs use for container credentials:
The token itself is a read-only file at
/var/run/secrets/sandbox/storage-token/osa-token. You don’t need to read it, and you shouldn’t copy it out of the sandbox or pass it to another workload.
Your client library performs the exchange. Set the region for your buckets, then use any S3-compatible client. Replace [AVAILABILITY-ZONE] with the availability zone your buckets are in, such as US-EAST-04A:
List objects from inside a sandbox
PathStyleRequestNotAllowed.
Boto3 picks up the same environment variables, so no explicit credentials are needed. The following example lists objects in a bucket, reading the endpoint and region from the sandbox environment:
list_objects.py
BUCKET_NAME set to the bucket you granted:
Example output
Credential exchange needs SDK support for container credentials against a non-loopback host. Use
awscli 2.33.2 or later, or boto3 1.42.5 or later. Older versions fail with Unsupported host 'api.coreweave.com'. Build these versions into your sandbox container image.Token lifetimes
The sandbox OIDC token and the temporary credentials it buys expire on different schedules:- Sandbox OIDC token: one hour by default, up to a maximum of 12 hours. The control plane mints it when the sandbox starts.
- Temporary AI Object Storage credentials: minted on demand from the token. The exchange response carries an
Expirationtimestamp, and the AWS SDK refreshes the credentials before that time without any action from your code.
maxLifetimeSeconds on the start request so the token covers the sandbox’s full lifetime.
Token claims
Sandbox object storage tokens carry the following claims. Reference them in bucket policy conditions asoidc:[ORG-ID]:[CLAIM]:
Troubleshooting
The following sections describe the failures you are most likely to see when setting up or using sandbox object storage access, and what to check for each one.The start request is rejected
If a start request withobjectStorageAccess fails, check that:
- The organization has a WIF configuration with
enabledset totrue. Retrieve it with the Get request in Step 3. - Every bucket in the request appears in
allowedBuckets, orallowedBucketsis empty. - The requested
permissiondoes not exceedmaxPermission.
Credential exchange returns permission denied
If the first S3 operation fails with a permission error, the exchange itself was refused. Check that:- An organization access policy grants
cwobject:CreateAccessKeyOIDCon"resources": ["*"]to the sandbox role, in its own statement. - The policy principal matches the derived role exactly, including the
user:prefix on the subject. The principal isrole/https://oidc.cwsandbox.com:user:[USER-ID], notrole/https://oidc.cwsandbox.com:[USER-ID]. - The workload federation configuration in the cloud console is active and its issuer URL is
https://oidc.cwsandbox.com, with no hyphen. - The sandbox OIDC token has not expired. Restart the sandbox to mint a fresh one.
Credential exchange succeeds but S3 operations return AccessDenied
The exchange worked and the resulting credentials lack bucket permissions. Confirm that an organization access policy grants the neededs3: actions on the short-form bucket resources ([BUCKET-NAME] and [BUCKET-NAME]/*) to the sandbox role. If bucket access policies also apply, check them for Deny statements, which override any Allow.
The credential request times out
Sandboxes on a profile with allowlist-only egress must be able to reachhttps://api.coreweave.com. Without that route, the credential fetch times out and the first S3 operation fails. Add the host to the profile’s egress allowlist. See Configure a profile.
The workload creates a large number of access keys
Each exchange creates a short-lived access key. Let the SDK’s credential provider cache and refresh the credentials for the lifetime of your process instead of constructing a new client per work item. Minting keys per request generates large volumes of keys for no benefit.Related pages
- Workload Identity Federation for AI Object Storage: how WIF works across CoreWeave.
- Use Workload Identity Federation with OIDC: the general OIDC federation guide, for identity providers other than sandboxes.
- Organization access policies: the policy schema used in Step 2.
- Sandboxes architecture: where the gateway and runner sit in the sandbox request path.