open-policy-agentrego

How to extract a portion of string if it exist in rego


I have the following response from an API and I need to get the resourceName if it consists the keywords -ecs-cloudwatch-policy. How can this be achieved in rego?

{
    'resourceId': 'ABCDEF12345', 
    'resourceName': 'IAM-ctf-109-ecs-cloudwatch-policy', 
    'resourceType': 'AWS: :IAM: :Policy', 
    'name': 'Is attached to Policy'
},
{   'resourceId': 'ABCDEF54321', 
    'resourceName': 'IAM-KMS-Policy-115', 
    'resourceType': 'AWS: :IAM: :Policy', 
    'name': 'Is attached to CustomerPolicy'
}

Solution

  • Assuming the input data is an array provided as the global input variable, you could do something like this to traverse all the values in search for matches:

    package policy
    
    import future.keywords
    
    cloudwatch_policy_resource_names contains resource.resourceName if {
        some resource in input
        contains(resource.resourceName, "ecs-cloudwatch-policy")
        
    }
    

    Given your input data, the cloudwatch_policy_resource_names rule would evaluate to:

    [
        "IAM-ctf-109-ecs-cloudwatch-policy"
    ]