code: @Override
      public DescribeClusterSecurityGroupsResult describeClusterSecurityGroups(DescribeClusterSecurityGroupsRequest request) {
          request = beforeClientExecution(request);
          return executeDescribeClusterSecurityGroups(request);
      }
docs: <p>
  Returns information about Amazon Redshift security groups. If the name of a security group is specified, the
  response will contain only information about only that security group.
  </p>
  <p>
  For information about managing security groups, go to <a
  href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-security-groups.html">Amazon Redshift Cluster
  Security Groups</a> in the <i>Amazon Redshift Cluster Management Guide</i>.
  </p>
  <p>
  If you specify both tag keys and tag values in the same request, Amazon Redshift returns all security groups that
  match any combination of the specified keys and values. For example, if you have <code>owner</code> and
  <code>environment</code> for tag keys, and <code>admin</code> and <code>test</code> for tag values, all security
  groups that have any combination of those values are returned.
  </p>
  <p>
  If both tag keys and values are omitted from the request, security groups are returned regardless of whether they
  have tag keys or values associated with them.
  </p>
  
  @param describeClusterSecurityGroupsRequest
  @return Result of the DescribeClusterSecurityGroups operation returned by the service.
  @throws ClusterSecurityGroupNotFoundException
  The cluster security group name does not refer to an existing cluster security group.
  @throws InvalidTagException
  The tag is invalid.
  @sample AmazonRedshift.DescribeClusterSecurityGroups
  @see <a href="http://docs.aws.amazon.com/goto/WebAPI/redshift-2012-12-01/DescribeClusterSecurityGroups"
  target="_top">AWS API Documentation</a>