Data and security for regulated customers

The rules GovTech and EdTech buyers live under, the AWS building blocks that satisfy them, and the data foundation that makes GenAI safe to ship. Built so you can explain each piece out loud using Beacon.

About 60 minutes to read in full. Skim the quick version if you have 3. Chapter 7 (Q&A) is the best 15-minute review the night before.

The quick version

  • AWS secures the cloud, the customer secures what they put in it. You help Beacon design for its rules. You are not its lawyer, and Beacon owns its compliance.
  • Each Beacon product has a different rulebook. 911 and evidence mean CJIS. Benefits mean IRS Pub 1075 and sometimes HIPAA. Beacon Learn means FERPA, COPPA and state student privacy laws. Everything public-facing needs WCAG 2.1 AA.
  • GovCloud is a separate, US-person-operated partition. Use it when a customer contract or rule demands it. Many state and local workloads, including CJIS, can run in US commercial regions with the right controls.
  • Keep GenAI traffic private and least-privileged: VPC endpoints for Bedrock, customer managed KMS keys, scoped IAM roles per agent tool, CloudTrail on everything.
  • The real blocker is data, not models. Catalog it, tag the PII, govern access with Lake Formation, then feed RAG and analytics from the same governed lake.
  • Multi-tenant GenAI must take the tenant from the verified token, never from the prompt. That one rule stops City A's data from appearing in City B's answer.

1. The rulebook, in plain words

Public sector buyers do not buy features first. They buy "can I get this past my security office." Every Beacon deal has a rulebook attached. Your job as the SA is to know which rulebook applies and what it means for the architecture, so Beacon's engineers can build once and pass the review.

Shared responsibility model

The problem

A city IT director asks Beacon "is AWS CJIS compliant?" If Beacon says "yes, we're on AWS," it has promised something AWS never promised. The gap shows up in an audit.

Picture it

A bank safe deposit vault. The bank owns the building, the vault door, the guards and the cameras. You own your box: what goes in it, who holds your key, and whether you leave it unlocked on the table.

In plain words

AWS runs the data centers, hardware, network and the managed services. The customer decides who gets access, how data is encrypted, how the network is set up and what the application does. The more managed the service, the more AWS carries.

The real term

Security of the cloud (AWS) versus security in the cloud (customer). Evidence lives in AWS Artifact (SOC reports, FedRAMP packages, the HIPAA BAA). For Bedrock, AWS runs the model hosting. The customer owns prompts, data sources, IAM, guardrails and what the agent is allowed to do.

At Beacon

Beacon is in the middle of a three-layer stack. AWS secures the infrastructure. Beacon secures its SaaS. Each city secures its own users, like who they give dispatcher accounts to. Beacon's security page should show all three layers.

Go deeper (for follow-up questions)
  • The split moves by service type. On EC2 Beacon patches the OS. On Lambda or Bedrock, AWS does.
  • AWS services have a "services in scope" list per compliance program. A service not on the list for FedRAMP or HIPAA is a design constraint, not a detail.
  • For an ISV, the model becomes "shared responsibility, three parties." Beacon needs its own customer-facing responsibility matrix.

FedRAMP (and FedRAMP 20x)

The problem

Every federal agency used to run its own security review of every cloud product. Vendors did the same painful assessment dozens of times.

Picture it

A restaurant health inspection. One inspection, a grade in the window, and every diner trusts it. Without it, each diner would inspect the kitchen themselves.

In plain words

A government-run program that assesses a cloud product once, against a standard set of security controls, so any federal agency can reuse the result. The level depends on how sensitive the data is.

The real term

Historically three baselines tied to NIST 800-53: Low, Moderate, High. In 2026 FedRAMP finalized its Consolidated Rules for 2026 and moved to lettered Certification Classes A to D (roughly: A is an entry path, B maps to Low, C to Moderate, D to High). FedRAMP 20x is the automation-first path using machine-readable evidence. AWS GovCloud (US) holds FedRAMP High. AWS US East and US West hold FedRAMP Moderate.

At Beacon

Beacon sells mostly to cities, counties and districts, so FedRAMP is not its main gate today. It matters if a federal agency buys the evidence product, and many states accept a FedRAMP package as a shortcut for their own review. Building on FedRAMP-covered AWS services lets Beacon inherit a large share of controls.

Go deeper (for follow-up questions)
  • An ISV inherits controls from AWS but still needs its own package for its own product. "Runs on a FedRAMP High region" is not "is FedRAMP authorized."
  • FedRAMP now says "Certification" where it used to say "Authorization." You will hear both in interviews.
  • Classes describe the depth of assurance evidence, not a one-for-one relabel of impact levels. FedRAMP itself warns agencies against treating them as a straight swap.

GovRAMP (formerly StateRAMP)

The problem

FedRAMP covers federal buyers. Beacon's buyers are 300 cities and counties and 150 school districts, each with its own security questionnaire.

Picture it

The same health inspection idea, run by a state association instead of the federal government, so local restaurants don't need a federal grade.

In plain words

A nonprofit program that verifies cloud vendors for state, local, tribal and education governments using a standard modeled on FedRAMP. Participating governments trust the result.

The real term

StateRAMP rebranded to GovRAMP on Feb 14, 2025. The legal entity is still StateRAMP. Texas runs its own program, TX-RAMP. Many states accept FedRAMP or GovRAMP status as input.

At Beacon

For Beacon, GovRAMP likely matters more than FedRAMP. The permitting and benefits portals should target it first, because it shortens sales cycles across many states at once.

Go deeper (for follow-up questions)

An SA does not run the GovRAMP assessment. You help Beacon pick services that are in scope, generate evidence automatically (Config rules, Audit Manager, Security Hub standards), and design a boundary small enough to assess.

CJIS Security Policy (911 and digital evidence)

The problem

A 911 dispatch system pulls criminal history, warrants and license data from FBI systems. If that leaks, people get hurt and the agency loses its connection to FBI data.

Picture it

An evidence locker at a police station. Only vetted people get in, everyone signs the log, everything is sealed, and the state police come to inspect.

In plain words

An FBI rulebook for anyone who stores, processes or sends criminal justice information. It covers who can touch the data, how they log in, how data is encrypted, how it is logged and how incidents are reported.

The real term

Criminal Justice Information (CJI) under the CJIS Security Policy, now v6.1 (released June 25, 2026), restructured around NIST 800-53 Moderate. Points to know:

  • MFA at NIST AAL2 for access to CJI. Enforceable since Oct 1, 2024.
  • Encryption with FIPS-validated modules in transit and at rest outside physically secure locations. v6.1 raises the symmetric minimum to 256-bit.
  • Personnel screening: fingerprint-based background checks for anyone with unescorted access to unencrypted CJI, plus signing the CJIS Security Addendum and security awareness training.
  • Audit logging, incident response, and audits by the state's CJIS Systems Agency (CSA).
  • Modernized requirements get a grace period until Sep 30, 2027. Normal audits and sanctions start Oct 1, 2027.
At Beacon

Beacon's dispatch and evidence products are CJIS workloads. Beacon's own engineers with production access need background checks. The design goal: CJI is encrypted with keys Beacon controls, so AWS staff never see unencrypted CJI. A GenAI incident summarizer counts too. Prompts and outputs containing CJI are CJI.

Go deeper (for follow-up questions)
  • There is no "CJIS certification." Compliance is judged by each state CSA, and AWS signs CJIS Security Addendums with states.
  • AWS states CJIS workloads can run in GovCloud or US commercial regions. The customer managed key approach is what makes commercial workable.
  • Many agencies also want vendor staff with access to be US persons. That is often a state or contract requirement, not a line in the FBI policy.
  • GenAI angle: Bedrock model invocation logs can capture full prompts. If you enable them, the log bucket becomes a CJI store with all the same controls.

Student privacy: FERPA, COPPA and state laws

The problem

Beacon Learn holds grades, reading levels and behavior notes for children, some under 13. A new AI tutor could send that to a model, keep it forever, or use it to train something. Parents and districts will ask.

Picture it

A school nurse's file cabinet. The school lets a contractor organize it, but the contractor works under the school's rules, can't take files home, and must shred them when the contract ends.

In plain words

The school district owns the student data. Beacon may use it only to deliver the service the district asked for, must protect it, and must delete it when told. Kids under 13 get extra protection.

The real term
  • FERPA: federal law on education records. Vendors work under the school official exception, under the district's direct control.
  • COPPA: FTC rule for online services collecting data from children under 13. The amended rule took full effect April 22, 2026, adding a written data retention policy, a written security program, and separate consent before disclosing to third parties.
  • State laws such as California SOPIPA, New York Ed Law 2-d, Illinois SOPPA. Enforced through Data Privacy Agreements (DPAs) that often forbid targeted ads, sale of data, and using data to train models.
At Beacon

Beacon Learn's AI tutor needs per-district data separation, no training on student data (Bedrock already does not), a retention setting per district, deletion on request, and logs that can prove all of it when a district audits.

Go deeper (for follow-up questions)
  • Architecture translation: tag student PII in the catalog, keep a per-district deletion job, and keep embeddings and cached answers inside the retention policy too. Vector stores are easy to forget in deletion.
  • Resource: studentprivacy.ed.gov (Department of Education Privacy Technical Assistance Center).

IRS Publication 1075 and HIPAA (benefits eligibility)

The problem

A state benefits agency checks income against IRS data to decide who gets SNAP or Medicaid. If Beacon's portal touches that data, the IRS has rules about it too, on top of the state's.

Picture it

A tax envelope stamped "IRS property." You can borrow it, but it stays in the country, it goes in a locked drawer, and the IRS can come check the drawer.

In plain words

Tax data given to states keeps IRS rules attached wherever it goes, including to vendors and clouds. Health data in Medicaid flows brings HIPAA along.

The real term
  • Federal Tax Information (FTI) under IRS Publication 1075. For cloud: the provider must be FedRAMP authorized, FTI stays in the US with no offshore access, FIPS-validated encryption, and the agency notifies the IRS Office of Safeguards before moving FTI to a cloud or contractor.
  • HIPAA: protected health information. Requires a Business Associate Agreement (BAA) with AWS and using only HIPAA eligible services.
At Beacon

Beacon's benefits portal should keep FTI in a separate, tightly bounded data store with its own KMS key and access role. The GenAI caseworker assistant should not see raw FTI unless it has to. Retrieve a derived field like "income verified: yes" instead.

Go deeper (for follow-up questions)

Minimize the data the model sees. The smallest FTI footprint is the easiest to defend. Also: eligibility decisions affect people's lives, so the AI should assist a caseworker, not decide. That drives the audit logging design in chapter 7.

Accessibility: Section 508 and WCAG

The problem

A resident who is blind applies for benefits through Beacon's portal. The new AI chat widget does not work with a screen reader. The city is now out of compliance.

Picture it

A ramp next to the stairs at city hall. Nobody debates whether the building needs one.

In plain words

Government digital services must be usable by people with disabilities. Vendors inherit that obligation through the contract.

The real term

Section 508 covers federal agencies. For states and cities, the DOJ's ADA Title II web rule requires WCAG 2.1 Level AA. In April 2026 DOJ extended the deadlines to April 26, 2027 for entities serving 50,000+ people and April 26, 2028 for smaller ones.

At Beacon

Every GenAI surface Beacon ships, chat, summaries, voice, needs keyboard access, screen reader labels and captions. GenAI can help too: plain-language rewrites of permit rules and transcripts for audio.

Go deeper (for follow-up questions)

Streaming chat responses are a common screen reader trap. Use an ARIA live region that announces completed chunks, not every token.

Data residency

The problem

A county contract says "data stays in the United States." Beacon turns on a feature that quietly routes model calls to another country for capacity.

Picture it

A library book marked "reference only, do not leave the building." It can move between floors, never out the door.

In plain words

Know where every copy of the data lives and where every request is processed, including backups, logs and model inference.

The real term

Region choice, SCPs that deny non-approved Regions, S3 replication rules, and for Bedrock, cross-Region inference profiles. A US geographic profile keeps inference in US Regions. A global profile can route anywhere. GovCloud has its own profiles inside GovCloud.

At Beacon

Beacon uses an SCP that denies all non-US Regions and allows only US inference profiles for Bedrock. That turns a contract clause into an enforced guardrail.

Go deeper (for follow-up questions)

Residency is where data sits. Sovereignty is who can be compelled to hand it over. Personnel access (who can see it) is a third, separate question. Public sector buyers often mix all three together. Pull them apart in the conversation.

Beacon products and their rulebooks

Beacon productRules that applyWhat it means for architecture
911 computer-aided dispatchCJIS, state CSA audits, WCAGMFA at AAL2, customer managed KMS keys, screened staff, full audit logs, US-only Regions. Very high availability.
Digital evidence managementCJIS, chain of custody, state records retentionImmutable storage (S3 Object Lock), hash on ingest, access logs per file, long retention.
Permitting portalGovRAMP or state program, WCAG, public records lawsMostly public data plus applicant PII. Standard hardening, strong accessibility work.
Benefits eligibility portalIRS Pub 1075, HIPAA (Medicaid), state privacy, WCAGIsolated FTI store, BAA and HIPAA eligible services, human in the loop, decision audit trail.
Beacon Learn (K12)FERPA, COPPA, state student privacy laws and DPAs, WCAGPer-district isolation, no training on student data, retention and deletion per district.

2. AWS GovCloud (US)

The most common architecture question in public sector: "Do we need GovCloud?" The honest answer is often "not for everything."

What GovCloud is and why it exists

The problem

Some workloads must be run only by vetted US persons on US soil, with the highest federal assurance levels. Regular commercial Regions are run by global teams.

Picture it

A separate secure wing of the same hospital. Same doctors' training and equipment, but its own entrance, its own badge system, and only cleared staff inside. Some new equipment arrives there later.

In plain words

Two AWS Regions walled off from the rest of AWS, operated by US citizens, with separate accounts and sign-in. They carry the highest compliance approvals, but not every service or model shows up there on day one.

The real term

AWS GovCloud (US-West) and (US-East), in a separate partition (aws-us-gov). Accounts are linked to a commercial account for billing but have separate IAM. Holds FedRAMP High, DoD SRG IL4 and IL5, supports ITAR and CJIS. Account holders must be US persons. Bedrock is available in both Regions, with a growing model list that includes several Anthropic Claude models, Amazon Nova, Meta Llama and others.

At Beacon

A few of Beacon's state police and federal customers require GovCloud in contract. Beacon runs its main SaaS in US commercial Regions and a smaller GovCloud stack for those customers, from the same infrastructure-as-code.

Go deeper (for follow-up questions)
  • ARNs differ (arn:aws-us-gov:). Hardcoded ARNs in IaC break. Parameterize the partition from day one.
  • Some Bedrock features land in only one GovCloud Region first. Bedrock Data Automation and AgentCore went to US-West first. Managed Knowledge Base in GovCloud needs you to bring your own embedding model, and agentic retrieval is not there yet.
  • Two stacks means two release trains. The bigger cost is operational: every release ships twice.
QuestionUS commercial RegionsGovCloud (US)
Who operates itAWS global teamsUS citizens on US soil
FedRAMPModerate (US East and West)High
DoD, ITARLimitedIL4 and IL5, ITAR
CJISSupported with customer controlsSupported
New services and modelsFirstLater, some never
Accounts and IAMStandardSeparate partition, separate IAM
CostStandardHigher on most services

The GovCloud or commercial decision for Beacon

The problem

Beacon's CEO hears "government" and wants to move everything to GovCloud. That slows every GenAI launch and doubles cost for customers who never asked for it.

Picture it

You don't put every document in the bank vault. You put the ones the contract says must be there, and keep the rest in a good locked cabinet.

In plain words

Let the requirement drive the placement. Ask what the contract or regulation says, not what feels safest.

The real term
  1. Does a contract, FedRAMP High need, DoD IL, ITAR, or state CJIS office require GovCloud? If yes, GovCloud.
  2. Does the workload need a service or model not in GovCloud yet? If yes, commercial, or wait.
  3. Otherwise, US commercial Regions with SCP residency controls, customer managed keys and US-only inference profiles.
At Beacon

Beacon Learn and permitting run in commercial. Most dispatch and evidence customers run in commercial with CJIS controls. The handful of customers that contractually require GovCloud get the GovCloud stack. GenAI features launch in commercial first, with a GovCloud release when models and features catch up.

Go deeper (for follow-up questions)

Design the tenant router so a customer's "home partition" is a property of the tenant. Then moving a customer to GovCloud later is a migration, not a rewrite.

3. Security building blocks

Think of Beacon's AWS environment as a secure office building. Each service is one piece of building security. If you can name the building piece, you can explain the service.

Building securityAWS service
Badges that open only certain doorsIAM, least privilege
Campus-wide building codeOrganizations, SCPs, Control Tower
Keys to the safe deposit boxesKMS, customer managed keys
Interior hallways with no street doorsVPC, private subnets, VPC endpoints, PrivateLink
The locked key cabinetSecrets Manager
Cameras, sign-in log, inspector, guard, control roomCloudTrail, Config, GuardDuty, Security Hub
Sniffer dog looking for things in the wrong placeMacie
Front desk that turns away troublemakersWAF

IAM and least privilege

The problem

An AI agent that can "read the database" can read every city's data. One prompt injection and it hands everything over.

Picture it

An office badge. The janitor's badge opens supply closets, not the server room. A visitor badge expires at 5 pm.

In plain words

Every person and every piece of software gets its own identity with only the permissions it needs, for only as long as it needs them.

The real term

IAM roles with temporary credentials, IAM Identity Center for people, policies scoped by action, resource and condition. ABAC with session tags lets one policy say "you can only touch items tagged with your tenant." IAM Access Analyzer finds unused and overly broad access.

At Beacon

Each agent tool in the 911 assistant gets its own role: the "look up incident" tool can read incidents for one tenant, and nothing else. The model never holds credentials. The tool layer does, scoped per request.

Go deeper (for follow-up questions)

Treat the model as an untrusted user. Whatever the model can ask a tool to do, assume an attacker can too, through injected text. So the permission boundary belongs on the tool's credentials, not in the system prompt.

Organizations, SCPs, Control Tower and landing zones

The problem

Beacon has 40 AWS accounts built by different teams. One turned off logging. One runs in Europe. Nobody can prove the rules are followed everywhere.

Picture it

A corporate campus with a building code. Every new building gets fire doors and cameras before anyone moves in, and no tenant can remove them.

In plain words

Group accounts under one parent, set rules that no account can break, and stamp out new accounts already wired for logging and security.

The real term

AWS Organizations groups accounts into OUs. Service control policies (SCPs) set the maximum permissions for everything in an OU (for example, deny non-US Regions, deny disabling CloudTrail). Control Tower builds a landing zone: log archive account, audit account, preventive and detective controls, and account vending.

At Beacon

Separate OUs for CJIS workloads, K12 workloads and shared services. The CJIS OU has stricter SCPs, like only approved services and only customer managed keys. A new CJIS customer silo is a vended account that is compliant on day one.

Go deeper (for follow-up questions)

SCPs never grant anything. They only cap. Resource control policies (RCPs) do the same from the resource side, for example "no principal outside our org can read this bucket."

KMS and customer managed keys

The problem

A police chief asks "if someone at AWS or Beacon goes rogue, can they read our evidence?" Encryption alone doesn't answer that. Who holds the key does.

Picture it

Safe deposit boxes where the customer holds the key, and every use of the key is written in a ledger. Throw the key away and the box is unreadable forever.

In plain words

Data is locked with keys stored in a hardened service. You decide who can use each key, every use is logged, and disabling a key makes the data unreadable.

The real term

AWS KMS with customer managed keys (CMKs), key policies, grants, automatic rotation, and envelope encryption. FIPS 140-3 validated HSMs. Every Decrypt call lands in CloudTrail. Bedrock knowledge bases, S3, OpenSearch and model customization jobs accept CMKs.

At Beacon

Each CJIS customer gets its own CMK. Beacon can offer "crypto-shred on exit": delete the key and that county's data is gone, including embeddings.

Go deeper (for follow-up questions)

Per-tenant keys cost a little per key per month plus request charges. Use S3 Bucket Keys to cut KMS request volume. For very strict customers, KMS external key store (XKS) keeps key material outside AWS, at a latency and availability cost.

VPC, private subnets, VPC endpoints and PrivateLink

The problem

A security reviewer asks "does our dispatch data cross the public internet to reach the AI model?" If the answer is "it's encrypted, but yes," the review stalls.

Picture it

Interior hallways in a building. You walk from your office to the records room without ever stepping onto the street.

In plain words

Put the app in a private network with no route to the internet. Reach AWS services through private doors inside that network, and lock each door to only what you need.

The real term

VPC with private subnets. Interface VPC endpoints (powered by PrivateLink) for bedrock-runtime, bedrock-agent-runtime, KMS, Secrets Manager, STS. Gateway endpoints for S3 and DynamoDB. Endpoint policies restrict which models or buckets are reachable. aws:SourceVpce conditions make resources refuse traffic from anywhere else.

At Beacon

Beacon's GenAI services run in private subnets with no NAT gateway. Bedrock calls go through an interface endpoint whose policy allows only approved model IDs. Result: an injected prompt can't make the agent call an arbitrary external URL, because there is no route out.

Go deeper (for follow-up questions)

Removing egress is one of the strongest anti-exfiltration controls for agents. If a tool must call the internet, send it through a proxy or AWS Network Firewall with a domain allowlist.

Users MFA via IdP Beacon VPC, workload account Public subnet WAF + ALB TLS only Private subnets App service tenant from JWT Agent tools role per tool VPC endpoints bedrock-runtime S3 gateway KMS, STS Secrets Mgr no NAT, no IGW Amazon Bedrock approved models, Guardrails S3 + KMS CMK per-tenant keys Secrets Manager rotated credentials Security and log archive accounts CloudTrail (org trail), Config, GuardDuty, Security Hub, Macie, Bedrock invocation logs
Blue arrows are the private path: the app and agent tools reach Bedrock, S3 and secrets only through VPC endpoints, with no internet route. Logs from everything flow to separate security accounts.

Secrets Manager

The problem

A database password sits in an environment variable, gets pasted into a support ticket, and now lives forever in a SaaS tool.

Picture it

A locked key cabinet with a sign-out sheet, and the locks get changed every month.

In plain words

Store passwords and API tokens in one managed place, fetch them at runtime, rotate them on a schedule, and log every read.

The real term

AWS Secrets Manager: encrypted with KMS, automatic rotation with Lambda, resource policies, cross-account access, CloudTrail for every GetSecretValue.

At Beacon

Agent tools that call a state records system fetch the API credential at call time from Secrets Manager. The model never sees it, so it can't leak it in an answer.

Go deeper (for follow-up questions)

Rule for agents: no secret ever enters the context window. Tool code injects credentials after the model has chosen the tool and arguments.

CloudTrail, Config, GuardDuty and Security Hub

The problem

A state CJIS auditor asks "show me who accessed this evidence file in March, and prove encryption was on the whole time." Without records, Beacon can't answer.

Picture it

A building's sign-in log (CloudTrail), the inspector who checks the fire doors are still closed (Config), the guard watching cameras for odd behavior (GuardDuty), and the control room with every alarm on one wall (Security Hub).

In plain words

Record every action, continuously check that settings match the rules, watch for suspicious activity, and see all findings in one place.

The real term
  • CloudTrail: API call history. Use an organization trail into a locked log archive account. Data events for S3 and Bedrock when needed.
  • AWS Config: resource configuration history and rules, with conformance packs (for example NIST 800-53).
  • GuardDuty: threat detection from logs, DNS and runtime signals.
  • Security Hub: aggregates findings and scores against standards.
At Beacon

Beacon's evidence of CJIS controls is mostly generated, not written: Config shows encryption never turned off, CloudTrail shows every access, Security Hub shows the standards score. The audit becomes an export.

Go deeper (for follow-up questions)

CloudTrail records that InvokeModel happened, not what was said. For prompt and response content, turn on Bedrock model invocation logging to S3 or CloudWatch, and treat that store as sensitive as the source data.

Macie: finding PII in S3

The problem

An engineer exported benefits applications to a "temp" bucket for debugging. It has Social Security numbers and nobody knows it's there.

Picture it

A sniffer dog walking the warehouse, stopping at every box that holds something it shouldn't.

In plain words

A service that scans your storage, finds sensitive data like SSNs and names, and tells you where it is and whether that bucket is exposed.

The real term

Amazon Macie: automated sensitive data discovery in S3, managed and custom data identifiers, findings into Security Hub and EventBridge.

At Beacon

Before building a RAG index on the permitting document archive, Beacon runs Macie on the source buckets. Documents with SSNs get redacted or excluded, so the chatbot can't quote them.

Go deeper (for follow-up questions)

Macie covers S3. For text flowing through the app, use Comprehend PII detection or Bedrock Guardrails sensitive information filters to mask PII in prompts and responses.

WAF

The problem

A bot hammers the public permitting chatbot with 50,000 requests an hour, running up the model bill and probing for injections.

Picture it

The front desk that checks visitors, turns away known troublemakers and stops anyone trying to come in 200 times.

In plain words

A filter in front of web apps that blocks known attack patterns, bad bots and floods before they reach your code.

The real term

AWS WAF on CloudFront, ALB or API Gateway: managed rule groups, rate-based rules, Bot Control, geo match. Shield for DDoS.

At Beacon

Rate limits per IP and per session on the public GenAI endpoints protect cost and availability. WAF is not a prompt injection defense. That lives in Guardrails and tool permissions.

Go deeper (for follow-up questions)

For 911, availability is life safety. The public GenAI features must never share capacity with the dispatch path. Separate endpoints, separate quotas.

4. Data foundations for AI

The role description says it plainly: generative AI, agentic patterns, and the data foundations that make both work. Most GenAI projects at ISVs stall on data, not on model choice.

Why "AI-ready data" is the real blocker

The problem

Beacon's CEO wants an AI assistant in two quarters. The data is in 300 separate databases, PDFs on file shares, and audio in a vendor's system. Nobody knows which fields hold PII.

Picture it

A great chef in a kitchen where the pantry has no labels, half the jars are expired, and some are someone else's lunch. Hiring a better chef won't fix dinner.

In plain words

Before AI can use data, you need to know what you have, where it is, who owns it, how good it is, what's sensitive, and who is allowed to see it.

The real term

A governed data foundation: catalog, access control, data quality, lineage, PII classification. On AWS: S3, Glue, Lake Formation, SageMaker Catalog, Macie.

At Beacon

First 30 days: pick one GenAI use case (permit Q&A), inventory only the data it needs, tag PII, and ship. The foundation grows use case by use case, not as a two-year platform project.

Go deeper (for follow-up questions)

A GenAI assistant is only as trustworthy as its sources. Stale permit fee schedules produce confident wrong answers. Freshness and ownership of each source matter as much as retrieval quality.

Data lake on S3, with Glue, Lake Formation and Athena

The problem

Each product team keeps its own copy of data in its own format. Analytics and AI both need one place to read from, with one set of access rules.

Picture it

A public library. S3 is the shelves, Glue is the card catalog and the staff who re-shelve books, Lake Formation is the librarian deciding who can enter the rare books room, Athena is reading at the table without checking anything out.

In plain words

Land all data in cheap object storage, describe it in a central catalog, control access down to rows and columns, and query it in place with SQL.

The real term
  • S3: storage, often as Apache Iceberg tables (including S3 Tables).
  • AWS Glue: Data Catalog, crawlers, serverless ETL, Glue Data Quality.
  • Lake Formation: fine-grained permissions at database, table, column, row and cell level, with LF-Tags for tag-based access.
  • Athena: serverless SQL over S3, pay per data scanned.
At Beacon

Beacon tags columns like pii=ssn and rows by tenant_id. A county analyst querying through Athena sees only their county, with SSNs hidden, from one shared table.

Go deeper (for follow-up questions)

Lake Formation governs analytics access. It does not automatically govern what a RAG index returns. Once text is embedded into a vector store, you need metadata filters or separate indexes to carry the same rules forward.

Redshift and zero-ETL

The problem

Beacon's dashboards query the production dispatch database directly. During a storm, reports slow down 911 call entry.

Picture it

Instead of reading the chef's order tickets during dinner rush, the manager gets an automatic copy in the back office, updated every few seconds.

In plain words

Copy operational data into a system built for analytics, automatically and near real time, without building and babysitting pipelines.

The real term

Amazon Redshift (serverless or provisioned) for warehouse workloads. Zero-ETL integrations replicate from Aurora, RDS, DynamoDB and some SaaS sources into Redshift or SageMaker Lakehouse, and from DynamoDB into OpenSearch.

At Beacon

Aurora dispatch data flows by zero-ETL into Redshift. Response-time dashboards and the "ask your data" GenAI feature (text to SQL) hit Redshift, never production.

Go deeper (for follow-up questions)

Text-to-SQL is an agent with database access. Give it a read-only role, a curated semantic layer of views, row-level security by tenant, and query limits.

Next generation SageMaker: Unified Studio, Lakehouse and Catalog

The problem

Data engineers, analysts and ML engineers each use different consoles and permission models. Governance is set three times and drifts.

Picture it

One shared workshop with every tool on the wall and one sign-out system, instead of three garages across town.

In plain words

AWS rebuilt SageMaker as the home for data, analytics and AI together: one studio, one lakehouse, one catalog with one permission model.

The real term

Amazon SageMaker (next generation, announced Dec 2024) includes SageMaker Unified Studio (the workspace), SageMaker Lakehouse (Iceberg-compatible, unifies S3 and Redshift), and SageMaker Catalog, built on Amazon DataZone, for discovery, business metadata, lineage and access requests. The older ML service is now SageMaker AI.

At Beacon

Beacon's data platform team publishes "data products" (for example, anonymized permit timelines) in SageMaker Catalog. The GenAI team requests access through the catalog instead of a Slack message.

Go deeper (for follow-up questions)

Positioning: you don't need Unified Studio to start. For a 250-engineer ISV, S3 plus Glue plus Lake Formation is enough on day one. Unified Studio earns its place when multiple teams share data products.

Streaming with Kinesis and MSK (911 events)

The problem

A 911 call creates dozens of events in seconds: call received, unit assigned, en route, on scene. A nightly batch is useless for live AI help.

Picture it

A conveyor belt at a sorting center. Items arrive continuously, and several stations can each look at every item as it passes.

In plain words

A durable, ordered stream of events that many consumers can read at once, in real time, and replay if needed.

The real term

Kinesis Data Streams (AWS-native, shards, simple), Amazon MSK (managed Kafka, for teams already on Kafka), Data Firehose to land streams into S3 or Redshift, Managed Service for Apache Flink for stream processing.

At Beacon

CAD events stream through Kinesis. One consumer feeds live dashboards, one lands data in the lake, one feeds an agent that drafts the incident summary when the call closes.

Go deeper (for follow-up questions)

Choose MSK if Beacon already runs Kafka and wants its connectors. Choose Kinesis for less operational work. Partition by tenant and incident so ordering holds per incident.

DynamoDB vs Aurora vs OpenSearch

The problem

A team picks one database for everything and then fights it: slow joins, no full-text search, or scaling pain.

Picture it

DynamoDB is a coat check: hand over a ticket, get your coat instantly, no browsing. Aurora is a filing cabinet with cross-references. OpenSearch is the library search desk that finds anything by words or meaning.

In plain words

Pick by access pattern: lookups by known ID at any scale, relational queries with transactions, or search.

The real term
StoreBest forAt Beacon
DynamoDBKnown-key lookups, massive scale, single-digit msSession state, agent memory, unit status
Aurora (PostgreSQL)Relational data, transactions, joins. pgvector for vectorsPermits, benefits cases, dispatch records
OpenSearchFull-text, log analytics, vector and hybrid searchEvidence search, RAG index
At Beacon

Use all three, each for its job. For RAG, start with Aurora pgvector if the team already runs Postgres, OpenSearch when you need hybrid keyword plus semantic search at scale.

Go deeper (for follow-up questions)

For multi-tenancy: DynamoDB uses dynamodb:LeadingKeys conditions to limit a role to one tenant's partition key. Aurora uses Postgres row-level security. OpenSearch uses document-level security or per-tenant indexes.

Data quality, lineage, governance and PII tagging

The problem

The benefits assistant tells a caseworker a family is ineligible. The family appeals. Which data did the AI use, where did it come from, and was it correct that day?

Picture it

A food supply chain with farm labels. When there's a recall, you trace the lettuce back to the field in minutes.

In plain words

Check data before it's used, record where every dataset came from and what touched it, and label sensitive fields so the rules follow the data.

The real term

Glue Data Quality rules, lineage in SageMaker Catalog (OpenLineage compatible), Lake Formation LF-Tags for classification, Macie for discovery. For GenAI: record source document IDs and versions with every answer.

At Beacon

Every AI answer in the benefits portal stores the chunk IDs, document versions and policy version it used. An appeal can reconstruct exactly what the assistant saw.

Go deeper (for follow-up questions)

Coming from financial services, this maps to model risk management: inputs, versions and outcomes must be reproducible. Public sector appeals need the same.

Unstructured data pipelines: documents, audio, video

The problem

Most government knowledge is not in tables. It's scanned permit applications, 911 call audio, body-camera video and PDFs of eligibility policy.

Picture it

A mailroom that opens every envelope, types up handwritten letters, transcribes voicemails and files each under the right case.

In plain words

Turn files, audio and video into structured text and fields, tag them, then store them so both search and AI can use them.

The real term
  • Textract: text, forms and tables from documents.
  • Transcribe: speech to text, with PII redaction and custom vocabulary.
  • Rekognition: image and video analysis.
  • Bedrock Data Automation (BDA): one API for multimodal extraction using foundation models, with custom output blueprints. Can act as the parser for Bedrock Knowledge Bases.
At Beacon

Permit applications go through BDA with a "permit application" blueprint. Dispatch audio goes through Transcribe with PII redaction, then a model summarizes the incident for the officer to review and sign.

Go deeper (for follow-up questions)

Evidence products need chain of custody. Keep the original file untouched (S3 Object Lock), store derived text as a separate linked object, and hash both. An AI summary is never the evidence.

Sources Ingest and process Governed lake Use 911 CAD events Kinesis or MSK App databases Aurora, DynamoDB Files, audio, video forms, calls, evidence Stream processing Firehose, Flink Zero-ETL, Glue ETL quality checks Parse unstructured BDA, Textract, Transcribe S3 lakehouse Iceberg tables Glue Data Catalog tenant_id on every row KMS CMK Athena, Redshift dashboards, reports Vector index Bedrock Knowledge Base GenAI assistant Bedrock + Guardrails Governance across every layer Lake Formation permissions and LF-Tags, Macie PII discovery, Glue Data Quality, SageMaker Catalog lineage and access requests, CloudTrail on every read
One governed lake feeds both analytics and RAG. The blue path is the GenAI path. Governance sits under everything, so the same PII and tenant rules apply to dashboards and to the assistant.

5. Multi-tenant SaaS on AWS

Beacon is an ISV. Its whole business is one product serving hundreds of customers. Tenant isolation is the first thing its buyers ask about, and GenAI adds new ways to break it.

Silo, pool and bridge

The problem

Give every customer their own stack and costs and releases explode. Put everyone together and one mistake exposes everyone.

Picture it

Silo is a street of detached houses: own walls, own utilities, expensive. Pool is an apartment building: shared walls and plumbing, cheaper, but you hear the neighbors. Bridge is townhouses: shared roofline, separate front doors.

In plain words

Decide, layer by layer, which parts each customer gets alone and which parts they share.

The real term
  • Silo: dedicated resources per tenant (often an account or VPC). Strongest isolation, highest cost per tenant.
  • Pool: shared resources, isolation enforced in code and policy. Best economics, needs careful design.
  • Bridge: mix, for example shared compute with a silo database per tenant.
  • Tiering: different tenants on different models, for example premium customers in silo.
At Beacon

Beacon Learn's 150 districts: pool. Permitting: pool. Large CJIS customers and the GovCloud customers: silo accounts. Mid-size dispatch customers: bridge, shared app tier with a dedicated database and key.

Go deeper (for follow-up questions)

The decision is per layer, not per company. Ask: what does the contract require, what does the tenant pay, and what is the blast radius if isolation fails?

Tenant isolation and tenant context in every request

The problem

A developer forgets WHERE tenant_id = ? in one query. City A's dispatcher sees City B's calls.

Picture it

An apartment key card that only opens your floor and your unit. Even if you walk into the wrong hallway, the doors won't open.

In plain words

Every request carries a verified "who is this tenant" stamp from login. Every layer uses that stamp, and the infrastructure refuses to cross it even if the code has a bug.

The real term

Tenant context as a signed JWT claim (Cognito or the customer's IdP). Tenant-scoped credentials through a token vending machine: the app assumes a role with a session tag tenant=A, and IAM policies allow only resources tagged A. Backed by Postgres RLS, DynamoDB LeadingKeys, per-tenant KMS keys.

At Beacon

Beacon's API layer reads tenant_id from the token once, then passes tenant-scoped credentials down. A missing WHERE clause returns nothing instead of another city's data.

Go deeper (for follow-up questions)

Test isolation, don't assume it. Automated tests that log in as tenant A and try to read tenant B on every endpoint, run in CI.

Noisy neighbors and per-tenant cost

The problem

One large county runs a bulk AI summary job and uses up Beacon's Bedrock token quota. Every other city's assistant starts throttling. Nobody knows which tenant costs what.

Picture it

One apartment runs the washing machine all day and nobody else gets hot water. And the building splits the water bill evenly.

In plain words

Limit how much any one tenant can use, reserve capacity for critical paths, and measure each tenant's use so pricing matches cost.

The real term

Per-tenant throttling (API Gateway usage plans, token budgets in the app), queues for batch work, Bedrock quotas are per account and Region so plan them. Application inference profiles with cost allocation tags attribute Bedrock spend. Metering from logs into per-tenant cost reports.

At Beacon

Beacon gives each tenant a token budget per minute, sends bulk jobs to Bedrock batch inference, and keeps 911 real-time features on separate reserved capacity. Finance sees GenAI cost per customer per month.

Go deeper (for follow-up questions)

Per-tenant cost data lets Beacon price GenAI as an add-on tier instead of absorbing it. That turns an architecture decision into a pricing conversation the CEO cares about.

GenAI tenant isolation

The problem

A dispatcher in City A asks the assistant "any recent incidents at 100 Main St?" The shared index also has City B's 100 Main St. The model answers with City B's incident.

Picture it

A shared library for many schools, where each book has a school stamp and the librarian only brings books with your stamp, no matter how you phrase the request.

In plain words

Every chunk in the index carries its tenant. The retrieval filter comes from the verified login, not from anything the user or the model says. Guardrails, caches, logs and agent tools are tenant-scoped too.

The real term
  • Per-tenant knowledge base (silo): strongest isolation, more resources to manage.
  • Shared index with metadata filters (pool): tenant_id filter applied server-side on every retrieve call.
  • Per-tenant Bedrock Guardrails configurations where policies differ.
  • Tenant-scoped prompt caches, conversation memory, invocation logs, and tool credentials.
At Beacon

Beacon Learn uses a shared index with a mandatory district filter set by the API layer. CJIS silo customers get their own knowledge base in their own account with their own key.

Go deeper (for follow-up questions)
  • Never let the model build the filter. An injected "ignore the district filter" must have nothing to act on.
  • Fine-tuning on pooled tenant data mixes tenants inside model weights. You can't filter that later. Prefer RAG for tenant-specific knowledge.
  • Semantic caches keyed only on the question will serve City B's answer to City A. Include tenant in the cache key.
Dispatcher City A login API layer tenant_id from JWT Retrieve filter tenant = A Shared index City A docs City B docs City C docs Model + tenant guardrail blocked the filter never comes from the prompt
The tenant filter is set by the API layer from the verified login. Only City A's chunks can reach the model, whatever the prompt says.

The AWS SaaS Lens

The problem

General best practices don't cover SaaS-specific issues like onboarding, tiering or tenant-aware operations.

Picture it

A building inspection checklist with an extra page for apartment buildings.

In plain words

AWS's published list of SaaS-specific questions and patterns, used alongside a Well-Architected review.

The real term

SaaS Lens for the Well-Architected Framework: identity and tenant context, isolation, tenant onboarding, tiering, metering and billing, tenant-aware operations. Related: AWS SaaS Factory programs for ISVs.

At Beacon

Running the SaaS Lens with Beacon surfaced that onboarding a new city takes three weeks of manual setup. Automated onboarding became a priority before the GenAI launch, because every new tenant needs its index, key and guardrail set up correctly.

Go deeper (for follow-up questions)

Tenant-aware operations means dashboards and alarms that answer "which tenant is affected" in the first minute of an incident.

6. Well-Architected

The six pillars and the Generative AI Lens

The problem

Teams optimize what they notice (features, speed) and discover the rest (cost, recovery, security) in production.

Picture it

A pre-flight checklist. Pilots don't skip it because they're experienced. It catches what experience forgets.

In plain words

Six areas to check any architecture against, plus add-on checklists for specific workload types.

The real term
PillarOne plain sentence
Operational excellenceCan you run it, change it and learn from failures?
SecurityIs data and access protected, and can you prove it?
ReliabilityDoes it keep working and recover when parts fail?
Performance efficiencyAre you using the right resources for the job as needs change?
Cost optimizationAre you paying only for what delivers value?
SustainabilityAre you minimizing the energy and resources it uses?

The Generative AI Lens adds GenAI questions: model selection, prompt and data security, evaluation, responsible AI, cost of tokens, and agent behavior. Also relevant: the Machine Learning Lens and SaaS Lens.

At Beacon

For the 911 incident summarizer: reliability means it never slows dispatch, security means CJIS controls on prompts, cost means batch where possible, operational excellence means an evaluation set that runs on every prompt change.

Go deeper (for follow-up questions)

Pillars trade against each other. A silo tenant model helps security and costs more. Say the trade-off out loud and let the customer choose with numbers.

How an SA runs a Well-Architected review

The problem

A review done as a 300-question audit feels like homework. The customer leaves with a long list and changes nothing.

Picture it

A good doctor's checkup. They ask about what matters for your age and history, find the two things that need action now, and book the follow-up.

In plain words

Scope it to one workload, talk to the people who build it, find the high risks, agree on a short fix plan, and come back.

The real term

AWS Well-Architected Tool with lenses, high risk issues (HRIs) and medium risk issues, an improvement plan, milestones to re-review. Findings can connect to AWS programs and credits for remediation.

At Beacon

I'd run it on the planned GenAI assistant before launch, with the Generative AI and SaaS lenses, in two 90-minute sessions with the tech lead and security lead. Output: top five HRIs, owners, dates, and a re-review before GA.

Go deeper (for follow-up questions)

Frame it as speed: "this finds what would block your CJIS customer's security review, before they find it." That's how it fits a CEO's two-quarter deadline.

7. Interview Q&A

Answer in first person, name Beacon, and end with a trade-off or a question back. Your AI-security background is the edge. Let it show in the agent and data exfiltration answers.

Beacon's police customers need CJIS. What changes in your architecture?

I'd start by drawing the CJI boundary: which services store, process or send criminal justice data, including GenAI prompts, outputs and logs. Inside that boundary I'd require MFA at AAL2 through the agency's identity provider, customer managed KMS keys per agency so unencrypted CJI is never visible to AWS staff, FIPS endpoints, and private networking with VPC endpoints for Bedrock. Beacon staff with production access need fingerprint background checks and the CJIS Security Addendum, so I'd keep that group small with break-glass access. CloudTrail, Config and Security Hub generate the audit evidence the state CSA will ask for. I'd put CJIS workloads in their own OU with stricter SCPs. Then I'd ask which states they sell to, because each CSA interprets the policy a little differently.

How do you make sure one school district's data never shows up in another district's chatbot answers?

I treat it as an isolation problem. Prompt wording cannot solve it. Every chunk in the index carries a district ID as metadata. The API layer reads the district from the verified login token and applies it as a mandatory retrieval filter, so nothing the user types or the model generates can change it. I'd extend the same scoping to conversation memory, semantic caches, logs and any agent tools, which each run with tenant-scoped credentials. For districts with stricter DPAs, Beacon can offer a dedicated knowledge base. And I'd prove it with automated cross-tenant tests in CI: log in as District A, ask about District B's content, expect nothing.

The customer asks if Bedrock trains on their data.

No. Bedrock doesn't use customer prompts or outputs to train its models, and it doesn't share them with the model providers. Models run in AWS-operated deployment accounts that the model providers can't access. If Beacon fine-tunes a model, that copy is private to Beacon's account and encrypted with Beacon's key. Then I'd point to the evidence: the Bedrock data protection documentation and the compliance reports in Artifact. And I'd remind Beacon that their own promise to districts also covers what Beacon does, such as logging prompts or reusing data for evaluation, so their DPA language should match the architecture.

How do you design audit logging for AI decisions in benefits eligibility?

First, the AI shouldn't make the eligibility decision. It assists a caseworker who decides. For every AI interaction I'd log a record keyed by case ID: who asked, the prompt template version, the model ID and version, the retrieved document IDs and versions, guardrail results, the output, and what the caseworker did with it. The records go to an S3 bucket with Object Lock and a customer managed key, in a separate log account, with retention set to the state's records schedule. The content logs contain PII and possibly FTI, so access is tightly limited and itself logged. That lets an appeal reconstruct exactly what the assistant saw and said on that date.

GovCloud or commercial for Beacon's GenAI features?

I'd let requirements decide, per customer. If a contract, a state CJIS office, FedRAMP High, or ITAR requires GovCloud, those customers go there. Everyone else runs in US commercial Regions with SCPs that block non-US Regions, US-only inference profiles, customer managed keys, and private endpoints. GovCloud gets new models and features later, so I'd launch GenAI features in commercial first and release to GovCloud when the models they depend on are available there. The design choice that makes this work is tenant-level "home partition" routing and partition-aware infrastructure code, so moving a customer is a migration, not a rewrite.

How do you keep Bedrock traffic off the public internet?

The application runs in private subnets with no internet gateway or NAT. It reaches Bedrock through interface VPC endpoints for bedrock-runtime and bedrock-agent-runtime, and S3 through a gateway endpoint. Endpoint policies allow only approved model IDs and Beacon's own buckets. Bucket and key policies add aws:SourceVpce conditions so data can only be read from inside that network. On top of privacy, that removes the easiest exfiltration path for an agent, because there's no route to an attacker's server.

An agent in the 911 product can call tools. How do you stop prompt injection from turning into data exfiltration?

I assume injection will get through, because any text the agent reads, like a caller's note or an uploaded document, can carry instructions. So I put the controls where the model can't talk its way past them. Each tool runs with its own least-privilege role scoped to the current tenant and incident. Read tools and write tools are separate, and anything consequential, like updating a record or sending a message, needs human approval. There's no general internet egress, and outputs go through Guardrails and checks for sensitive data before they leave. Secrets never enter the context window. And I log every tool call with its arguments so we can detect odd patterns. The model is an untrusted user of the tools and sits outside the security boundary.

The CEO says "our data isn't ready for AI." Where do you start?

I'd agree, then narrow it. We pick one use case with clear value and manageable risk, say, a permit Q&A assistant. We inventory only the data it needs, run Macie to find sensitive content, clean and catalog it in Glue, and set access with Lake Formation. That becomes the first slice of the governed lake. The second use case reuses the catalog, the tagging and the pipelines. That way the foundation gets built through shipped features, and the CEO still sees something in production within the two quarters.

Silo or pool for Beacon Learn's 150 school districts?

Pool, with strong controls, for most of them. Districts are small, the data is sensitive but not CJIS-level, and silo stacks for 150 tenants would slow every release. I'd enforce isolation with tenant context from the token, tenant-scoped credentials, row-level security, and a mandatory district filter on retrieval. I'd offer a premium tier with a dedicated database and knowledge base for large districts or states whose DPAs demand it. The trade-off is cost against blast radius, and I'd put numbers on both for the CEO.

One big county's usage is throttling everyone else's Bedrock calls. What do you do?

Short term, I'd add per-tenant rate limits and token budgets in Beacon's API layer so no single tenant can take the shared quota. I'd move that county's bulk jobs to Bedrock batch inference or a queue. For the 911 real-time path, I'd separate capacity so public or bulk features can never starve dispatch. Then I'd look at quota increases, cross-Region inference within the US, and provisioned throughput if volume justifies it. And I'd use application inference profiles with cost allocation tags, so Beacon can see that county's cost and price it.

When do you use Lake Formation, and when do you filter in the application?

Lake Formation governs access to the lake itself: analysts, Athena, Redshift Spectrum, Glue jobs. It gives column, row and cell-level control with tags, so rules follow the data. But once data is copied into another system, like a vector index or a cache, Lake Formation no longer enforces anything there. So for the GenAI path, I carry the same rules forward as metadata on each chunk and enforce them in the retrieval call from verified tenant context. Both layers should come from the same tags, so policy is defined once.

A district's DPA says student data can't be used to train AI. How does Beacon prove it?

With architecture plus evidence. Bedrock doesn't train on customer data, so the base model is covered. For Beacon's own actions, there are no fine-tuning jobs on student data, enforced by an SCP or IAM policy that denies model customization in the K12 accounts, which is visible in CloudTrail. RAG keeps student data in the district's partition of the index, where it can be deleted. Retention and deletion jobs cover source data, embeddings and logs. Beacon can hand the district that control list and the matching Config and CloudTrail evidence.

How do you find PII that has ended up where it shouldn't be?

For S3, I'd turn on Macie automated discovery across the organization and send findings to Security Hub. For data in motion through the GenAI path, Bedrock Guardrails sensitive information filters or Comprehend can detect and mask PII in prompts and responses. For the lake, PII columns get Lake Formation tags so they're masked by default. And I'd check the places teams forget: invocation logs, debugging exports, vector stores and caches.

The benefits portal handles federal tax information. What's different?

FTI brings IRS Publication 1075 with it, on top of the state's own rules. The cloud services must be FedRAMP authorized, FTI must stay in the US with no offshore access, and the state agency notifies the IRS before moving FTI to a cloud or contractor. Architecturally, I'd isolate FTI in its own data store with its own key and access role, and minimize it. The AI assistant should see a derived field like "income verified" rather than the raw tax data. That keeps the Pub 1075 boundary small and easy to defend. I'd have Beacon confirm details with the state's safeguards team, since they own that relationship with the IRS.

How do you run a Well-Architected review with an ISV that wants to ship fast?

I scope it to the one workload that's about to ship, the GenAI assistant, and use the Generative AI and SaaS lenses. Two short sessions with the tech lead and security lead, not a questionnaire marathon. I frame it as finding what would block their customers' security reviews before the customers find it. The output is the top five high-risk issues, each with an owner and a date, and a re-review before GA. Fast teams accept that because it removes launch risk instead of adding process.

A customer asks, "Are we CJIS compliant if we're on AWS?"

I'd be direct: AWS gives them infrastructure that supports CJIS, signed addendums with many states, and the controls they need, but compliance is determined by their state CSA and depends on how they build and operate. I'd walk through the shared responsibility split for CJIS: AWS covers the physical and infrastructure controls, and Beacon covers identity, encryption with its own keys, personnel screening for its staff, logging and incident response. Then I'd offer to review their architecture against the controls that fall on them. I wouldn't give a yes or no that sounds like legal advice.

Where does the vector store go, and how do you choose one?

It sits inside the same security boundary as the source data, with the same encryption and access rules, because embeddings and chunks are a copy of that data. For choice: if Beacon wants the least to manage, Bedrock Knowledge Bases with a managed store. If they already run Postgres, Aurora pgvector keeps it in a familiar database with row-level security. If they need hybrid keyword and semantic search at scale, like evidence search, OpenSearch. I'd also check what's available in GovCloud for customers there, and make sure deletion jobs reach the vector store.

Some counties want control of their own encryption keys. How do you design that?

I'd give each of those tenants its own customer managed KMS key and use it for their database, S3 data, knowledge base and logs. Key policies allow only Beacon's service roles for that tenant, and every decrypt is in CloudTrail, which the county can review. If they want to be able to cut Beacon off, the key can live in a key store they control, at some cost in latency and availability. On contract exit, deleting the key makes all their data, including embeddings, unreadable. I'd reserve this for silo or bridge tenants, because per-tenant keys add management work in a pooled design.

How would you handle 911 call audio for transcription and summaries?

The audio is CJI, so it stays in the CJIS boundary. Recordings land in S3 with Object Lock and a per-agency key, and the original is never altered. Transcribe produces a transcript with custom vocabulary for local street names and unit codes, and PII redaction where the agency wants it. A Bedrock model drafts an incident summary from the transcript and CAD events, and the officer or dispatcher reviews and signs it. The summary links to the source audio and transcript by ID and hash, so the chain of custody is intact and the AI draft is never mistaken for the evidence.