CloudBox の Object Storage Service(OSS)バケットのバージョン管理を有効にして、CloudBox の OSS バケットに保存されているオブジェクトを保護できます。バージョン管理が有効になっている CloudBox の OSS バケットに保存されているオブジェクトを上書きまたは削除すると、OSS はオブジェクトを以前のバージョンとして CloudBox の OSS バケットに保存します。 CloudBox の OSS バケットのバージョン管理を有効にすると、CloudBox の OSS バケット内のオブジェクトを以前のバージョンに復元して、データが誤って上書きまたは削除されないように保護できます。
前提条件
CloudBox の OSS は、中国 (杭州)、中国 (上海)、中国 (深圳)、中国 (河源)、中国 (北京)、および中国 (成都) リージョンでのみサポートされています。
クラウドボックスが購入されています。詳細については、「クラウドボックスを購入する」をご参照ください。
CloudBox の OSS に Virtual Private Cloud(VPC)と vSwitch が作成されています。詳細については、「VPC と vSwitch を作成する」をご参照ください。
VPC 内部ネットワークがセットアップされ、単一のトンネルが構成されて安全な接続が提供されます。この機能を申請するには、technical support にお問い合わせください。
シナリオ
データセキュリティを確保するために、以下のシナリオではバージョン管理を有効にすることをお勧めします。
使用上の注意
必要な権限
CloudBox の OSS バケットの所有者、または oss-cloudbox:PutBucketVersioning
権限を持つ RAM ユーザーのみが、CloudBox の OSS バケットのバージョン管理を有効にできます。
機能の競合
バージョン管理が有効になっている CloudBox の OSS バケットにデータをアップロードするリクエストの x-oss-forbid-overwrite
ヘッダーは有効になりません。詳細については、「リクエストヘッダー」をご参照ください。
バージョン管理の状態
バケットは、無効、有効、および一時停止のいずれかのバージョン管理状態になります。
デフォルトでは、CloudBox の OSS バケットのバージョン管理状態は無効になっています。 CloudBox の OSS バケットのバージョン管理が有効になると、CloudBox の OSS バケットのバージョン管理状態を無効に戻すことはできません。ただし、バージョン管理が有効になっている CloudBox の OSS バケットのバージョン管理を一時停止することはできます。
バージョン管理が有効になっている CloudBox の OSS バケットにオブジェクトがアップロードされると、OSS はグローバルに一意のバージョン ID としてランダムな文字列を生成します。
バージョン管理が一時停止されている CloudBox の OSS バケットにオブジェクトがアップロードされると、OSS はオブジェクトのバージョン ID として「null」文字列を生成します。
説明 バージョン管理が有効になっている CloudBox の OSS バケットには、オブジェクトのすべてのバージョンが保存されます。これらのバージョンはストレージ容量を消費し、ストレージ料金が発生します。不要になった履歴バージョンを削除するために、ライフサイクルルールを構成することをお勧めします。
データ保護
次の表は、バージョン管理のデータ保護メカニズムを理解するのに役立つように、OSS がさまざまなバージョン管理状態のバケット内の削除および上書きされたデータをどのように処理するかについて説明しています。
バージョン管理の状態 | オブジェクトの上書き | オブジェクトの削除 |
無効 | 既存のオブジェクトは上書きされ、復元できません。 | オブジェクトは削除され、OSS には保存されなくなります。 |
有効 | 一意の ID を持つ新しいバージョンがオブジェクトに対して生成されます。既存のオブジェクトは以前のバージョンとして保存されます。 | グローバルに一意のバージョン ID を持つ削除マーカーが、現在のバージョンとしてオブジェクトに追加されます。既存のオブジェクトは以前のバージョンとして保存されます。 |
一時停止 | バージョン ID が null の新しいバージョンがオブジェクトに対して生成されます。 オブジェクトにバージョン ID が null の以前のバージョンまたは削除マーカーがすでに存在する場合、以前のバージョンまたは削除マーカーは新しい null バージョンによって上書きされます。バージョン ID が null でない他の以前のバージョンまたは削除マーカーは影響を受けません。 | バージョン ID が null の削除マーカーがオブジェクトに追加されます。 オブジェクトにバージョン ID が null の以前のバージョンまたは削除マーカーがすでに存在する場合、以前のバージョンまたは削除マーカーは新しい削除マーカーによって上書きされます。バージョン ID が null でない他の以前のバージョンまたは削除マーカーは影響を受けません。 |
次の図は、バージョン管理が有効または一時停止されているバケットに、既存のオブジェクトと同じ名前のオブジェクトがアップロードされた場合、またはオブジェクトが削除された場合に、OSS がデータをどのように処理するかを示しています。読みやすくするために、図のすべてのバージョン ID は単純な形式になっています。
バージョン管理が有効になっているバケット内のオブジェクトを上書きする
バージョン管理が有効になっているバケットにオブジェクトを繰り返しアップロードすると、アップロードごとにオブジェクトが上書きされます。オブジェクトが上書きされるたびに、一意のバージョン ID を持つバージョンがオブジェクトに対して生成されます。

バージョン管理が有効になっているバケットからオブジェクトを削除する
バージョン管理が有効になっているバケットからオブジェクトを削除すると、OSS はオブジェクトを完全に削除する代わりに、オブジェクトの現在のバージョンとして削除マーカーを追加します。オブジェクトの以前のバージョンは削除されません。削除マーカーが追加された後に同じ名前のオブジェクトをアップロードすると、一意のバージョン ID を持つ新しいバージョンが現在のバージョンとして追加されます。

バージョン管理が一時停止されているバケット内のオブジェクトを上書きする
バージョン管理が一時停止されているバケット内の既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、バージョン ID が null の新しいバージョンがバケットに追加され、オブジェクトの以前のバージョンは保持されます。同じ名前の別のオブジェクトをバケットに再度アップロードすると、バージョン ID が null の新しいバージョンが以前の null バージョンを上書きします。

バージョン管理が一時停止されているバケットからオブジェクトを削除する
バージョン管理が一時停止されているバケットからオブジェクトを削除すると、OSS はこのオブジェクトを完全に削除する代わりに、オブジェクトの現在のバージョンとして削除マーカーを追加します。オブジェクトの以前のバージョンは削除されません。

要約すると、削除および上書きされたデータは、バージョン管理が有効または一時停止されているバケットに以前のバージョンとして保存されます。バケット内のオブジェクトを以前のバージョンに復元して、データが誤って上書きまたは削除されないように保護できます。
バージョン管理を有効にする
バケットのバージョン管理が有効になっている場合、OSS はバケットに保存されているオブジェクトの各バージョンに一意の ID を指定します。
OSS SDK for Java を使用する
OSS SDK for Java のみを使用してバージョン管理を有効にできます。 OSS SDK for Java のバージョンは 3.15.0 以降である必要があります。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
public class Demo {
public static void main(String[] args) throws Exception {
// CloudBox の OSS バケットのデータエンドポイントを指定します。
String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// CloudBox の OSS バケットの名前を指定します。例:examplebucket。
String bucketName = "examplebucket";
// CloudBox の OSS バケットが配置されているリージョンを指定します。
String region = "cn-hangzhou";
// クラウドボックスの ID を指定します。
String cloudBoxId = "cb-f8z7yvzgwfkl9q0h****";
// OSSClient インスタンスを作成します。
// OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(new DefaultCredentialProvider(credentialsProvider.getCredentials()))
.clientConfiguration(conf)
.region(region)
.cloudBoxId(cloudBoxId)
.build();
try {
// CloudBox の OSS バケットのバージョン管理状態を ENABLED に設定します。
BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
configuration.setStatus(BucketVersioningConfiguration.ENABLED);
SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
ossClient.setBucketVersioning(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
ossutil を使用する
ossutil を使用して、バケットのバージョン管理を構成できます。インストールについては、「ossutil をインストールする」をご参照ください。
バージョン管理を有効にするためのサンプルコマンドを以下に示します。
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Enabled\"}"
このコマンドの詳細については、「put-bucket-versioning」をご参照ください。
RESTful API を使用する
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「PutBucketVersioning」をご参照ください。
バージョン管理を一時停止する
バージョン管理されたバケットのバージョン管理を一時停止して、OSS がオブジェクトの新しいバージョンを生成しないようにすることができます。バージョン管理が一時停止されているバケット内のオブジェクトに対して新しいバージョンが生成された場合、OSS は新しいバージョンの ID を null に設定し、オブジェクトの以前のバージョンを保持します。
OSS コンソールを使用する
左側のナビゲーションウィンドウで、 を選択します。
[ CloudBox の OSS バケット] ページで、バージョン管理を一時停止する CloudBox の OSS バケットをクリックします。
左側のナビゲーションウィンドウで、 を選択します。
OSS SDK for Java を使用する
OSS SDK for Java のみを使用してバージョン管理を一時停止できます。 OSS SDK for Java のバージョンは 3.15.0 以降である必要があります。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
public class Demo {
public static void main(String[] args) throws Exception {
// CloudBox の OSS バケットのデータエンドポイントを指定します。
String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// CloudBox の OSS バケットの名前を指定します。例:examplebucket。
String bucketName = "examplebucket";
// CloudBox の OSS バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// クラウドボックスの ID を指定します。
String cloudBoxId = "cb-f8z7yvzgwfkl9q0h****";
// OSSClient インスタンスを作成します。
// OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(new DefaultCredentialProvider(credentialsProvider.getCredentials()))
.clientConfiguration(conf)
.region(region)
.cloudBoxId(cloudBoxId)
.build();
try {
// CloudBox の OSS バケットのバージョン管理状態を SUSPENDED に設定します。
BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
configuration.setStatus(BucketVersioningConfiguration.SUSPENDED);
SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
ossClient.setBucketVersioning(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
ossutil を使用する
ossutil を使用して、バケットのバージョン管理を構成できます。インストールについては、「ossutil をインストールする」をご参照ください。
バージョン管理を一時停止するためのサンプルコマンドを以下に示します。
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Suspended\"}"
このコマンドの詳細については、「put-bucket-versioning」をご参照ください。
RESTful API を使用する
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「PutBucketVersioning」をご参照ください。