ProficientNowTechRFCs
Platform RFCs/Secret ops interim

3. System Architecture

RFC-SECOPS-0002                                                   Section 3
Category: Standards Track                              System Architecture

3.1 Architectural Overview

The interim secret management architecture consists of three layers connected by two trust boundaries:

  1. Secret Store Layer — AWS Secrets Manager, a managed cloud service that stores, encrypts, and serves secret values.
  2. Access Layer — AWS IAM credentials that authenticate on-premises servers to AWS Secrets Manager.
  3. Consumption Layer — Application code that retrieves secrets via the AWS SDK through a centralized configuration module.

A fourth, supporting layer provides visibility:

  1. Inventory Layer — A Git-tracked secrets-inventory.yaml manifest that records all secret metadata without values.

The architecture is intentionally simple. Complexity is deferred to RFC-SECOPS-0001, which introduces Vault, ESO, GitOps, and Kubernetes as the permanent operational infrastructure.


3.2 Authority Domains

The interim architecture has two authority domains:

DomainAuthorityScope
Secret ValuesAWS Secrets ManagerStorage, encryption, versioning of secret values
Secret MetadataGit (secrets-inventory.yaml)Names, descriptions, consumers, rotation status

3.2.1 Secret Value Authority

AWS Secrets Manager is the sole runtime authority for secret values (Invariant 1). All applications retrieve secrets from this single source.

AWS Secrets Manager provides:

  • built-in encryption at rest (AWS KMS-managed keys or customer-managed keys),
  • versioning of secret values,
  • fine-grained IAM-based access control,
  • and regional availability within the configured AWS region.

3.2.2 Secret Metadata Authority

Git is the authority for secret metadata. The secrets-inventory.yaml manifest tracks:

  • secret names (matching AWS Secrets Manager secret names),
  • human-readable descriptions,
  • consuming applications,
  • rotation status and notes,
  • and the RFC-SECOPS-0001 path convention category.

Git does not store secret values (Invariant 3).


3.3 Trust Boundaries

The architecture has two trust boundaries:

Trust Boundary 1 — Server to AWS

AspectDescription
Crossing PointIAM credential presentation from on-premises server to AWS
AuthenticationIAM user credentials (access key ID + secret access key) or IAM role assumption
TransportHTTPS with TLS 1.2+
RiskCredential compromise grants access to all secrets the security principal can read
MitigationLeast-privilege IAM policies scoped to specific Secrets Manager secret ARNs

On-premises servers do not have native AWS identity (unlike EC2 instances with instance profiles or EKS pods with IRSA). Authentication MUST use either:

  • IAM user access keys (access key ID + secret access key) stored securely on the server (less preferred due to long-lived credentials), or
  • IAM role assumption (preferred where feasible, e.g., IAM Roles Anywhere for on-premises servers).

Trust Boundary 2 — IAM to Secrets Manager

AspectDescription
Crossing PointIAM authorization evaluation for Secrets Manager API calls
AuthorizationIAM policy attachments or Secrets Manager resource policies attached to the authenticating principal
ScopePolicies SHOULD restrict access to specific Secrets Manager secret ARNs or name prefixes
RiskOverly broad policies grant access to unrelated secrets
MitigationPer-application IAM principals with policies scoped to platform-data/{datasource}/{consumer} name patterns

3.4 Data Flow

3.4.1 Secret Population Flow

Secret population is a manual, operator-driven process:

  1. An operator creates or updates a secret in AWS Secrets Manager using the AWS Console or AWS CLI.
  2. The operator updates the secrets-inventory.yaml manifest in Git to reflect the new or modified secret.
  3. The manifest commit serves as the audit record for the population event.

3.4.2 Secret Consumption Flow

Secret consumption is an application-driven process at startup or configuration reload:

  1. The application requests a secret by its conventional name (e.g., platform-data/postgres/my-app).
  2. The centralized secret configuration module calls the AWS SDK.
  3. The SDK authenticates with AWS IAM and retrieves the secret.
  4. The secret value is returned to the application in memory.

3.5 Failure Domains and Recovery

3.5.1 AWS Secrets Manager Unavailability

AspectDescription
Failure ModeAWS Secrets Manager API returns errors or is unreachable
ImpactApplications cannot retrieve secrets at startup or reload
Blast RadiusAll applications dependent on the affected AWS region
DetectionSDK error responses, application startup failures
RecoveryWait for AWS service restoration; applications retain in-memory secrets until restart

3.5.2 IAM Credential Compromise

AspectDescription
Failure ModeIAM credentials (access key ID + secret access key) are leaked or stolen
ImpactUnauthorized access to secrets within the compromised IAM principal's policy scope
Blast RadiusLimited to secrets accessible by the compromised IAM principal
DetectionAWS CloudTrail logs, anomalous access patterns
RecoveryRotate compromised IAM credentials, rotate all secrets accessible to the compromised principal

3.5.3 Secret Inventory Drift

AspectDescription
Failure Modesecrets-inventory.yaml does not match actual AWS Secrets Manager contents
ImpactReduced visibility into platform secret state
Blast RadiusOperational awareness only; applications are unaffected
DetectionPeriodic reconciliation between manifest and Secrets Manager
RecoveryUpdate secrets-inventory.yaml to match actual state