You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Adds blkmon-agent-seal RSA 3072 key with encrypt/decrypt ops and the
same rotation policy (P1Y rotate, P2Y expiry, P30D notify) as the KEK.
- Role assignments scoped to the SPECIFIC key (not vault): Functions
UAMI gets Crypto User for encrypt, optional hybridAgentPrincipalId
param gets Crypto User for decrypt. Built-in RBAC cannot separate
encrypt-only/decrypt-only at key level; operational boundary preserved
by identity isolation (custom role pair available as future hardening).
- Adds dek-sealed-batches SB queue with lockDuration=5m (covers KV
decrypt + AES-GCM open + slow on-prem DB INSERT), TTL=2h, dedup=20m,
deadLetter on expiry.
- Queue-scoped Service Bus Data Receiver role for the agent identity
(only dek-sealed-batches, not the namespace) - empty list disables
until the agent identity is provisioned.
- App Config seed keys: blkmon:Encryption:KeyVault:SealKeyName and
blkmon:ServiceBus:Queues:SealedBatches.
- New main.bicep param hybridAgentPrincipalId (defaults to empty;
provision the agent identity then re-run azd to wire role
assignments).
- New outputs: AZURE_AGENT_SEAL_KEY_NAME, AZURE_AGENT_SEAL_KEY_URI,
AZURE_SEALED_BATCHES_QUEUE.
az bicep build validates clean.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@description('Object ID of the on-prem HybridAgent identity (SPN or UAMI). Granted decrypt on the agent-seal Key Vault key and Service Bus Data Receiver on the dek-sealed-batches queue. Leave empty before the agent identity exists; populate and re-run azd after provisioning.')
Copy file name to clipboardExpand all lines: infra/modules/keyvault.bicep
+77Lines changed: 77 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,10 @@ param tenantId string
6
6
paramdeployerPrincipalIdstring
7
7
@description('Object IDs of workload identities (web, func) that need wrapKey/unwrapKey for the KEK and Get for secrets resolved via App Configuration KV-references.')
8
8
paramconsumerPrincipalIdsarray
9
+
@description('Object IDs of identities that need encrypt rights on the agent-seal key (Phase 3 Functions producer). Typically the Functions UAMI. Empty disables.')
10
+
paramsealKeyEncryptPrincipalIdsarray = []
11
+
@description('Object IDs of identities that need decrypt rights on the agent-seal key (Phase 3 HybridAgent consumer). Typically the HybridAgent UAMI / SPN. Empty disables — provision the agent identity then re-run azd.')
12
+
paramsealKeyDecryptPrincipalIdsarray = []
9
13
@description('Enable purge protection. Once enabled, CANNOT be disabled. Keep true for prod, set false for ephemeral dev environments.')
Copy file name to clipboardExpand all lines: infra/modules/servicebus.bicep
+35Lines changed: 35 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,8 @@ param namespaceName string
5
5
paramconsumerPrincipalIdsarray
6
6
@description('Object IDs that need to send messages (Azure Service Bus Data Sender).')
7
7
paramsenderPrincipalIdsarray
8
+
@description('Object IDs that need to RECEIVE specifically from the sealed-batches queue (Phase 3 HybridAgent). Optional — empty disables. Defaults to none because the agent identity must be provisioned out-of-band first.')
9
+
paramsealedBatchReceiverPrincipalIdsarray = []
8
10
9
11
varsbReceiverRoleId = '4f6d3b9b-027b-4f4c-9142-0e5a2a2247e0'// Azure Service Bus Data Receiver
10
12
varsbSenderRoleId = '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39'// Azure Service Bus Data Sender
0 commit comments