Object Storage Service (OSS) は、アップロードされたデータのサーバ側暗号化をサポートしています。データをアップロードすると、OSS はデータを暗号化し、暗号化されたデータを保存します。データをダウンロードすると、OSS は保存されているデータを自動的に復号し、生データを返します。HTTP 応答ヘッダーは、データがサーバー側で暗号化されたことを示します。
注意事項
サーバ側暗号化を設定する前に、この機能について理解しておく必要があります。詳細については、「サーバ側暗号化」をご参照ください。
このトピックのサンプルコードでは、リージョン ID として中国 (杭州) の
cn-hangzhouを例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用できます。OSS がサポートするリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
バケット暗号化を設定するには、
oss:PutBucketEncryption権限が必要です。バケット暗号化構成を取得するには、oss:GetBucketEncryption権限が必要です。バケット暗号化構成を削除するには、oss:DeleteBucketEncryption権限が必要です。詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
サンプルコード
バケット暗号化の設定
次のコードを使用して、バケットのデフォルトの暗号化方式を設定できます。この設定が完了すると、暗号化方式が指定されずにバケットにアップロードされたオブジェクトは、バケットのデフォルトの暗号化方式を使用して暗号化されます。
import argparse
import alibabacloud_oss_v2 as oss
# ユーザーが入力したパラメーターを受け取るためのコマンドライン引数パーサを作成します。
parser = argparse.ArgumentParser(description="put bucket encryption sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# デフォルトのサーバ側暗号化方式を指定する --sse_algorithm コマンドライン引数を追加します。デフォルト値は 'KMS' です。
# 有効な値:KMS (KMS を使用した暗号化)、AES256 (AES-256 を使用した暗号化)、および SM4 (中国暗号アルゴリズム SM4 を使用した暗号化)。
parser.add_argument('--sse_algorithm', help='The default server-side encryption method. Valid values: KMS, AES256, and SM4.', default='KMS')
# SSEAlgorithm が KMS に設定され、指定された CMK が暗号化に使用される場合にマスターキーの ID を指定する --kms_master_key_id コマンドライン引数を追加します。
# 指定された CMK を使用しない場合は、このパラメーターを空のままにします。
parser.add_argument('--kms_master_key_id', help='The CMK ID that is specified when SSEAlgorithm is set to KMS and a specified CMK is used for encryption. In other cases, leave this parameter empty.', default='')
# オブジェクトの暗号化に使用されるアルゴリズムを指定する --kms_data_encryption コマンドライン引数を追加します。
# デフォルト値は 'SM4' です。このパラメーターは、SSEAlgorithm が KMS に設定されている場合にのみ有効です。
parser.add_argument('--kms_data_encryption', help='The algorithm that is used to encrypt objects. If this parameter is not specified, objects are encrypted using AES256. This parameter is valid only when SSEAlgorithm is set to KMS. Valid value: SM4', default='SM4')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報 (AccessKeyId と AccessKeySecret) をロードします。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成をロードします。
cfg = oss.config.load_default()
# 認証情報プロバイダーを設定します。
cfg.credentials_provider = credentials_provider
# バケットが配置されているリージョンを設定します。
cfg.region = args.region
# カスタムエンドポイントが指定されている場合は、構成に設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 構成オブジェクトを使用して OSS クライアントを初期化します。
client = oss.Client(cfg)
# put_bucket_encryption メソッドを呼び出して、バケットの暗号化構成を設定します。
result = client.put_bucket_encryption(
oss.PutBucketEncryptionRequest(
bucket=args.bucket, # 宛先バケットの名前を指定します。
server_side_encryption_rule=oss.ServerSideEncryptionRule(
apply_server_side_encryption_by_default=oss.ApplyServerSideEncryptionByDefault(
kms_master_key_id=args.kms_master_key_id, # マスターキー ID。このパラメーターは、SSEAlgorithm が KMS に設定されている場合にのみ有効です。
kms_data_encryption=args.kms_data_encryption, # オブジェクト暗号化アルゴリズム。このパラメーターは、SSEAlgorithm が KMS に設定されている場合にのみ有効です。
sse_algorithm=args.sse_algorithm, # サーバ側暗号化アルゴリズム (KMS、AES256、SM4 など)。
),
),
)
)
# 操作結果のステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code}, ' # HTTP ステータスコード。リクエストが成功したかどうかを示します。
f'request id: {result.request_id}') # リクエスト ID。リクエストログの追跡やデバッグに使用されます。
if __name__ == "__main__":
# プログラムのエントリポイント。main 関数を呼び出してロジックを実行します。
main()
バケット暗号化構成の取得
次のコードを使用して、バケットの暗号化構成を取得できます。
import argparse
import alibabacloud_oss_v2 as oss
# ユーザーが入力したパラメーターを受け取るためのコマンドライン引数パーサを作成します。
parser = argparse.ArgumentParser(description="get bucket encryption sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報 (AccessKeyId と AccessKeySecret) をロードします。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成をロードします。
cfg = oss.config.load_default()
# 認証情報プロバイダーを設定します。
cfg.credentials_provider = credentials_provider
# バケットが配置されているリージョンを設定します。
cfg.region = args.region
# カスタムエンドポイントが指定されている場合は、構成に設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 構成オブジェクトを使用して OSS クライアントを初期化します。
client = oss.Client(cfg)
# get_bucket_encryption メソッドを呼び出して、バケットの暗号化構成を取得します。
result = client.get_bucket_encryption(
oss.GetBucketEncryptionRequest(
bucket=args.bucket, # 宛先バケットの名前を指定します。
)
)
# 操作結果のステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code}, '
f'request id: {result.request_id}, '
)
if __name__ == "__main__":
# プログラムのエントリポイント。main 関数を呼び出してロジックを実行します。
main()
バケット暗号化構成の削除
次のコードを使用して、バケットの暗号化構成を削除できます。
import argparse
import alibabacloud_oss_v2 as oss
# ユーザーが入力したパラメーターを受け取るためのコマンドライン引数パーサを作成します。
parser = argparse.ArgumentParser(description="delete bucket encryption sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報 (AccessKeyId と AccessKeySecret) をロードします。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成をロードします。
cfg = oss.config.load_default()
# 認証情報プロバイダーを設定します。
cfg.credentials_provider = credentials_provider
# バケットが配置されているリージョンを設定します。
cfg.region = args.region
# カスタムエンドポイントが指定されている場合は、構成に設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 構成オブジェクトを使用して OSS クライアントを初期化します。
client = oss.Client(cfg)
# delete_bucket_encryption メソッドを呼び出して、バケットの暗号化構成を削除します。
result = client.delete_bucket_encryption(
oss.DeleteBucketEncryptionRequest(
bucket=args.bucket, # 宛先バケットの名前を指定します。
)
)
# 操作結果のステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code}, ' # HTTP ステータスコード。リクエストが成功したかどうかを示します。
f'request id: {result.request_id}') # リクエスト ID。リクエストの追跡に使用されます。
if __name__ == "__main__":
# プログラムのエントリポイント。main 関数を呼び出してロジックを実行します。
main()
参照
サーバー側暗号化を設定するための API 操作の詳細については、「PutBucketEncryption」をご参照ください。
サーバー側暗号化設定を取得するための API 操作の詳細については、「GetBucketEncryption」をご参照ください。
サーバー側暗号化設定を削除するための API 操作の詳細については、「DeleteBucketEncryption」をご参照ください。