Skip to content

Commit 1840778

Browse files
authored
Fixed default control standards autoenable on enable sechub (#195)
* Fixed default control standards autoenabled on enable sechub * Fixed linting
1 parent 378f723 commit 1840778

File tree

3 files changed

+55
-11
lines changed

3 files changed

+55
-11
lines changed

Diff for: aws_sra_examples/solutions/securityhub/securityhub_org/lambda/src/app.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -199,15 +199,14 @@ def process_add_update_event(params: dict) -> str:
199199
create_sns_messages(accounts, regions, params["SNS_TOPIC_ARN"], "disable")
200200
return "DISABLE_COMPLETE"
201201

202-
if params["action"] == "Add":
203-
LOGGER.info("...Enable Security Hub")
202+
LOGGER.info("...Enable Security Hub")
204203

205-
# Configure Security Hub in the Management Account
206-
securityhub.enable_account_securityhub(
207-
params["MANAGEMENT_ACCOUNT_ID"], regions, params["CONFIGURATION_ROLE_NAME"], params["AWS_PARTITION"], get_standards_dictionary(params)
208-
)
209-
LOGGER.info("Waiting 20 seconds before configuring the delegated admin account.")
210-
sleep(20)
204+
# Configure Security Hub in the Management Account first, or else the default standards are automatically enabled for member accounts
205+
securityhub.enable_account_securityhub(
206+
params["MANAGEMENT_ACCOUNT_ID"], regions, params["CONFIGURATION_ROLE_NAME"], params["AWS_PARTITION"], get_standards_dictionary(params)
207+
)
208+
LOGGER.info("Waiting 20 seconds before configuring the delegated admin account.")
209+
sleep(20)
211210

212211
# Configure Security Hub Delegated Admin and Organizations
213212
securityhub.configure_delegated_admin_securityhub(
@@ -217,6 +216,8 @@ def process_add_update_event(params: dict) -> str:
217216
params["CONFIGURATION_ROLE_NAME"],
218217
params["REGION_LINKING_MODE"],
219218
params["HOME_REGION"],
219+
params["AWS_PARTITION"],
220+
get_standards_dictionary(params),
220221
)
221222
# Configure Security Hub in the Delegated Admin Account
222223
securityhub.enable_account_securityhub(

Diff for: aws_sra_examples/solutions/securityhub/securityhub_org/lambda/src/securityhub.py

+45-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
MAX_RETRY = 5
3636
SECURITY_HUB_THROTTLE_PERIOD = 0.2
3737
BOTO3_CONFIG = Config(retries={"max_attempts": 10, "mode": "standard"})
38+
AWS_DEFAULT_SBP_VERSION = "1.0.0"
39+
AWS_DEFAULT_CIS_VERSION = "1.2.0"
3840

3941
try:
4042
MANAGEMENT_ACCOUNT_SESSION = boto3.Session()
@@ -276,7 +278,14 @@ def enable_account_securityhub(account_id: str, regions: list, configuration_rol
276278

277279

278280
def configure_delegated_admin_securityhub(
279-
accounts: list, regions: list, delegated_admin_account_id: str, configuration_role_name: str, region_linking_mode: str, home_region: str
281+
accounts: list,
282+
regions: list,
283+
delegated_admin_account_id: str,
284+
configuration_role_name: str,
285+
region_linking_mode: str,
286+
home_region: str,
287+
aws_partition: str,
288+
standards_user_input: dict,
280289
) -> None:
281290
"""Configure delegated admin security hub.
282291
@@ -287,13 +296,46 @@ def configure_delegated_admin_securityhub(
287296
configuration_role_name: Configuration Role Name
288297
region_linking_mode: Region Linking Mode
289298
home_region: Home Region
299+
aws_partition: AWS Partition
300+
standards_user_input: Dictionary of standards
290301
"""
291302
process_organization_admin_account(delegated_admin_account_id, regions)
292-
delegated_admin_session = common.assume_role(configuration_role_name, "sra-enable-security-hub", delegated_admin_account_id)
303+
delegated_admin_session: boto3.Session = common.assume_role(configuration_role_name, "sra-enable-security-hub", delegated_admin_account_id)
293304

294305
for region in regions:
295306
securityhub_delegated_admin_region_client: SecurityHubClient = delegated_admin_session.client("securityhub", region, config=BOTO3_CONFIG)
296-
update_organization_configuration_response = securityhub_delegated_admin_region_client.update_organization_configuration(AutoEnable=True)
307+
308+
standard_dict = get_standard_dictionary(
309+
delegated_admin_account_id,
310+
region,
311+
aws_partition,
312+
AWS_DEFAULT_SBP_VERSION,
313+
AWS_DEFAULT_CIS_VERSION,
314+
standards_user_input["PCIVersion"],
315+
standards_user_input["NISTVersion"],
316+
)
317+
318+
for i in range(10):
319+
standards_subscriptions = get_enabled_standards(securityhub_delegated_admin_region_client)
320+
if (
321+
all_standards_in_status(standards_subscriptions, "READY", securityhub_delegated_admin_region_client)
322+
and len(standards_subscriptions) != 0
323+
):
324+
break
325+
LOGGER.info(f"Waiting 20 seconds before checking if delegated admin default standards are in READY status. {i} of 10")
326+
sleep(20)
327+
328+
# Manually disable Security Hub default standards in Admin Account
329+
batch_disable_standards_response = securityhub_delegated_admin_region_client.batch_disable_standards(
330+
StandardsSubscriptionArns=[standard_dict["sbp"]["subscription_arn"], standard_dict["cis"]["subscription_arn"]]
331+
)
332+
api_call_details = {"API_Call": "securityhub:BatchDisableStandards", "API_Response": batch_disable_standards_response}
333+
LOGGER.info(api_call_details)
334+
LOGGER.info(f"SecurityHub default standards disabled in {region}")
335+
336+
update_organization_configuration_response = securityhub_delegated_admin_region_client.update_organization_configuration(
337+
AutoEnable=True, AutoEnableStandards="NONE"
338+
)
297339
api_call_details = {"API_Call": "securityhub:UpdateOrganizationConfiguration", "API_Response": update_organization_configuration_response}
298340
LOGGER.info(api_call_details)
299341
LOGGER.info(f"SecurityHub organization configuration updated in {region}")

Diff for: aws_sra_examples/solutions/securityhub/securityhub_org/templates/sra-securityhub-org-configuration-role.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ Resources:
169169
- securityhub:DeleteMembers
170170
- securityhub:GetMembers
171171
- securityhub:UpdateOrganizationConfiguration
172+
- securityhub:BatchDisableStandards
172173
Resource:
173174
- !Sub arn:${AWS::Partition}:securityhub:*:${AWS::AccountId}:hub/default
174175
- !Sub arn:${AWS::Partition}:securityhub:*:${AWS::AccountId}:/accounts

0 commit comments

Comments
 (0)