# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
---
description: |
  ### Document Name - ASR-PCI_3.2.1_Lambda.1

  ## What does this document do?
  This document removes the public resource policy. A public resource policy
  contains a principal "*" or AWS: "*", which allows public access to the
  function. The remediation is to remove the SID of the public policy.

  ## Input Parameters
  * Finding: (Required) Security Hub finding details JSON
  * AutomationAssumeRole: (Required) The ARN of the role that allows Automation to perform the actions on your behalf.

  ## Documentation Links
  * [PCI Lambda.1](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-pci-controls.html#pcidss-lambda-1)

schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
outputs:
  - Remediation.Output
  - ParseInput.AffectedObject
parameters:
  Finding:
    type: StringMap
    description: The input from the Orchestrator Step function for the PCI.Lambda.1 finding
  AutomationAssumeRole:
    type: String
    description: (Required) The ARN of the role that allows Automation to perform the actions on your behalf.
    allowedPattern: '^arn:(?:aws|aws-us-gov|aws-cn):iam::\d{12}:role/[\w+=,.@-]+$'
  RemediationRoleName:
    type: String
    default: "SO0111-RemoveLambdaPublicAccess"
    allowedPattern: '^[\w+=,.@-]+$'

mainSteps:
  - name: ParseInput
    action: 'aws:executeScript'
    outputs:
      - Name: FindingId
        Selector: $.Payload.finding_id
        Type: String
      - Name: ProductArn
        Selector: $.Payload.product_arn
        Type: String
      - Name: AffectedObject
        Selector: $.Payload.object
        Type: StringMap
      - Name: FunctionName
        Selector: $.Payload.resource_id
        Type: String
      - Name: RemediationRegion
        Selector: $.Payload.resource_region
        Type: String
      - Name: RemediationAccount
        Selector: $.Payload.account_id
        Type: String
    inputs:
      InputPayload:
        Finding: '{{Finding}}'
        parse_id_pattern: '^arn:(?:aws|aws-us-gov|aws-cn):lambda:(?:[a-z]{2}(?:-gov)?-[a-z]+-\d):\d{12}:function:([a-zA-Z0-9\-_]{1,64})$'
        expected_control_id:
        - 'PCI.Lambda.1'
      Runtime: python3.8
      Handler: parse_event
      Script: |-
        %%SCRIPT=common/parse_input.py%%
    isEnd: false

  -
    name: Remediation
    action: 'aws:executeAutomation'
    isEnd: false
    inputs:
      DocumentName: ASR-RemoveLambdaPublicAccess
      TargetLocations:
        - Accounts: [ '{{ParseInput.RemediationAccount}}' ]
          Regions: [ '{{ParseInput.RemediationRegion}}' ]
          ExecutionRoleName: '{{RemediationRoleName}}'
      RuntimeParameters:
        FunctionName: '{{ ParseInput.FunctionName }}'
        AutomationAssumeRole: 'arn:{{global:AWS_PARTITION}}:iam::{{global:ACCOUNT_ID}}:role/{{RemediationRoleName}}'

  -
    name: UpdateFinding
    action: 'aws:executeAwsApi'
    inputs:
      Service: securityhub
      Api: BatchUpdateFindings
      FindingIdentifiers:
      - Id: '{{ParseInput.FindingId}}'
        ProductArn: '{{ParseInput.ProductArn}}'
      Note:
        Text: 'Lamdba {{ParseInput.FunctionName}} policy updated to remove public access'
        UpdatedBy: 'ASR-PCI_3.2.1_Lambda.1 '
      Workflow:
        Status: RESOLVED
    description: Update finding
    isEnd: true