--- title: "Python용 AWS SDK (Boto3)" slug: "storage-storage-8-2" tags: ["Object Storage", "Python", "VPC"] updated: 2026-07-23T09:03:01Z published: 2026-07-23T09:03:01Z canonical: "guide-fin.ncloud-docs.com/storage-storage-8-2" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide-fin.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Python용 AWS SDK (Boto3) ## Python용 SDK for S3 API AWS S3에서 제공하는 Python용 SDK를 이용해 네이버 클라우드 플랫폼의 Object Storage 서비스를 사용하는 예제입니다. AWS Python SDK 1.6.19 버전을 기준으로 작성되었습니다. ### SDK 설치 SDK를 설치하는 방법은 다음과 같습니다. ``` pip install boto3==1.6.19 ``` :::(Info) (참고) * Boto3 1.6.19 버전은 Python3.8 사용을 권장합니다. Python3.9 이상 버전 사용 시에는 최신 버전 Boto3를 사용해 주십시오. * Boto3 관련 자료는 다음을 참조해 주십시오. * AWS Python SDK 소스: [https://github.com/boto/boto3](https://github.com/boto/boto3){target="_blank"} * 관련 문서: [https://boto3.readthedocs.io/en/latest/reference/services/s3.html](https://boto3.readthedocs.io/en/latest/reference/services/s3.html){target="_blank"} ::: ### 예제 예제는 다음과 같습니다. :::(Info) (참고) 예제에서 사용하는 `access_key`, `secret_key` 값에는 등록한 API 인증 키 정보를 입력해야 합니다. ::: #### 버킷 생성 버킷 생성의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' s3.create_bucket(Bucket=bucket_name) ``` #### 버킷 목록 조회 버킷 목록 조회의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) response = s3.list_buckets() for bucket in response.get('Buckets', []): print (bucket.get('Name')) ``` #### 버킷 삭제 버킷 삭제의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' s3.delete_bucket(Bucket=bucket_name) ``` #### 파일 업로드 파일 업로드의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' # create folder object_name = 'sample-folder/' s3.put_object(Bucket=bucket_name, Key=object_name) # upload file object_name = 'sample-object' local_file_path = '/tmp/test.txt' s3.upload_file(local_file_path, bucket_name, object_name) ``` #### 파일 목록 조회 파일 목록 조회의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' # list all in the bucket max_keys = 300 response = s3.list_objects(Bucket=bucket_name, MaxKeys=max_keys) print('list all in the bucket') while True: print('IsTruncated=%r' % response.get('IsTruncated')) print('Marker=%s' % response.get('Marker')) print('NextMarker=%s' % response.get('NextMarker')) print('Object List') for content in response.get('Contents'): print(' Name=%s, Size=%d, Owner=%s' % \ (content.get('Key'), content.get('Size'), content.get('Owner').get('ID'))) if response.get('IsTruncated'): response = s3.list_objects(Bucket=bucket_name, MaxKeys=max_keys, Marker=response.get('NextMarker')) else: break # top level folders and files in the bucket delimiter = '/' max_keys = 300 response = s3.list_objects(Bucket=bucket_name, Delimiter=delimiter, MaxKeys=max_keys) print('top level folders and files in the bucket') while True: print('IsTruncated=%r' % response.get('IsTruncated')) print('Marker=%s' % response.get('Marker')) print('NextMarker=%s' % response.get('NextMarker')) print('Folder List') for folder in response.get('CommonPrefixes'): print(' Name=%s' % folder.get('Prefix')) print('File List') for content in response.get('Contents'): print(' Name=%s, Size=%d, Owner=%s' % \ (content.get('Key'), content.get('Size'), content.get('Owner').get('ID'))) if response.get('IsTruncated'): response = s3.list_objects(Bucket=bucket_name, Delimiter=delimiter, MaxKeys=max_keys, Marker=response.get('NextMarker')) else: break ``` #### 파일 다운로드 파일 다운로드의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' object_name = 'sample-object' local_file_path = '/tmp/test.txt' s3.download_file(bucket_name, object_name, local_file_path) ``` #### 파일 삭제 파일 삭제의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' object_name = 'sample-object' s3.delete_object(Bucket=bucket_name, Key=object_name) ``` #### ACL 설정 ACL 설정의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' # set bucket ACL # add read permission to anonymous s3.put_bucket_acl(Bucket=bucket_name, ACL='public-read') response = s3.get_bucket_acl(Bucket=bucket_name) # set object ACL # add read permission to user by ID object_name = 'sample-object' owner_id = 'test-owner-id' target_id = 'test-user-id' s3.put_object_acl(Bucket=bucket_name, Key=object_name, AccessControlPolicy={ 'Grants': [ { 'Grantee': { 'ID': owner_id, 'Type': 'CanonicalUser' }, 'Permission': 'FULL_CONTROL' }, { 'Grantee': { 'ID': target_id, 'Type': 'CanonicalUser' }, 'Permission': 'READ' } ], 'Owner': { 'ID': owner_id } }) response = s3.get_object_acl(Bucket=bucket_name, Key=object_name) ``` #### 멀티파트 업로드 멀티파트 업로드의 예제는 다음과 같습니다. :::(Warning) (주의) 멀티파트 업로드를 완료하지 않을 경우에는 잔여 파일이 버킷에 남게 되며, 잔여 파일은 버킷 용량에 포함되어 과금됩니다. 다음 방법을 통해 불완전한 멀티파트 객체를 삭제하여 불필요하게 과금되지 않도록 주의해 주십시오. * 취소 또는 완료되지 않은 멀티파트 업로드 정보 조회: [ListMultipartUploads API 가이드](https://api-fin.ncloud-docs.com/docs/storage-objectstorage-listmultipartuploads){target="_blank"} * 멀티파트 삭제: [AbortMultipartUpload API 가이드](https://api-fin.ncloud-docs.com/docs/storage-objectstorage-abortmultipartupload){target="_blank"} ::: ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY_ID' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' object_name = 'sample-large-object' local_file = '/tmp/sample.file' # initialize and get upload ID create_multipart_upload_response = s3.create_multipart_upload(Bucket=bucket_name, Key=object_name) upload_id = create_multipart_upload_response['UploadId'] part_size = 10 * 1024 * 1024 parts = [] # upload parts with open(local_file, 'rb') as f: part_number = 1 while True: data = f.read(part_size) if not len(data): break upload_part_response = s3.upload_part(Bucket=bucket_name, Key=object_name, PartNumber=part_number, UploadId=upload_id, Body=data) parts.append({ 'PartNumber': part_number, 'ETag': upload_part_response['ETag'] }) part_number += 1 multipart_upload = {'Parts': parts} # abort multipart upload # s3.abort_multipart_upload(Bucket=bucket_name, Key=object_name, UploadId=upload_id) # complete multipart upload s3.complete_multipart_upload(Bucket=bucket_name, Key=object_name, UploadId=upload_id, MultipartUpload=multipart_upload) ``` #### 고객 제공 키를 사용한 암호화(SSE-C) 요청 고객 제공 키를 사용한 암호화(SSE-C) 요청의 예제는 다음과 같습니다. :::(Info) (참고) SSE-C 기반으로 객체를 암호화할 경우, 콘솔에서 일부 요청을 사용할 수 없습니다. ::: ```python import boto3 import secrets service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY_ID' secret_key = 'SECRET_KEY' if __name__ == "__main__": # S3 client s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) # create encryption key sse_key = secrets.token_bytes(32) sse_conf = { "SSECustomerKey": sse_key, "SSECustomerAlgorithm": "AES256"} bucket_name = 'sample-bucket' object_name = 'sample-object' # upload object local_file_path = '/tmp/sample.txt' s3.upload_file(local_file_path, bucket_name, object_name, sse_conf) # download object download_file_path = '/tmp/sample-download.txt' s3.download_file(bucket_name, object_name, download_file_path, sse_conf) ``` #### CORS (Cross-Origin Resource Sharing) 설정 CORS 설정의 예제는 다음과 같습니다. ```python import boto3 service_name = 's3' endpoint_url = 'https://kr.object.fin-ncloudstorage.com' region_name = 'fin-standard' access_key = 'ACCESS_KEY_ID' secret_key = 'SECRET_KEY' if __name__ == "__main__": s3 = boto3.client(service_name, endpoint_url=endpoint_url, aws_access_key_id=access_key, aws_secret_access_key=secret_key) bucket_name = 'sample-bucket' # Define the configuration rules cors_configuration = { 'CORSRules': [{ 'AllowedHeaders': ['*'], 'AllowedMethods': ['GET', 'PUT'], 'AllowedOrigins': ['*'], 'MaxAgeSeconds': 3000 }] } # Set CORS configuration s3.put_bucket_cors(Bucket=bucket_name, CORSConfiguration=cors_configuration) # Get CORS configuration response = s3.get_bucket_cors(Bucket=bucket_name) print(response['CORSRules']) ```