Douklar 4.0.0, 23 October 2026.A new CLI, douklar, and retry of unfinished objects from a finished S3 Batch job.Read the release notes

Douklar

AWS permissions per service

What each profile needs in AWS, read and write, for discovery, preflight and each kind of move.

View as Markdown

Each profile acts in its own account: the source profile reads, the destination profile writes. Grant each one what its side of the move needs.

Reads for discovery and checks

ServiceActions
STSGetCallerIdentity
S3ListBuckets, GetBucketLocation
ECRDescribeRepositories, DescribeImages, BatchGetImage (also covers ListImageReferrers)
CodeCommitBatchGetRepositories, on both sides, before any Git operation
IAM Identity Centersso:GetRoleCredentials, sso:ListAccounts, sso:ListAccountRoles; sso-oidc:RegisterClient, StartDeviceAuthorization, CreateToken; sts:AssumeRole only for a role chained after SSO

Optional reads for preflight

s3:GetEncryptionConfiguration on both buckets, ecr:DescribeRepositories on the mapped repositories and kms:DescribeKey on the keys they name. Douklar calls kms:DescribeKey directly, so do not put it under a kms:ViaService condition. Without these reads, the encryption posture shows "unknown" and the run is not blocked.

Per service

MoveSource profileDestination profile
S3, worker relays3:ListBucket, s3:GetObject on the selected scopes3:ListBucket, s3:PutObject on the destination scope
S3, server-side copyOne copy identity reads the source and writes the destination: the same S3 actions on both buckets
DynamoDBdynamodb:DescribeTable, DescribeTimeToLive, Scandynamodb:DescribeTable, DescribeTimeToLive, PutItem
ECRPull of the selected image and its referrersPush and tag in the destination repository
CodeCommitGit pull of the repositoryGit push to the existing repository

Copying an object's own metadata needs no version, tag, ACL or KMS-control permission. DynamoDB needs no UpdateTimeToLive.

S3 Batch Operations

In the destination account, after you confirm Prepare: s3:CreateBucket for the operations bucket, iam:CreateRole and iam:PutRolePolicy for the Batch role, then s3:PutObject for the manifest, s3control:CreateJob and s3control:UpdateJobStatus (Cancel, and Start for a held job). Set S3_BATCH_ROLE_NAME to use a role you already manage instead.

Keys

The writing profile needs kms:GenerateDataKey and kms:Decrypt on the destination key; the reading profile needs kms:Decrypt on the source key. A key in another account also needs a key-policy statement there. Examples: Hand a change to the other account's admin.

Log delivery

To deliver audit and run logs to S3: s3:PutObject on the configured bucket and prefix only, plus kms:GenerateDataKey when that bucket uses a customer managed key.

Keyboard shortcuts

g h
Home
g c
The console
g m
Use cases
g d
Docs
g r
Releases
/ or Ctrl K
Search the docs (on docs pages)
t
Switch light and dark
?
Show this list