Skip to content

Commit c362e4b

Browse files
iakov-awskorravin
andauthored
* add resilience hub module
Co-authored-by: korravin <[email protected]>
1 parent be5ca2f commit c362e4b

File tree

7 files changed

+1002
-3
lines changed

7 files changed

+1002
-3
lines changed

data-collection/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ List of modules and objects collected:
4242
| `licence-manager` | [AWS License Manager](https://aws.amazon.com/license-manager/) | Management Accounts | Collect Licenses and Grants |
4343
| `aws-feeds` | N/A | Data Collection Account | Collects Blog posts and News Feeds |
4444
| `quicksight` | [Amazon QuickSight](https://aws.amazon.com/quicksight/) | Data Collection Account | Collects QuickSight User and Group information in the Data Collection Account only |
45+
| `resilience-hub` | [AWS Resilince Hub](https://aws.amazon.com/resilience-hub/) | Linked Accounts | |
4546

4647

4748
### Deployment Overview

data-collection/deploy/deploy-data-collection.yaml

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Metadata:
4040
- IncludeQuickSightModule
4141
- IncludeServiceQuotasModule
4242
- IncludeEUCUtilizationModule
43+
- IncludeResilienceHubModule
4344
- Label:
4445
default: 'EUC (End User Compute) Module Configuration'
4546
Parameters:
@@ -107,6 +108,8 @@ Metadata:
107108
default: 'Include Service Quota Data Collection'
108109
IncludeQuickSightModule:
109110
default: 'Include QuickSight User Collection Module'
111+
IncludeResilienceHubModule:
112+
default: 'Include Resilience Hub Data Collection Module'
110113

111114
Mappings:
112115
RegionMap:
@@ -280,7 +283,11 @@ Parameters:
280283
Description: Collects AWS Service Quotas data
281284
AllowedValues: ['yes', 'no']
282285
Default: 'no'
283-
286+
IncludeResilienceHubModule:
287+
Type: String
288+
Description: Collects AWS Resilience Hub data
289+
AllowedValues: ['yes', 'no']
290+
Default: 'no'
284291
Conditions:
285292
DeployTAModule: !Equals [ !Ref IncludeTAModule, "yes"]
286293
DeployRightsizingModule: !Equals [ !Ref IncludeRightsizingModule, "yes"]
@@ -301,6 +308,7 @@ Conditions:
301308
DeployLicenseManagerModule: !Equals [ !Ref IncludeLicenseManagerModule, "yes"]
302309
DeployQuickSightModule: !Equals [ !Ref IncludeQuickSightModule, "yes"]
303310
DeployServiceQuotasModule: !Equals [ !Ref IncludeServiceQuotasModule, "yes"]
311+
DeployResilienceHubModule: !Equals [ !Ref IncludeResilienceHubModule, "yes"]
304312
DeployPricingModule: !Or
305313
- !Condition DeployInventoryCollectorModule
306314
- !Condition DeployRDSUtilizationModule
@@ -312,11 +320,11 @@ Conditions:
312320
- !Condition DeployCostAnomalyModule
313321
- !Condition DeploySupportCasesModule
314322
- !Condition DeployInventoryCollectorModule
315-
- !Condition DeployComputeOptimizerModule
316323
- !Condition DeployEcsChargebackModule
317324
- !Condition DeployRDSUtilizationModule
318325
- !Condition DeployOrgDataModule
319326
- !Condition DeployBudgetsModule
327+
- !Condition DeployResilienceHubModule
320328
- Fn::Or:
321329
- !Condition DeployBackupModule
322330
- !Condition DeployTransitGatewayModule
@@ -325,6 +333,7 @@ Conditions:
325333
- !Condition DeployQuickSightModule
326334
- !Condition DeployServiceQuotasModule
327335
- !Condition DeployEUCUtilizationModule
336+
- !Condition DeployComputeOptimizerModule
328337
RegionsInScopeIsEmpty: !Equals
329338
- !Join [ '', !Split [ ' ', !Ref RegionsInScope ] ] # remove spaces
330339
- ""
@@ -1464,6 +1473,31 @@ Resources:
14641473
StepFunctionExecutionRoleARN: !GetAtt StepFunctionExecutionRole.Arn
14651474
SchedulerExecutionRoleARN: !GetAtt SchedulerExecutionRole.Arn
14661475

1476+
ResilienceHubModule:
1477+
Type: AWS::CloudFormation::Stack
1478+
Condition: DeployResilienceHubModule
1479+
Properties:
1480+
TemplateURL: !Sub "https://${CFNSourceBucket}.s3.${AWS::URLSuffix}/cfn/data-collection/v3.11.0/module-resilience-hub.yaml"
1481+
Parameters:
1482+
DatabaseName: !Ref DatabaseName
1483+
DestinationBucket: !Ref S3Bucket
1484+
MultiAccountRoleName: !Sub "${ResourcePrefix}${MultiAccountRoleName}"
1485+
DataBucketsKmsKeysArns: !Ref DataBucketsKmsKeysArns
1486+
GlueRoleARN: !GetAtt GlueRole.Arn
1487+
Schedule: !Ref ScheduleFrequent
1488+
ResourcePrefix: !Ref ResourcePrefix
1489+
RegionsInScope:
1490+
Fn::If:
1491+
- RegionsInScopeIsEmpty
1492+
- !Sub "${AWS::Region}"
1493+
- !Join [ '', !Split [ ' ', !Ref RegionsInScope ] ] # remove spaces
1494+
LambdaAnalyticsARN: !GetAtt LambdaAnalytics.Arn
1495+
AccountCollectorLambdaARN: !Sub "${AccountCollector.Outputs.LambdaFunctionARN}"
1496+
CodeBucket: !If [ ProdCFNTemplateUsed, !FindInMap [RegionMap, !Ref "AWS::Region", CodeBucket], !Ref CFNSourceBucket ]
1497+
StepFunctionTemplate: !FindInMap [StepFunctionCode, main-state-machine, TemplatePath]
1498+
StepFunctionExecutionRoleARN: !GetAtt StepFunctionExecutionRole.Arn
1499+
SchedulerExecutionRoleARN: !GetAtt SchedulerExecutionRole.Arn
1500+
14671501
AccountCollector:
14681502
Type: AWS::CloudFormation::Stack
14691503
Condition: DeployAccountCollector

data-collection/deploy/deploy-data-read-permissions.yaml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Metadata:
3232
- IncludeTransitGatewayModule
3333
- IncludeLicenseManagerModule
3434
- IncludeServiceQuotasModule
35+
- IncludeResilienceHubModule
3536
ParameterLabels:
3637
ManagementAccountRole:
3738
default: "Management account role"
@@ -77,6 +78,9 @@ Metadata:
7778
default: "Include Marketplace Licensing Module"
7879
IncludeServiceQuotasModule:
7980
default: "Include Service Quotas Module"
81+
IncludeResilienceHubModule:
82+
default: "Include ResilienceHub Module"
83+
8084
Parameters:
8185
ManagementAccountRole:
8286
Type: String
@@ -182,7 +186,11 @@ Parameters:
182186
Description: Collects Service Quotas information
183187
AllowedValues: ['yes', 'no']
184188
Default: 'no'
185-
189+
IncludeResilienceHubModule:
190+
Type: String
191+
Description: Collects Resilience Hub information
192+
AllowedValues: ['yes', 'no']
193+
Default: 'no'
186194
Conditions:
187195
DeployModuleReadInMgmt: !Equals [!Ref AllowModuleReadInMgmt, "yes"]
188196

@@ -202,6 +210,7 @@ Resources:
202210
IncludeHealthEventsModule: !Ref IncludeHealthEventsModule
203211
IncludeLicenseManagerModule: !Ref IncludeLicenseManagerModule
204212
IncludeServiceQuotasModule: !Ref IncludeServiceQuotasModule
213+
205214
DataCollectorMgmtAccountModulesReadStack:
206215
Type: AWS::CloudFormation::Stack
207216
Condition: DeployModuleReadInMgmt
@@ -220,6 +229,8 @@ Resources:
220229
IncludeBudgetsModule: !Ref IncludeBudgetsModule
221230
IncludeTransitGatewayModule: !Ref IncludeTransitGatewayModule
222231
IncludeServiceQuotasModule: !Ref IncludeServiceQuotasModule
232+
IncludeResilienceHubModule: !Ref IncludeResilienceHubModule
233+
223234
DataCollectorOrgAccountModulesReadStackSet:
224235
Type: AWS::CloudFormation::StackSet
225236
Properties:
@@ -259,6 +270,8 @@ Resources:
259270
ParameterValue: !Ref IncludeTransitGatewayModule
260271
- ParameterKey: IncludeServiceQuotasModule
261272
ParameterValue: !Ref IncludeServiceQuotasModule
273+
- ParameterKey: IncludeResilienceHubModule
274+
ParameterValue: !Ref IncludeResilienceHubModule
262275
StackInstancesGroup:
263276
- DeploymentTargets:
264277
OrganizationalUnitIds: !Split [",", !Ref OrganizationalUnitIds]

data-collection/deploy/deploy-in-linked-account.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Metadata:
2121
- IncludeSupportCasesModule
2222
- IncludeTransitGatewayModule
2323
- IncludeServiceQuotasModule
24+
- IncludeResilienceHubModule
2425
ParameterLabels:
2526
DataCollectionAccountID:
2627
default: 'Data Collection Account ID'
@@ -46,6 +47,8 @@ Metadata:
4647
default: 'Include Transit Gateway Module'
4748
IncludeServiceQuotasModule:
4849
default: 'Include Service Quotas Module'
50+
IncludeResilienceHubModule:
51+
default: 'Include Resilience Hub Module'
4952

5053
Parameters:
5154
DataCollectionAccountID:
@@ -104,6 +107,11 @@ Parameters:
104107
Description: Collects Service Quotas from your accounts
105108
AllowedValues: ['yes', 'no']
106109
Default: 'no'
110+
IncludeResilienceHubModule:
111+
Type: String
112+
Description: Collects Resilience Hub data from your accounts
113+
AllowedValues: ['yes', 'no']
114+
Default: 'no'
107115

108116
Conditions:
109117
IncludeTAModulePolicy: !Equals [!Ref IncludeTAModule, "yes"]
@@ -115,6 +123,7 @@ Conditions:
115123
IncludeBudgetsModulePolicy: !Equals [!Ref IncludeBudgetsModule, "yes"]
116124
IncludeTransitGatewayModulePolicy: !Equals [!Ref IncludeTransitGatewayModule, "yes"]
117125
IncludeServiceQuotasModulePolicy: !Equals [!Ref IncludeServiceQuotasModule, "yes"]
126+
IncludeResilienceHubModulePolicy: !Equals [!Ref IncludeResilienceHubModule, "yes"]
118127

119128
Outputs:
120129
LambdaRole:
@@ -145,6 +154,7 @@ Resources:
145154
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}trusted-advisor-LambdaRole"
146155
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}support-cases-LambdaRole"
147156
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}service-quotas-LambdaRole"
157+
- !Sub "arn:${AWS::Partition}:iam::${DataCollectionAccountID}:role/${ResourcePrefix}resilience-hub-LambdaRole"
148158
Path: /
149159
Metadata:
150160
cfn_nag:
@@ -420,3 +430,38 @@ Resources:
420430
rules_to_suppress:
421431
- id: W12
422432
reason: "Policy is used for scanning of a wide range of resources"
433+
# Resilience Hub policy
434+
ResilienceHubPolicy:
435+
Type: 'AWS::IAM::Policy'
436+
Condition: IncludeResilienceHubModulePolicy
437+
Properties:
438+
PolicyName: ResilienceHubPolicy
439+
PolicyDocument:
440+
Version: "2012-10-17"
441+
Statement:
442+
- Sid: ResilienceHubRestricted
443+
Effect: Allow
444+
Action:
445+
- "resiliencehub:DescribeAppAssessment"
446+
- "resiliencehub:ListSopRecommendations"
447+
- "resiliencehub:ListAppComponentRecommendations"
448+
- "resiliencehub:ListAlarmRecommendations"
449+
Resource: !Sub "arn:${AWS::Partition}:resiliencehub:*:${AWS::AccountId}:app/*"
450+
- Sid: ResilienceHubNonRestricted
451+
Effect: Allow
452+
Action:
453+
- "resiliencehub:ListApps"
454+
- "resiliencehub:DescribeApp"
455+
- "resiliencehub:ListAppAssessments"
456+
- "resiliencehub:ListAppAssessmentComplianceDrifts"
457+
- "resiliencehub:ListTestRecommendations"
458+
- "resiliencehub:DescribeResiliencyPolicy"
459+
- "resiliencehub:ListAppVersionResources"
460+
Resource: "*" # Wildcard required as actions do not support resource-level permissions
461+
Roles:
462+
- Ref: LambdaRole
463+
Metadata:
464+
cfn_nag:
465+
rules_to_suppress:
466+
- id: W12
467+
reason: "Policy is used for scanning of a wide range of resources"

0 commit comments

Comments
 (0)