diff --git a/backend/src/ceph_service.py b/backend/src/ceph_service.py
index 6f99f1e6e8b99879af02ba01d05b1a32bb45b1fb..d7b4e73d585bea7b3e84477923a55efd10341e42 100644
--- a/backend/src/ceph_service.py
+++ b/backend/src/ceph_service.py
@@ -1,5 +1,5 @@
 from models.buckets import BucketInfo, BucketRWAccess, BucketInfoResponse
-from models.buckets import Bu
+from models.buckets import BucketContentResponse
 import boto3
 import json
 import os
@@ -10,7 +10,7 @@ AWS_SECRET_ACCESS_KEY = os.getenv("MINIO_SECRET_ACCESS_KEY", "minioadmin")
 AWS_SESSION_TOKEN = None
 
 
-def get_s3_client():
+def get_s3_resource():
     return boto3.resource('s3',
                           endpoint_url=MINIO_ENDPOINT,
                           aws_access_key_id=AWS_ACCESS_KEY_ID,
@@ -21,9 +21,14 @@ def get_s3_client():
                           )
 
 
+def get_s3_client():
+    resource = get_s3_resource()
+    return resource.meta.client
+
+
 def list_buckets() -> BucketInfoResponse:
-    s3 = get_s3_client()
-    client = s3.meta.client
+    s3 = get_s3_resource()
+    client = get_s3_client()
     response = client.list_buckets()
     buckets_info = response["Buckets"]
     buckets = [None] * len(buckets_info)
@@ -51,3 +56,10 @@ def list_buckets() -> BucketInfoResponse:
             size=size_byte
         )
     return BucketInfoResponse(buckets=buckets, total=len(buckets))
+
+
+def list_bucket(bucket_name: str) -> BucketContentResponse:
+    client = get_s3_client()
+    buckets = client.list_objects_v2(Bucket=bucket_name)["Contents"]
+    print(buckets[0])
+    return BucketContentResponse(buckets=buckets, total=len(buckets))
diff --git a/backend/src/models/buckets.py b/backend/src/models/buckets.py
index ef72ede784006f01f58e54bcf6629fcee125d27f..fc97663da01b91c42a0f7e3fb0599d85050ed94e 100644
--- a/backend/src/models/buckets.py
+++ b/backend/src/models/buckets.py
@@ -21,3 +21,25 @@ class BucketInfoResponse(BaseModel):
     buckets: List[BucketInfo]
     total: int
 
+
+class BucketOwner(BaseModel):
+    DisplayName: str
+    ID: str
+
+
+class BucketObject(BaseModel):
+    Key: str
+    LastModified: datetime
+    ETag: str
+    Size: int
+    StorageClass: str
+    Owner: BucketOwner
+
+class BucketNotfound:
+    status: str
+    detail: str
+    headers: dict
+
+class BucketContentResponse(BaseModel):
+    buckets: List[BucketObject]
+    total: int
diff --git a/backend/src/routes/buckets.py b/backend/src/routes/buckets.py
index 766c6b7bee0a02385561ceb59437997dcb50d620..6661a12fb0d91881cc90f50cb0813e27090fa888 100644
--- a/backend/src/routes/buckets.py
+++ b/backend/src/routes/buckets.py
@@ -1,5 +1,6 @@
-from models.buckets import BucketInfoResponse
-from fastapi import APIRouter
+from models.buckets import BucketInfoResponse, BucketContentResponse, BucketNotfound
+from fastapi import APIRouter, HTTPException, Response
+from botocore.exceptions import ClientError
 import ceph_service
 
 router = APIRouter()
@@ -8,3 +9,14 @@ router = APIRouter()
 @router.get("/buckets")
 def list_buckets() -> BucketInfoResponse:
     return ceph_service.list_buckets()
+
+
+@router.get("/buckets/{bucket_name}")
+def list_bucket(bucket_name: str) -> BucketContentResponse:
+    try:
+        return ceph_service.list_bucket(bucket_name=bucket_name)
+    except ClientError as err:
+        status = err.response["ResponseMetadata"]["HTTPStatusCode"]
+        detail = err.response["Error"]["Code"]
+        headers = err.response["ResponseMetadata"]["HTTPHeaders"]
+        raise HTTPException(status_code=status, detail=detail, headers=headers)