객체 보존 조치 사용

이 페이지에서는 새 객체에 보존 조치를 기본적으로 적용하고 개별 객체에 보존 조치를 적용하는 등 객체 보존 조치를 사용하는 방법을 설명합니다. 객체에 적용할 수 있는 보존 조치의 유형을 비롯하여 이 기능에 대한 자세한 내용은 객체 보존 조치를 참조하세요.

기본 요건

Cloud Storage에서 이 기능을 사용하려면 다음 요건을 충족해야 합니다.

  1. Cloud Storage에서 버킷 및 객체를 보고 업데이트할 수 있는 충분한 권한이 있어야 합니다.

    • 버킷이 포함된 프로젝트의 소유자라면 필요한 권한을 가지고 있을 가능성이 높습니다.

    • IAM을 사용하는 경우에는 관련 버킷에 대한 storage.buckets.update, storage.buckets.get, storage.objects.update, storage.objects.get 권한이 있어야 합니다. 이러한 권한을 가진 roles/storage.admin과 같은 역할을 얻는 방법은 IAM 권한 사용을 참조하세요.

    • ACL을 사용하는 경우에는 관련 버킷과 해당 버킷 내의 객체에 대한 OWNER 권한이 있어야 합니다. 자세한 방법은 ACL 설정을 참조하세요.

기본 이벤트 기반 보존 조치 속성 작업

다음 작업에서는 버킷에 대한 기본 이벤트 기반 보존 조치 속성을 사용 설정하거나, 보거나, 사용 중지하는 방법을 보여줍니다. 이 속성이 사용 설정되어 있으면 버킷에 새로 추가되는 객체에 자동으로 이벤트 기반 보존 조치가 적용됩니다.

기본 이벤트 기반 보존 조치 속성 사용 설정

버킷에 새로 추가되는 각 객체에 이벤트 기반 보존 조치를 자동으로 적용하려면 다음을 수행합니다.

Console

  1. Google Cloud Platform Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 목록에서 기본 이벤트 기반 보존 조치 속성을 사용 설정하려는 버킷의 이름을 클릭합니다.

  3. 페이지 상단에서 버킷 잠금 탭을 선택합니다.

  4. 기본 이벤트 기반 보존 조치 항목에서 사용 중지됨 버튼을 클릭합니다.

gsutil

gsutil retention event-default set 명령어를 사용합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

gsutil retention event-default set gs://[BUCKET_NAME]

코드 샘플

C++

자세한 내용은 Cloud Storage C++ API 참조 문서를 참조하세요.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);

  if (!original) {
    throw std::runtime_error(original.status().message());
  }

  StatusOr<gcs::BucketMetadata> patched_metadata = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetDefaultEventBasedHold(true),
      gcs::IfMetagenerationMatch(original->metageneration()));

  if (!patched_metadata) {
    throw std::runtime_error(patched_metadata.status().message());
  }

  std::cout << "The default event-based hold for objects in bucket "
            << bucket_name << " is "
            << (patched_metadata->default_event_based_hold() ? "enabled"
                                                             : "disabled")
            << "\n";
}

C#

자세한 내용은 Cloud Storage C# API 참조 문서를 참조하세요.

private void EnableBucketDefaultEventBasedHold(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName);
    bucket.DefaultEventBasedHold = true;
    bucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration
    });
    Console.WriteLine($"Default event-based hold was enabled for {bucketName}");
}

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 참조하세요.

bucket := c.Bucket(bucketName)
bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
	DefaultEventBasedHold: true,
}
if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
	return err
}

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 참조하세요.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

Bucket bucket =
    storage.update(BucketInfo.newBuilder(bucketName).setDefaultEventBasedHold(true).build());

System.out.println("Default event-based hold was enabled for " + bucketName);

Node.js

자세한 내용은 Cloud Storage Node.js API 참조 문서를 참조하세요.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Enables a default event-based hold for the bucket.
await storage.bucket(bucketName).setMetadata({
  defaultEventBasedHold: true,
});

console.log(`Default event-based hold was enabled for ${bucketName}.`);

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 참조하세요.

use Google\Cloud\Storage\StorageClient;

/**
 * Enables a default event-based hold for a bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 */
function enable_default_event_based_hold($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $bucket->update(['defaultEventBasedHold' => true]);
    printf('Default event-based hold was enabled for %s' . PHP_EOL, $bucketName);
}

Python

자세한 내용은 Cloud Storage Python API 참조 문서를 참조하세요.

# bucket_name = "my-bucket"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)

bucket.default_event_based_hold = True
bucket.patch()

print('Default event based hold was enabled for {}'.format(bucket_name))

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 참조하세요.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name

bucket.update do |b|
  b.default_event_based_hold = true
end

puts "Default event-based hold was enabled for #{bucket_name}."

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. Playground에서 OAuth 사용자 인증 정보를 사용하도록 구성합니다.
  2. 다음 정보를 포함하는 .json 파일을 만듭니다.

    {
      "defaultEventBasedHold": true
    }
  3. cURL을 사용하여 PATCH Bucket 요청으로 JSON API를 호출합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=defaultEventBasedHold"

XML API

XML API는 객체 보존 조치 작업에 사용할 수 없습니다. gsutil 등의 다른 Cloud Storage 도구 중 하나를 대신 사용하세요.

버킷의 기본 보존 상태 확인

버킷에서 새 객체에 기본적으로 이벤트 기반 보존 조치가 적용되는지 확인하려면 다음을 수행하세요.

Console

  1. Google Cloud Platform Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 목록에서 기본 이벤트 기반 상태를 확인할 버킷의 이름을 클릭합니다.

  3. 페이지 상단에서 버킷 잠금 탭을 선택합니다.

  4. 기본 이벤트 기반 보존 조치 항목에 상태가 나타납니다.

gsutil

다음 gsutil ls 명령어를 사용합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

gsutil ls -L -b gs://[BUCKET_NAME]/

다음 예와 같은 응답이 표시됩니다.

gs://[BUCKET_NAME]/ :
  Storage class:         MULTI_REGIONAL
  ...
  ...
  Default Event-Based Hold: On
  ...

코드 샘플

C++

자세한 내용은 Cloud Storage C++ API 참조 문서를 참조하세요.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> bucket_metadata =
      client.GetBucketMetadata(bucket_name);

  if (!bucket_metadata) {
    throw std::runtime_error(bucket_metadata.status().message());
  }

  std::cout << "The default event-based hold for objects in bucket "
            << bucket_metadata->name() << " is "
            << (bucket_metadata->default_event_based_hold() ? "enabled"
                                                            : "disabled")
            << "\n";
}

C#

자세한 내용은 Cloud Storage C# API 참조 문서를 참조하세요.

private bool GetBucketDefaultEventBasedHold(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName);
    bool? defaultEventBasedHoldOrNull = bucket?.DefaultEventBasedHold;
    bool defaultEventBasedHold =
        defaultEventBasedHoldOrNull.HasValue ? defaultEventBasedHoldOrNull.Value : false;
    Console.WriteLine("Default event-based hold: {0}", defaultEventBasedHold);
    return defaultEventBasedHold;
}

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 참조하세요.

attrs, err := c.Bucket(bucketName).Attrs(ctx)
if err != nil {
	return nil, err
}
log.Printf("Default event-based hold enabled? %t\n",
	attrs.DefaultEventBasedHold)

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 참조하세요.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

Bucket bucket =
    storage.get(bucketName, BucketGetOption.fields(BucketField.DEFAULT_EVENT_BASED_HOLD));

if (bucket.getDefaultEventBasedHold() != null && bucket.getDefaultEventBasedHold()) {
  System.out.println("Default event-based hold is enabled for " + bucketName);
} else {
  System.out.println("Default event-based hold is not enabled for " + bucketName);
}

Node.js

자세한 내용은 Cloud Storage Node.js API 참조 문서를 참조하세요.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// get bucketName metadata
const [metadata] = await storage.bucket(bucketName).getMetadata();
console.log(`Default event-based hold: ${metadata.defaultEventBasedHold}.`);

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 참조하세요.

use Google\Cloud\Storage\StorageClient;

/**
 * Enables a default event-based hold for a bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 */
function get_default_event_based_hold($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    if ($bucket->info()['defaultEventBasedHold']) {
        printf('Default event-based hold is enabled for ' . $bucketName . PHP_EOL);
    } else {
        printf('Default event-based hold is not enabled for ' . $bucketName . PHP_EOL);
    }
}

Python

자세한 내용은 Cloud Storage Python API 참조 문서를 참조하세요.

# bucket_name = "my-bucket"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
bucket.reload()

if bucket.default_event_based_hold:
    print('Default event-based hold is enabled for {}'.format(bucket_name))
else:
    print('Default event-based hold is not enabled for {}'
          .format(bucket_name))

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 참조하세요.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name

if bucket.default_event_based_hold?
  puts "Default event-based hold is enabled for {bucket_name}."
else
  puts "Default event-based hold is not enabled for {bucket_name}."
end

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. OAuth 사용자 인증 정보를 사용할 수 있도록 플레이그라운드를 구성합니다.
  2. cURL을 사용하여 원하는 fields가 포함된 GET Bucket 요청으로 JSON API를 호출합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

    curl -X GET -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=defaultEventBasedHold"

    버킷에 기본 이벤트 기반 보존 조치가 사용 설정되어 있으면 다음 예와 같은 응답이 표시됩니다.

    {
      "retentionPolicy": true
    }

XML API

XML API는 객체 보존 조치 작업에 사용할 수 없습니다. gsutil 등의 다른 Cloud Storage 도구 중 하나를 대신 사용하세요.

기본 이벤트 기반 보존 조치 사용 중지

버킷에서 기본 이벤트 기반 보존 조치를 사용 중지하려면 다음을 수행합니다.

Console

  1. Google Cloud Platform Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 목록에서 기본 이벤트 기반 보존 조치 속성을 사용 중지하려는 버킷의 이름을 클릭합니다.

  3. 페이지 상단에서 버킷 잠금 탭을 선택합니다.

  4. 기본 이벤트 기반 보존 조치 항목에서 사용 설정됨 버튼을 클릭합니다.

gsutil

gsutil retention event-default release 명령어를 사용합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

gsutil retention event-default release gs://[BUCKET_NAME]

코드 샘플

C++

자세한 내용은 Cloud Storage C++ API 참조 문서를 참조하세요.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);

  if (!original) {
    throw std::runtime_error(original.status().message());
  }

  StatusOr<gcs::BucketMetadata> patched_metadata = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetDefaultEventBasedHold(false),
      gcs::IfMetagenerationMatch(original->metageneration()));

  if (!patched_metadata) {
    throw std::runtime_error(patched_metadata.status().message());
  }

  std::cout << "The default event-based hold for objects in bucket "
            << bucket_name << " is "
            << (patched_metadata->default_event_based_hold() ? "enabled"
                                                             : "disabled")
            << "\n";
}

C#

자세한 내용은 Cloud Storage C# API 참조 문서를 참조하세요.

private void DisableBucketDefaultEventBasedHold(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName);
    bucket.DefaultEventBasedHold = false;
    bucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration
    });
    Console.WriteLine($"Default event-based hold was disabled for {bucketName}");
}

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 참조하세요.

bucket := c.Bucket(bucketName)
bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
	DefaultEventBasedHold: false,
}
if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
	return err
}

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 참조하세요.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

Bucket bucket =
    storage.update(BucketInfo.newBuilder(bucketName).setDefaultEventBasedHold(false).build());

System.out.println("Default event-based hold was disabled for " + bucketName);

Node.js

자세한 내용은 Cloud Storage Node.js API 참조 문서를 참조하세요.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Disables a default event-based hold for a bucket.
await storage.bucket(bucketName).setMetadata({
  defaultEventBasedHold: false,
});
console.log(`Default event-based hold was disabled for ${bucketName}.`);

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 참조하세요.

use Google\Cloud\Storage\StorageClient;

/**
 * Disables a default event-based hold for a bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 */
function disable_default_event_based_hold($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $bucket->update(['defaultEventBasedHold' => false]);
    printf('Default event-based hold was disabled for %s' . PHP_EOL, $bucketName);
}

Python

자세한 내용은 Cloud Storage Python API 참조 문서를 참조하세요.

# bucket_name = "my-bucket"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)

bucket.default_event_based_hold = False
bucket.patch()

print("Default event based hold was disabled for {}".format(bucket_name))

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 참조하세요.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name

bucket.update do |b|
  b.default_event_based_hold = false
end

puts "Default event-based hold was disabled for #{bucket_name}."

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. Playground에서 OAuth 사용자 인증 정보를 사용하도록 구성합니다.
  2. 다음 정보를 포함하는 .json 파일을 만듭니다.

    {
      "defaultEventBasedHold": false
    }
  3. cURL을 사용하여 PATCH Bucket 요청으로 JSON API를 호출합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=defaultEventBasedHold"

XML API

XML API는 객체 보존 조치 작업에 사용할 수 없습니다. gsutil 등의 다른 Cloud Storage 도구 중 하나를 대신 사용하세요.

객체 보존 조치 작업

다음 작업에서는 객체에 대한 보존 조치를 적용하거나, 보거나, 해제하는 방법을 보여줍니다.

객체 보존 조치 적용

버킷의 객체에 보존 조치를 적용하려면 다음을 수행합니다.

Console

  1. Google Cloud Platform Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 목록에서 보존 조치를 적용할 객체가 있는 버킷의 이름을 클릭합니다.

  3. 보존 조치를 적용할 객체의 이름 옆에 있는 체크박스를 선택합니다.

  4. 보존 조치 관리 버튼을 클릭합니다.

    보존 조치 관리 창이 나타납니다.

  5. 선택한 객체에 적용할 보존 조치 유형의 체크박스를 선택합니다.

  6. 보존 설정 저장을 클릭합니다.

gsutil

[HOLD_TYPE]temp 또는 event로 설정하여 gsutil retention 명령어를 사용합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

gsutil retention [HOLD_TYPE] set gs://[BUCKET_NAME]/[OBJECT_NAME]

코드 샘플

C++

자세한 내용은 Cloud Storage C++ API 참조 문서를 참조하세요.

다음 샘플에서는 객체에 이벤트 기반 보존 조치를 설정합니다.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);

  if (!original) {
    throw std::runtime_error(original.status().message());
  }

  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetEventBasedHold(true),
      gcs::IfMetagenerationMatch(original->metageneration()));

  if (!updated) {
    throw std::runtime_error(updated.status().message());
  }

  std::cout << "The event hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->event_based_hold() ? "enabled" : "disabled") << "\n";
}

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);

  if (!original) {
    throw std::runtime_error(original.status().message());
  }

  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetTemporaryHold(true),
      gcs::IfMetagenerationMatch(original->metageneration()));

  if (!updated) {
    throw std::runtime_error(updated.status().message());
  }

  std::cout << "The temporary hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->temporary_hold() ? "enabled" : "disabled") << "\n";
}

C#

자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 설정합니다.

private void SetObjectEventBasedHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.EventBasedHold = true;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration
    });
}

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

private void SetObjectTemporaryHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.TemporaryHold = true;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 설정합니다.

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	EventBasedHold: true,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	TemporaryHold: true,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 설정합니다.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setEventBasedHold(true).build());

System.out.println("Event-based hold was set for " + blobName);

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setTemporaryHold(true).build());

System.out.println("Temporary hold was set for " + blobName);

Node.js

자세한 내용은 Cloud Storage Node.js API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 설정합니다.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

// Set event-based hold
await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    eventBasedHold: true,
  });
console.log(`Event-based hold was set for ${fileName}.`);

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    temporaryHold: true,
  });
console.log(`Temporary hold was set for ${fileName}.`);

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 설정합니다.

use Google\Cloud\Storage\StorageClient;

/**
 * Sets an event-based hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function set_event_based_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['eventBasedHold' => true]);
    printf('Event-based hold was set for %s' . PHP_EOL, $objectName);
}

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

use Google\Cloud\Storage\StorageClient;

/**
 * Sets a temporary hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function set_temporary_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['temporaryHold' => true]);
    printf('Temporary hold was set for %s' . PHP_EOL, $objectName);
}

Python

자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 설정합니다.

# bucket_name = "my-bucket"
# blob_name = "my-blob"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

blob.event_based_hold = True
blob.patch()

print('Event based hold was set for {}'.format(blob_name))

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

# bucket_name = "my-bucket"
# blob_name = "my-blob"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

blob.temporary_hold = True
blob.patch()

print("Temporary hold was set for #{blob_name}")

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 설정합니다.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.set_event_based_hold!

puts "Event-based hold was set for #{file_name}."

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.set_temporary_hold!

puts "Temporary hold was set for #{file_name}."

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. Playground에서 OAuth 사용자 인증 정보를 사용하도록 구성합니다.
  2. 다음 정보를 포함하는 .json 파일을 만듭니다. 여기서 [HOLD_TYPE]temporaryHold 또는 eventBasedHold로 바꿉니다.

    {
      "[HOLD_TYPE]": true
    }
  3. cURL을 사용하여 PATCH Object 요청으로 JSON API를 호출합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]"

XML API

XML API는 객체 보존 조치 작업에 사용할 수 없습니다. gsutil 등의 다른 Cloud Storage 도구 중 하나를 대신 사용하세요.

객체의 보존 상태 확인

객체에 어떤 보존 조치가 적용되었는지 확인하려면 객체 메타데이터 보기의 일반 안내를 따릅니다.

객체 보존 조치 해제

버킷의 객체에 대한 보존 조치를 해제하려면 다음을 수행합니다.

Console

  1. Google Cloud Platform Console에서 Cloud Storage 브라우저를 엽니다.
    Cloud Storage 브라우저 열기
  2. 버킷 목록에서 보존 조치를 삭제할 객체가 있는 버킷의 이름을 클릭합니다.

  3. 보존 조치를 삭제할 객체의 이름 옆에 있는 체크박스를 선택합니다.

  4. 보존 조치 관리 버튼을 클릭합니다.

    보존 조치 관리 창이 나타납니다.

  5. 삭제하려는 보존 조치의 체크박스를 선택 취소합니다.

  6. 보존 설정 저장을 클릭합니다.

gsutil

[HOLD_TYPE]temp 또는 event로 설정하여 gsutil retention 명령어를 사용합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

gsutil retention [HOLD_TYPE] release gs://[BUCKET_NAME]/[OBJECT_NAME]

코드 샘플

C++

자세한 내용은 Cloud Storage C++ API 참조 문서를 참조하세요.

다음 샘플에서는 객체에 이벤트 기반 보존 조치를 설정합니다.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);

  if (!original) {
    throw std::runtime_error(original.status().message());
  }

  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetEventBasedHold(false),
      gcs::IfMetagenerationMatch(original->metageneration()));

  if (!updated) {
    throw std::runtime_error(updated.status().message());
  }

  std::cout << "The event hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->event_based_hold() ? "enabled" : "disabled") << "\n";
}

다음 샘플에서는 객체에 임시 보존 조치를 설정합니다.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);

  if (!original) {
    throw std::runtime_error(original.status().message());
  }

  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetTemporaryHold(false),
      gcs::IfMetagenerationMatch(original->metageneration()));

  if (!updated) {
    throw std::runtime_error(updated.status().message());
  }

  std::cout << "The temporary hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->temporary_hold() ? "enabled" : "disabled") << "\n";
}

C#

자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 해제합니다.

private void ReleaseObjectEventBasedHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.EventBasedHold = false;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

다음 샘플에서는 객체에서 임시 보존 조치를 해제합니다.

private void ReleaseObjectTemporaryHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.TemporaryHold = false;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 해제합니다.

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	EventBasedHold: false,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

다음 샘플에서는 객체에서 임시 보존 조치를 해제합니다.

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	TemporaryHold: false,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

자바

자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 해제합니다.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setEventBasedHold(false).build());

System.out.println("Event-based hold was released for " + blobName);

다음 샘플에서는 객체에서 임시 보존 조치를 해제합니다.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setTemporaryHold(false).build());

System.out.println("Temporary hold was released for " + blobName);

Node.js

자세한 내용은 Cloud Storage Node.js API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 해제합니다.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    eventBasedHold: false,
  });
console.log(`Event-based hold was released for ${fileName}.`);

다음 샘플에서는 객체에서 임시 보존 조치를 해제합니다.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    temporaryHold: false,
  });
console.log(`Temporary hold was released for ${fileName}.`);

PHP

자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 해제합니다.

use Google\Cloud\Storage\StorageClient;

/**
 * Releases an event-based hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function release_event_based_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['eventBasedHold' => false]);
    printf('Event-based hold was released for %s' . PHP_EOL, $objectName);
}

다음 샘플에서는 객체에서 임시 보존 조치를 해제합니다.

use Google\Cloud\Storage\StorageClient;

/**
 * Releases a temporary hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function release_temporary_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['temporaryHold' => false]);
    printf('Temporary hold was released for %s' . PHP_EOL, $objectName);
}

Python

자세한 내용은 Cloud Storage Python API 참조 문서를 참조하세요.

다음 샘플에서는 객체에서 이벤트 기반 보존 조치를 해제합니다.

# bucket_name = "my-bucket"
# blob_name = "my-blob"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

blob.event_based_hold = False
blob.patch()

print('Event based hold was released for {}'.format(blob_name))

다음 샘플에서는 객체에서 임시 보존 조치를 해제합니다.

# bucket_name = "my-bucket"
# blob_name = "my-blob"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

blob.temporary_hold = False
blob.patch()

print("Temporary hold was release for #{blob_name}")

Ruby

자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.

다음 샘플에서는 객체에 대한 이벤트 기반 보존 조치를 해제합니다.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.release_event_based_hold!

puts "Event-based hold was released for #{file_name}."

다음 샘플에서는 객체에서 임시 보존 조치를 해제합니다.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.release_temporary_hold!

puts "Temporary hold was released for #{file_name}."

REST API

JSON API

  1. OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. Playground에서 OAuth 사용자 인증 정보를 사용하도록 구성합니다.
  2. 다음 정보를 포함하는 .json 파일을 만듭니다. 여기서 [HOLD_TYPE]temporaryHold 또는 eventBasedHold로 바꿉니다.

    {
      "[HOLD_TYPE]": false
    }
  3. cURL을 사용하여 PATCH Object 요청으로 JSON API를 호출합니다. 여기서 [VALUES_IN_BRACKETS]를 적절한 값으로 바꿉니다.

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]"

XML API

XML API는 객체 보존 조치 작업에 사용할 수 없습니다. gsutil 등의 다른 Cloud Storage 도구 중 하나를 대신 사용하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.