Skip to content

IAM permissions

The task role in deploy/keyvector.yaml can do what the connector needs, and nothing else:

Purpose Actions Scope
Read the change stream cassandra:GetStream, GetShardIterator, GetRecords This table’s stream
Find the stream cassandra:ListStreams * (no resource-level scope exists)
Read rows (backfill, query) cassandra:Select This table, and the system* keyspaces the driver reads the schema from
Lease tables DynamoDB read, write, create <stack>-lease-table* only
Vector index s3vectors:PutVectors, DeleteVectors, GetVectors, QueryVectors, GetIndex This index
Dead-letter queue sqs:SendMessage, ReceiveMessage, DeleteMessage This stack’s queue
Metrics cloudwatch:PutMetricData *
Embeddings bedrock:InvokeModel The chosen model, only when the embedder is Bedrock

An OpenAI-compatible API key, if any, comes from Secrets Manager through the execution role and reaches the container as an environment variable; it’s never logged.