Subchapter 93.7
references/subscribing-to-shield-advanced-and-protecting-resources.mdMarkdown12 KBView on GitHub
Domain expertise for starting with AWS Shield Advanced: subscribing an account and then explicitly adding resources to protection. Covers the per-account subscription model, the consolidated billing rules customers most often ask about, the load-bearing fact that subscribing protects nothing on its own, and the auto-renewal and unsubscribe behavior that surprises customers later.
Does not cover automatic application layer mitigation, health-based detection, SRT setup, event review, or protection groups; those are separate references. Authoring AWS WAF rules is the waf skill. Rolling Shield Advanced out across an organization with Firewall Manager is the firewallmanager skill.
Execute commands using the AWS MCP server when connected (sandboxed execution, audit logging,
observability). Fall back to the AWS CLI otherwise. Shield Advanced control-plane calls run in
us-east-1; pass --region us-east-1 on every command.
To subscribe and protect resources end to end, follow the procedure exactly. See the Procedure section below.
The procedure covers:
| Resource type | Notes |
|---|---|
| CloudFront distribution | Protect here for web applications; also the place to protect an Application Load Balancer that sits behind CloudFront |
| Application Load Balancer | Protect at the load balancer when it is not behind CloudFront |
| Network Load Balancer | Protect through an attached Elastic IP address, not the load balancer directly |
| Elastic IP address | Protects the attached EC2 instance or Network Load Balancer |
| Global Accelerator standard accelerator | Protect the accelerator directly |
| Route 53 hosted zone | Protect the hosted zone directly; note it does not support health-based detection |
Constraints:
A subscription enables Shield Advanced for the account, but no resource is protected until it is added explicitly. Customers assume subscribing covers everything in the account and discover during or after an attack that nothing was protected.
Constraints:
The billing model is the most common Shield Advanced question and customers regularly overpay or hold back out of confusion about it.
Constraints:
create-subscription individually, even though only one fee is chargedThe subscription is a commitment that auto-renews, and there is no self-service unsubscribe. A customer who does not know this is surprised at renewal.
Constraints:
Subscribing does not protect anything. Add the resource with create-protection for its ARN
(Procedure).
The resource may already be protected, or the ARN format is wrong (an Elastic IP address uses the
allocation-id ARN form). Confirm with list-protections and correct the ARN.
One fee covers the whole consolidated billing family, charged to the payer. Each account still subscribes individually (Billing model).
Protect it through an attached Elastic IP address (Decision: which resource type to protect).
Subscribing and protecting resources commits the account to a billing term and changes account-wide protection, so call out the risks and the controls that contain them.
shield:CreateSubscription, shield:GetSubscriptionState,
shield:CreateProtection, shield:ListProtections) rather than broad Shield or administrator
access.shield:* calls so every subscription and
protection change leaves a record, and confirm the CloudTrail trail uses SSE-KMS encryption on its
S3 log bucket and CloudWatch Logs log group, since CloudTrail records contain sensitive API
metadata (caller identities, resource ARNs, parameters).This procedure subscribes an account to Shield Advanced and adds one or more resources to protection, then surfaces the console link to verify coverage.
Constraints for parameter acquisition:
Constraints:
aws sts get-caller-identityshield:CreateSubscription, shield:GetSubscriptionState, shield:CreateProtection,
shield:ListProtections) rather than broad Shield or administrator accessshield:* calls so every Shield Advanced
configuration change leaves an audit trailConstraints:
You MUST tell the customer the subscription auto-renews and that unsubscribing requires AWS Support before they commit
You MUST subscribe the account before adding any protection:
aws shield create-subscription --region us-east-1You MUST confirm the subscription is active:
aws shield get-subscription-state --region us-east-1Constraints:
You MUST create a protection for each resource ARN:
aws shield create-protection --name {protection_name} --resource-arn {resource_arn} --region us-east-1You MUST capture the ProtectionId from each response
You MUST NOT consider the account protected until at least one protection exists
You SHOULD recommend associating an AWS WAF web ACL with every internet-facing protected resource (CloudFront distributions and Application Load Balancers) as defense in depth — Shield Advanced (layer 3/4) and AWS WAF (layer 7) are complementary, and a rate-based AWS WAF rule is also what cost protection eligibility later requires — and point to the waf skill to set it up
Constraints:
You MUST list protections to confirm coverage:
aws shield list-protections --region us-east-1You MUST present the Shield protected-resources console link and tell the customer to open it and confirm the resources are listed as protected:
https://us-east-1.console.aws.amazon.com/wafv2/shieldv2#/protections{
"account": "111122223333",
"resource_arns": ["arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"],
"protection_names": ["my-app-distribution"]
}Subscribed account 111122223333 to Shield Advanced (auto-renews; unsubscribe via AWS Support).
Protected: my-app-distribution -> arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE
Open the Shield console and confirm the resource is listed as protected:
https://us-east-1.console.aws.amazon.com/wafv2/shieldv2#/protectionsSubscribing does not protect anything. Add the resource with create-protection (Step 3).
The resource may already be protected, or the ARN format is wrong. Confirm with list-protections
and correct the ARN.
Protect it through an attached Elastic IP address (Decision: which resource type to protect).