--- title: "Python向け AWS SDK(Boto3)" slug: "storage-storage-8-2" tags: ["Object Storage"] updated: 2026-10-20T09:11:40Z published: 2026-10-20T09:11:40Z canonical: "guide.ncloud-docs.com/storage-storage-8-2" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Python向け AWS SDK(Boto3) Classic/VPC環境で利用できます。 ## Python向け SDK for S3 API AWS S3で提供する Python向け SDKを利用し、NAVERクラウドプラットフォームの Object Storageを使用するユースケースです。AWS Python SDK 1.6.19バージョンを基準に作成されました。 ### SDKインストール ``` pip install boto3==1.6.19 ``` 参考 - boto3 1.6.19バージョンは python3.8の使用をお勧めします。python3.9以上のバージョンを使用する場合は最新バージョン boto3を使用してください。 - boto3関連資料は、以下をご参照ください。 - AWS Python SDKソース: [https://github.com/boto/boto3](https://github.com/boto/boto3) - 関連文書: [https://boto3.readthedocs.io/en/latest/reference/services/s3.html](https://boto3.readthedocs.io/en/latest/reference/services/s3.html) ### ユースケース 参考 ユースケースで使用する`access_key`、`secret_key`の値には、登録した API認証キー情報を入力します。 #### バケット作成 ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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) ``` #### バケットリストの照会 ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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')) ``` #### バケット削除 ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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) ``` #### ファイルのアップロード ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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) ``` #### ファイルリストの照会 ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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 ``` #### ファイルのダウンロード ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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) ``` #### ファイル削除 ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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設定 ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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) ``` #### マルチパートのアップロード 注意 マルチパートのアップロードを完了しない場合、残りのファイルがバケットに残り、バケット容量に含まれて課金されます。以下の通り不完全なマルチパートのオブジェクトを削除し、不要に課金されないようにご注意ください。 1. Cloud Advisorから不完全なマルチパートアップロードのオブジェクトについて通知を受信 1. Cloud Advisorに関する詳細は、[Cloud Advisor ご利用ガイド](https://guide.ncloud-docs.com/docs/ja/cloudadvisor-overview)をご確認ください。 2. 不完全なマルチパートのオブジェクトを確認および削除 1. キャンセルされたか、完了していないマルチパートアップロード情報を照会する: [ListMultipartUploads APIガイド](https://api.ncloud-docs.com/docs/ja/storage-objectstorage-listmultipartuploads) 2. マルチパート削除: [AbortMultipartUpload APIガイド](https://api.ncloud-docs.com/docs/ja/storage-objectstorage-abortmultipartupload) ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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ベースでオブジェクトを暗号化する場合、コンソールで一部リクエストを使用できません。 ``` import boto3 import secrets service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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) ``` #### Cross-Origin Resource Sharing(CORS)設定 ``` import boto3 service_name = 's3' endpoint_url = 'https://kr.object.ncloudstorage.com' region_name = 'kr-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']) ```