Skip to content

Commit cf87465

Browse files
Merge branch 'main' into houchichan-microsoft-front-door-resiliency-guide
2 parents d0cbfd0 + e8dd621 commit cf87465

11 files changed

Lines changed: 866 additions & 336 deletions

File tree

‎README.md‎

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ by SMS or voice. Start here to onboard **one deployment in one Azure region**.
66
For implementation details, configuration, packaging, and security behavior, see the
77
[technical reference](TECHNICAL.md).
88

9+
**New customer path:** [confirm access and collect values](docs/ONBOARDING.md#before-purchasing-or-deploying)
10+
→ [run guided setup](setup/docs/README.md#step-2---download-and-run-one-script)
11+
→ [connect and validate](docs/ONBOARDING.md#complete-provider-authentication)
12+
→ [activate policy](setup/docs/README.md#step-3---manually-validate-and-activate-policy)
13+
→ [operate and monitor](docs/MONITORING.md).
14+
You do not need to build locally, create `local.settings.json`, or read all three language guides.
15+
916
## Deployment options
1017

1118
| Option | Onboarding |
@@ -22,6 +29,12 @@ The guided setup deploys the Azure resources and configures the endpoint applica
2229
purchase a provider offer, grant access to a provider's API, or activate your authentication method
2330
policy. Those steps remain part of your onboarding.
2431

32+
**Before spending or activating:** confirm access to the provider's EPP integration and Microsoft's
33+
approved tenant onboarding/test procedure. The sample does not establish eligibility, licensing,
34+
or preview enrollment. It is not production certification: it has no durable queue, automatic
35+
send retries, deduplication, whole-request deadline, or overlapping key rotation. Review the
36+
[limitations](docs/CONTRACT.md#production-limitations) with your owners.
37+
2538
## Single-region architecture
2639

2740
![Single-region External Phone Provider architecture](docs/images/single-region-architecture.png)
@@ -54,7 +67,7 @@ Use a **dedicated nonproduction tenant and subscription** for your first deploym
5467

5568
| Requirement | What to prepare |
5669
|---|---|
57-
| Provider | An offer from a provider in **Security Store**, with the required SMS or voice route, account/sender registration, and provider onboarding completed. Confirm the provider is supported by the guided setup. |
70+
| Provider | An offer from [Microsoft Security Store](https://securitystore.microsoft.com/private-solutions), with the required SMS or voice route, account/sender registration, and EPP account access. Guided setup supports Telesign and Soprano only. |
5871
| Workstation | Windows with PowerShell 7+ and Azure CLI 2.60.0+ for FC1 or 2.48.1+ for EP1 on `PATH`. Certificates are issued inside Key Vault, not the local certificate store. End-to-end setup from Linux or Azure Cloud Shell has not been validated. |
5972
| Network access | Access to GitHub, Azure, Microsoft Graph, and Key Vault. FC1 publication and EP1 Python builds also require access to the Function's SCM endpoint. |
6073
| Azure permissions | An Azure user account permitted to deploy at subscription scope, register required resource providers, and create scoped role assignments. |
@@ -72,11 +85,17 @@ deploying. If Azure reports `SubscriptionIsOverQuotaForSku`, follow the
7285
[regional quota troubleshooting steps](setup/docs/Troubleshooting.md#deployment-fails-with-subscriptionisoverquotaforsku)
7386
before retrying.
7487

88+
The customer-designated **onboarding owner** coordinates the Azure operator, tenant/policy
89+
administrator, provider administrator, and Microsoft support. This repository does not supply
90+
a named contact. If the offer or required feature/test procedure is unavailable, follow the
91+
[access gate](docs/ONBOARDING.md#before-purchasing-or-deploying), not a workaround that weakens authentication.
92+
7593
## Onboard your endpoint
7694

7795
### 1. Set up your provider and application
7896

79-
In **Security Store > Provider offers**, purchase an offer and complete the provider's account,
97+
In [Microsoft Security Store](https://securitystore.microsoft.com/private-solutions), review the
98+
provider offer, then purchase and complete the provider's account,
8099
sender, and channel onboarding. Confirm that the provider supports the required SMS or voice route.
81100
Purchasing the offer does not deploy the Function.
82101

@@ -97,11 +116,17 @@ Have the following values ready before running setup:
97116
| Subscription ID | Selects the Azure subscription where resources will be deployed. |
98117
| Application client ID | Identifies the dedicated endpoint app you just registered. |
99118
| Azure region | Places this deployment in one region. |
100-
| Channel and provider scope | Selects SMS or voice and the provider's Global or EU route. Provider scope is separate from the Azure region. |
101-
| Language | Selects one of the equivalent Function implementations below. |
119+
| Channel and provider scope | Selects one SMS or voice route and the provider's Global or EU label. This is separate from Azure region and is not a data-residency guarantee. |
120+
| Language | Selects one Function implementation below. The HTTP contract is shared; caching and telemetry differ by runtime. |
102121
| Service plan | Selects Flex Consumption FC1 or Premium EP1. Required explicitly for unattended setup. |
103122
| Resource prefix | Use 2-8 lowercase letters or digits, starting with a letter, such as `contoso`. Setup adds resource-specific names and a suffix. |
104123

124+
Use the [central values table](docs/ONBOARDING.md#values-and-ownership) for exact portal locations,
125+
parameter names, client-ID versus Object-ID distinctions, and settings setup creates automatically.
126+
For a second independent channel/provider endpoint, use a new prefix and dedicated app.
127+
Changing channel/provider/region with the same subscription/app/prefix is a reconfiguration,
128+
not an additional deployment; see [deployment separation](docs/ONBOARDING.md#inputs-you-supply-to-setup).
129+
105130
### 2. Deploy the endpoint
106131

107132
No repository clone is needed. Download [Setup-Epp.ps1](setup/Setup-Epp.ps1), inspect it, then run it
@@ -149,6 +174,9 @@ consent, and prerequisite-installation prompts are separate from deployment appr
149174

150175
#### What successful setup produces
151176

177+
**Setup has already deployed the code and Azure settings.** Skip local configuration and manual
178+
ZIP publication unless you are developing a custom implementation.
179+
152180
- A dedicated resource group, selected Linux FC1 or EP1 plan, Function App, and storage account.
153181
- Key Vault and the encryption certificate/key configuration.
154182
- Managed identities, scoped role assignments, and Easy Auth caller restrictions.
@@ -161,7 +189,8 @@ an authentication error**; it is the endpoint's caller-authentication gate.
161189
Save the public certificate and timestamped deployment summary from `epp-output` beside the
162190
downloaded script, or your selected output directory. Confirm the tenant, application client ID,
163191
endpoint URL, and encryption key ID with your EPP onboarding owner. Private keys are not included
164-
in the summary.
192+
in the summary. Use the [summary field guide](setup/docs/README.md#read-the-deployment-summary)
193+
to locate the vault, Function, telemetry resources, and version information.
165194

166195
The encryption certificate is issued inside Key Vault; setup downloads only the public certificate.
167196
The Function is pinned to a specific private-key secret version. Certificate renewal and the
@@ -180,15 +209,19 @@ action depends on the authentication method supported by its integration:
180209

181210
| Authentication method | Required action |
182211
|---|---|
183-
| API key or token | Store the required credentials and any matching account/customer identifier in Key Vault using the integration's documented secret names. Confirm the Function identity has Key Vault Secrets User access. |
184-
| OAuth with managed identity | Complete the provider's consent/application-role onboarding for the existing multitenant application. Setup configures the supported outbound managed-identity federation, but does not grant access to the provider API. |
212+
| Telesign API key | Enter `telesign-api-key` and `telesign-customer-id` in the setup-created vault using the [safe portal steps](docs/ONBOARDING.md#telesign-enter-and-verify-the-two-vault-secrets). Setup already grants the Function system identity Key Vault Secrets User. |
213+
| Soprano OAuth | Complete the [provider-admin handoff](docs/ONBOARDING.md#soprano-provider-administrator-handoff) for the existing multitenant application. Setup configures the outbound federation, but does not grant access in the provider tenant. |
185214

186215
Replace any test provider values before live validation. Never put API keys in source code or local
187216
settings. See [provider authentication](docs/ONBOARDING.md#provider-credential-names) for details.
188217

189218
#### Validate before activation
190219

191-
Use the supported EPP test procedure with your onboarding owner. Validate the deployed endpoint,
220+
Arrange Microsoft's approved EPP test procedure with your onboarding owner. This repository has
221+
offline tests, **not a self-service authorized caller/token tool**. A normal customer CLI token
222+
cannot impersonate the allowlisted Microsoft caller. See the
223+
[test handoff, negative check, and evidence checklist](docs/ONBOARDING.md#validate-the-deployed-endpoint).
224+
If the authorized procedure is unavailable, stop before activation. Validate the deployed endpoint,
192225
not just a locally running Function.
193226

194227
| Check | Expected result |
@@ -198,9 +231,10 @@ not just a locally running Function.
198231
| Controlled live test | The provider accepts the selected SMS or voice request and the test recipient receives the message or call. Provider acceptance alone is not proof of delivery. |
199232
| Operational visibility | Review Application Insights for the request outcome without recording phone numbers, message bodies, tokens, private keys, or nonce values in shared logs. |
200233

201-
Configured workers can acquire and refresh provider credentials in the background without sending
202-
an OTP, even while evaluation requests run. Check for `credential_refresh_failed` warnings before
203-
live testing; an evaluation success does not validate provider credentials.
234+
Configured workers can acquire credentials at startup without sending an OTP; JavaScript/Python
235+
also poll for refresh, whereas .NET retrieves replacements on cache misses. Check collected
236+
`credential_refresh_failed` warnings before live testing; an evaluation success or absence of
237+
warnings does not validate provider credentials.
204238

205239
Stop and resolve failed checks before changing the authentication policy. A successful package
206240
deployment is not evidence that provider credentials, caller authentication, or handset delivery work.
@@ -218,6 +252,8 @@ method policy using the endpoint URL and application client ID from the deployme
218252
**Setup does not activate policy.** If the supported policy fields are unavailable, stop and obtain
219253
the supported procedure from Microsoft rather than guessing an update. Policy backup and rollback
220254
remain administrator-owned; deleting Azure resources does not roll back policy.
255+
Public Graph SMS/voice resource documentation does not document the EPP `url`/`appId` fields;
256+
this is an assisted product-specific step, not a public PATCH example.
221257

222258
Follow the [validation and activation procedure](setup/docs/README.md#step-3---manually-validate-and-activate-policy)
223259
before using the endpoint.
@@ -229,7 +265,13 @@ before using the endpoint.
229265
- [ ] Unauthorized callers are rejected and authorized evaluation succeeds without delivery.
230266
- [ ] A controlled live test confirms both provider acceptance and recipient delivery.
231267
- [ ] An administrator has backed up, activated, and read back the selected authentication policy.
232-
- [ ] The owner has retained the deployment summary and documented the manual rollback procedure.
268+
- [ ] Request/log ingestion is verified for the chosen runtime, and alert notifications are tested.
269+
- [ ] Credential and certificate-renewal owners, expiry reminders, and retention/cost controls are assigned.
270+
- [ ] The owner has retained the deployment summary and documented [rollback and teardown](setup/docs/README.md#rollback-and-decommissioning).
271+
272+
Setup creates Application Insights and a workspace, **not alerts, action groups, availability
273+
tests, or certificate contacts**. Complete the [monitoring setup](docs/MONITORING.md#5-set-up-notifications-and-alert-rules)
274+
and [certificate lifecycle](setup/docs/README.md#encryption-certificate-lifecycle) steps manually.
233275

234276
For setup failures, start with the [troubleshooting guide](setup/docs/Troubleshooting.md). For
235277
application behavior or configuration details, use the technical documentation below.
@@ -241,5 +283,6 @@ application behavior or configuration details, use the technical documentation b
241283
- [Optional manual Azure Front Door onboarding](docs/FRONTDOOR.md) - regional setup, readiness, security, and test results. No deployment script is provided.
242284
- [Setup guide](setup/docs/README.md) - permissions, deployment prompts, validation, and manual rollback.
243285
- [Technical reference](TECHNICAL.md) - configuration, packages, provider behavior, and security.
244-
- [Detailed configuration and validation](docs/ONBOARDING.md) - local development and deployment checks.
245-
- Implementation guides: [JavaScript](javascript/README.md), [.NET](dotnet/README.md), [Python](python/README.md).
286+
- [Customer configuration and validation](docs/ONBOARDING.md) - value sources, automatic settings, provider handoffs, acceptance checks, and optional developer work.
287+
- [HTTP and provider contract](docs/CONTRACT.md) - implementation behavior and production limits.
288+
- Optional developer guides (not additional customer deployment steps): [JavaScript](javascript/README.md), [.NET](dotnet/README.md), [Python](python/README.md).

0 commit comments

Comments
 (0)