すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:サーバ側暗号化 (Go SDK V2)

最終更新日:Dec 06, 2025

OSS はサーバ側暗号化 (SSE) をサポートしています。 データをアップロードすると、OSS はデータを暗号化して保存します。 データをダウンロードすると、OSS は自動的にデータを復号化し、生データを返します。 HTTP レスポンスヘッダーは、データがサーバー上で暗号化されたことを示します。

注意事項

  • サーバ側暗号化を設定する前に、この機能について理解していることを確認してください。 詳細については、「サーバ側暗号化」をご参照ください。

  • このトピックのサンプルコードでは、中国 (杭州) リージョン ID cn-hangzhou とパブリックエンドポイントを使用します。 同じリージョン内の別の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、環境変数を使用してアクセス認証情報を読み取ります。 アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。

  • バケット暗号化を設定するには、oss:PutBucketEncryption 権限が必要です。 バケット暗号化設定を取得するには、oss:GetBucketEncryption 権限が必要です。 バケット暗化設定を削除するには、oss:DeleteBucketEncryption 権限が必要です。 詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。

サンプルコード

バケット暗号化の設定

次のコードを使用して、バケットのデフォルトの暗号化方式を設定できます。 この設定が成功すると、暗号化方式を指定せずにバケットにアップロードされたすべてのオブジェクトは、バケットのデフォルトの方式を使用して暗号化されます。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // ストレージリージョン。
	bucketName string // バケット名。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットの暗号化ルールを設定するリクエストを作成します。
	request := &oss.PutBucketEncryptionRequest{
		Bucket: oss.Ptr(bucketName), // バケット名。
		ServerSideEncryptionRule: &oss.ServerSideEncryptionRule{
			ApplyServerSideEncryptionByDefault: &oss.ApplyServerSideEncryptionByDefault{
				SSEAlgorithm:      oss.Ptr("KMS"), // KMS 暗号化アルゴリズムを使用します。
				KMSDataEncryption: oss.Ptr("SM4"), // SM4 データ暗号化アルゴリズムを使用します。
			},
		},
	}

	// バケットの暗号化ルールを設定するリクエストを送信します。
	result, err := client.PutBucketEncryption(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket encryption %v", err)
	}

	// バケットの暗号化ルールを設定した結果を出力します。
	log.Printf("put bucket encryption result:%#v\n", result)
}

バケット暗号化設定の取得

次のコードを使用して、バケット暗号化設定を取得できます。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // ストレージリージョン。
	bucketName string // バケット名。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケット暗号化設定を取得するリクエストを作成します。
	request := &oss.GetBucketEncryptionRequest{
		Bucket: oss.Ptr(bucketName), // バケット名。
	}

	// バケット暗号化設定を取得し、結果を処理します。
	result, err := client.GetBucketEncryption(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get bucket encryption %v", err)
	}

	// バケット暗号化設定を取得した結果を出力します。
	log.Printf("get bucket encryption result:%#v\n", result)
}

バケット暗号化設定の削除

次のコードを使用して、バケット暗号化設定を削除できます。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // ストレージリージョン。
	bucketName string // バケット名。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケット暗号化設定を削除するリクエストを作成します。
	request := &oss.DeleteBucketEncryptionRequest{
		Bucket: oss.Ptr(bucketName), // バケット名。
	}

	// バケット暗号化設定を削除し、結果を処理します。
	result, err := client.DeleteBucketEncryption(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket encryption %v", err)
	}

	// バケット暗号化設定を削除した結果を出力します。
	log.Printf("delete bucket encryption result:%#v\n", result)
}

関連ドキュメント