overcast local AWS emulator

Service Reference

Secrets Manager — endpoint support

Generated for Overcast. See also: AWS Secrets Manager API Reference

Secrets Manager — endpoint support

Generated for Overcast. See also: AWS Secrets Manager API Reference

Summary

Protocol

Secrets Manager accepts AWS JSON 1.1 requests via X-Amz-Target: secretsmanager.<Operation> and Smithy RPC v2 CBOR requests via /service/secretsmanager/operation/<Operation> with Smithy-Protocol: rpc-v2-cbor.

Category✅ Supported❌ Unsupported
Secret CRUD90
Rotation30
Tags20
Password10
Policy/Misc43
Total193

Endpoint details

OperationStatusNotesAWS docs
CreateSecretString + binary, tags, descriptionlink
GetSecretValueBy name, ARN, version ID, or stagelink
DescribeSecretMetadata, tags, versions, rotationlink
PutSecretValueStaging labels + ClientRequestTokenlink
UpdateSecretDescription + optional new valuelink
ListSecretsSorted by name, optional filterslink
ListSecretVersionIdsAll versions with staging labelslink
DeleteSecretImmediate (ForceDelete) onlylink
TagResourceMerge/overwrite tagslink
RotateSecretInvokes the rotation Lambda, 4 stepslink
CancelRotateSecretTurns rotation off, keeps configlink
UpdateSecretVersionStageMoves staging labels between versionslink
UntagResourceRemoves specified tag keyslink
RestoreSecretReturns 501link
GetResourcePolicyStored policy; not evaluatedlink
PutResourcePolicyValidated + stored; not evaluatedlink
DeleteResourcePolicyRemoves the stored policylink
ReplicateSecretToRegionsReturns 501link
RemoveRegionsFromReplicationReturns 501link
ValidateResourcePolicySyntax + schema checks, no evaluationlink
GetRandomPasswordLength, exclusions, RequireEachIncludedTypelink
BatchGetSecretValuePartial results on missing secretslink

SDK compatibility

SDKTested
AWS SDK for Go v2
AWS SDK for JavaScript v3
boto3 (Python)
AWS SDK for Java
AWS SDK for .NET

Notes

  • Versioning: PutSecretValue honours ClientRequestToken (which becomes the version ID) and VersionStages (default AWSCURRENT). Taking AWSCURRENT off a version moves AWSPREVIOUS onto it. Versions carrying a staging label are never pruned. A version that exists but holds no value — the state a rotation leaves between staging AWSPENDING and the function writing to it — is listed by DescribeSecret but reported as ResourceNotFoundException by GetSecretValue, and PutSecretValue under that token fills it rather than answering ResourceExistsException.
  • Deletion: ForceDeleteWithoutRecovery is always treated as immediate deletion. Recovery window scheduling is not implemented, which is why RestoreSecret is still a 501.
  • Lookup: Secrets resolve by name, by full ARN, or by the partial ARN without the six-character random suffix — all three, as on AWS. With no version selector, every GetSecretValue and internal service read resolves the version currently labelled AWSCURRENT; Overcast adds no server-side value cache.
  • Password generation: GetRandomPassword honours PasswordLength (default 32, modeled range 1–4096), the Exclude* settings, IncludeSpace, and RequireEachIncludedType — which, as on AWS, defaults to true, so a generated password holds at least one character of every type the exclusions left available. CloudFormation’s AWS::SecretsManager::Secret GenerateSecretString generates through this same operation rather than carrying its own generator; see CloudFormation § Notes.
  • KMS metadata: CreateSecret and UpdateSecret persist KmsKeyId; DescribeSecret and ListSecrets return it. Overcast records the selected key as AWS-visible metadata but does not perform KMS encryption.

Rotation

RotateSecret runs AWS’s four-step protocol against the local Lambda emulator, invoking the configured rotation function once per step — createSecret, setSecret, testSecret, finishSecret — with the payload AWS sends ({"Step", "SecretId", "ClientRequestToken"}) and the same token throughout. Each step must return before the next starts, so the synchronous invoke path is used. Automatic rotation on a RotationRules schedule is driven by one background loop over the injected clock; NextRotationDate and LastRotatedDate reflect what actually happened.

Before the first invocation, the ClientRequestToken is made a version of the secret staged AWSPENDING, with no value in it — as AWS does. Every rotation blueprint AWS publishes opens by asserting exactly that, for every step including createSecret, so a rotation function copied from one of them works against Overcast unmodified.

Two deliberate divergences from AWS, both chosen so a local failure is visible rather than silent:

  • Rotation is synchronous. AWS’s RotateSecret returns immediately and rotates in the background. Overcast returns once the sequence has finished, so the secret has rotated by the time the call comes back.
  • A failed step fails the call. AWS answers 200 and reports the failure through CloudTrail and the console, which a local emulator has no equivalent of. Overcast returns InvalidRequestException naming the step that failed, leaves the staging labels exactly as the function left them, and records the attempt so the web console can show it. Reporting success for a rotation that did not happen would be worse than the old config-only stub.

RotateSecret with no rotation function configured — neither on the call nor already on the secret — is InvalidRequestException, as on AWS. It used to be accepted and silently do nothing.

Resource policies

Put/Get/Delete/ValidateResourcePolicy store, return, remove and syntactically validate a secret’s resource policy. Nothing evaluates it. A stored policy grants and denies nothing: request-time IAM enforcement (OVERCAST_ENFORCE_IAM, off by default) consults identity policies only. Handing each service’s stored resource policy to that evaluator is tracked in issue #496. BlockPublicPolicy is honoured — a policy allowing every principal with no Condition is refused with MalformedPolicyDocumentException.

Validation is syntax and schema only: valid JSON, a Version, at least one Statement, and an Effect/Action/Principal on each. AWS does not publish the full set of CheckName values its own validator reports, so Overcast’s are in AWS’s shape but are not a stable identifier to branch on — read the ErrorMessage.

Summary

Category✅ Supported❌ Unsupported
Secret CRUD9
Rotation3
Tags2
Password1
Policy/Misc43

Endpoints

Secret CRUD

OperationStatusNotesAWS Docs
CreateSecret✅ SupportedString + binary, KMS key, tags, descriptiondocs
GetSecretValue✅ SupportedBy name, ARN, version ID, or stagedocs
DescribeSecret✅ SupportedMetadata, KMS key, tags, versions, rotation datesdocs
PutSecretValue✅ SupportedStaging labels + ClientRequestTokendocs
UpdateSecret✅ SupportedDescription, KMS key + optional new valuedocs
ListSecrets✅ SupportedSorted by name, KMS metadata, optional filters — Filter.Key validated against AWS’s enumdocs
ListSecretVersionIds✅ SupportedAll versions with staging labelsdocs
DeleteSecret✅ SupportedImmediate (ForceDelete) onlydocs
BatchGetSecretValue✅ SupportedPartial results on missing secrets; Filter.Key validated against AWS’s enumdocs

Rotation

OperationStatusNotesAWS Docs
RotateSecret✅ SupportedInvokes the rotation Lambda, all four stepsdocs
CancelRotateSecret✅ SupportedTurns rotation off, keeps the configdocs
UpdateSecretVersionStage✅ SupportedMoves staging labels between versionsdocs

Tags

OperationStatusNotesAWS Docs
TagResource✅ SupportedMerge/overwrite tagsdocs
UntagResource✅ SupportedRemoves specified tag keysdocs

Password

OperationStatusNotesAWS Docs
GetRandomPassword✅ SupportedModeled length bounds, exclusions, RequireEachIncludedTypedocs

Policy/Misc

OperationStatusNotesAWS Docs
GetResourcePolicy✅ SupportedStored policy; not evaluated (#496)docs
PutResourcePolicy✅ SupportedValidated + stored; not evaluated (#496)docs
DeleteResourcePolicy✅ SupportedRemoves the stored policydocs
ValidateResourcePolicy✅ SupportedSyntax + schema checks, no evaluationdocs
RestoreSecret❌ Unsupportedstub; returns 501docs
ReplicateSecretToRegions❌ Unsupportedstub; returns 501docs
RemoveRegionsFromReplication❌ Unsupportedstub; returns 501docs