in tflint-ruleset-aws-serverless/rules/aws_iam_role_lambda_no_star.go [70:104]
func (r *AwsIamRoleLambdaNoStarRule) matchPrincipal(runner tflint.Runner, policy *hcl.Attribute) (bool, error) {
var assumeAttrValue string
err := runner.EvaluateExpr(policy.Expr, &assumeAttrValue, nil)
if err != nil {
return false, err
}
assumeRolePolicy := awsIamAssumeRole{}
err = json.Unmarshal([]byte(assumeAttrValue), &assumeRolePolicy)
if err != nil {
return false, err
}
for _, principalName := range r.principalNames {
for _, statement := range assumeRolePolicy.Statement {
if principalService, ok := statement.Principal["Service"]; ok {
switch principalService := principalService.(type) {
case string:
if principalService == principalName {
return true, nil
}
case []string:
for i := range principalService {
if principalService[i] == principalName {
return true, nil
}
}
}
}
}
}
return false, nil
}