def _canonical_request(self):
        """
        Returns (str):
            An AWS Signature Version 4 canonical request in the format:
                <Method>\n
                <Path>\n
                <CanonicalQueryString>\n
                <CanonicalHeaders>\n
                <SignedHeaders>\n
                <HashedPayload>
        """
        # The hashed_payload is always an empty string for MSK.
        hashed_payload = self.hashfunc(b'').hexdigest()
        return '\n'.join((
            'GET',
            '/',
            self._canonical_querystring,
            self._canonical_headers,
            self._signed_headers,
            hashed_payload,
        ))

        Returns (str):
            An AWS Signature Version 4 canonical request in the format:
                <Method>

                <Path>

                <CanonicalQueryString>

                <CanonicalHeaders>

                <SignedHeaders>

                <HashedPayload>
        
kafka/sasl/msk.py