예제 #1
0
 def _check_creds(self):
     try:
         self.s3_client.get_bucket_location(Bucket=self.bucket_name)
     except Exception as ex:
         if hasattr(ex, 'response') and ex.response.get(
                 'ResponseMetadata',
             {}).get('HTTPStatusCode') in [403, 401]:
             # Permission denied
             raise BadCredentialsError(
                 creds_dict=self.session.get_credentials().__dict__,
                 endpoint=self.s3_client._endpoint,
                 cause=ex)
         elif hasattr(ex, 'response') and ex.response.get(
                 'ResponseMetadata', {}).get('HTTPStatusCode') in [400]:
             # Signature mismatch error (bad request), usually a wrong secret key for a valid access key
             raise BadCredentialsError(
                 creds_dict=self.session.get_credentials().__dict__,
                 endpoint=self.s3_client._endpoint,
                 cause=ex)
         elif hasattr(ex, 'response') and ex.response.get(
                 'ResponseMetadata', {}).get('HTTPStatusCode') in [404]:
             raise BucketNotFoundError(self.bucket_name)
         else:
             logger.error('Got cred check error: {}'.format(
                 ex.response.get('ResponseMetadata')))
             raise ex
예제 #2
0
 def _check_creds(self):
     """
     Simple operation to verify creds work without state change
     :return: True on success
     """
     try:
         resp = self.client.stat()
         if resp["success"]:
             return True
         elif resp.get("error") and resp.get("error").http_status in [401, 403]:
             raise BadCredentialsError(
                 self.auth_options, endpoint=None, cause=resp.get("error")
             )
         elif resp.get("error"):
             raise DriverConfigurationError(cause=resp.get("error"))
         else:
             raise DriverConfigurationError(
                 Exception(
                     "Got unsuccessful response from stat operation against service: {}".format(
                         resp
                     )
                 )
             )
     except SwiftError as e:
         raise DriverConfigurationError(e)
예제 #3
0
    def _check(self):
        """
        Ensure that client can put/get/delete from a bucket.
        """
        key = "__anchore_s3_key_self_check__{}".format(str(uuid.uuid4()))

        try:
            self.s3_client.put_object(Bucket=self.bucket_name,
                                      Key=key,
                                      Body=b"")
            self.s3_client.get_object(Bucket=self.bucket_name, Key=key)
            self.s3_client.delete_object(Bucket=self.bucket_name, Key=key)
        except Exception as ex:
            try:
                code = ex.response.get("ResponseMetadata",
                                       {}).get("HTTPStatusCode")
                if code in [403, 401, 400]:
                    raise BadCredentialsError(
                        creds_dict=self.session.get_credentials().__dict__,
                        endpoint=self.s3_client._endpoint,
                        cause=ex,
                    )
                elif code == 404:
                    if self.create_bucket:
                        self.s3_client.create_bucket(Bucket=self.bucket_name)
                    else:
                        raise BucketNotFoundError(self.bucket_name)
            except AttributeError:
                raise
예제 #4
0
 def _check_creds(self):
     try:
         self.s3_client.get_bucket_location(Bucket=self.bucket_name)
     except Exception as ex:
         if type(ex).__name__ == 'ClientError' and hasattr(
                 ex, 'response') and ex.response.get(
                     'ResponseMetadata',
                     {}).get('HTTPStatusCode') in [403, 401]:
             raise BadCredentialsError(
                 creds_dict=self.session.get_credentials().__dict__,
                 endpoint=self.s3_client._endpoint,
                 cause=ex)