보존 조치 관리

보존 조치는 법적 의무 또는 보존 의무를 충족하기 위해 데이터를 무기한 보존합니다. 일반적으로 한 명 이상의 사용자에게 보존 조치를 적용하므로 해당 법적 사안이 더 이상 활성 상태가 아닐 때까지는 법적 사안과 관련이 있을 수 있는 데이터를 삭제할 수 없습니다.

보존 조치의 적용을 받는 사용자가 보존 조치된 데이터를 삭제하면 해당 데이터가 사용자에게는 표시되지 않지만 Vault에는 계속 보존됩니다. 보존 조치가 적용되는 동안 Vault 관리자는 해당 데이터를 검색하고 내보낼 수 있습니다.

보존 조치에는 다음과 같은 구성요소가 있습니다.

  • 서비스—보유할 데이터를 책임지는 애플리케이션. 서비스는 메일, 드라이브 또는 그룹스로 설정할 수 있습니다.
  • 범위: 보존 조치가 적용되는 항목입니다. 범위는 하나 이상의 사용자 계정 또는 조직 단위 (OU)로 설정할 수 있습니다.
  • 추가 옵션 (선택사항): 정의된 범위 내에 보관할 데이터의 범위를 좁히는 데 사용되는 특정 세부정보 (검색어 또는 구성 옵션)입니다. 옵션은 다음과 같습니다.
    • 메일, 그룹스: 보존 조치를 좁히기 위한 검색어
    • Drive: 보존 조치에 공유 드라이브 포함

Vault 리소스로 작업하려면 계정에 필수 Vault 권한과 법적 사안에 대한 액세스 권한이 있어야 합니다. 법적 사안에 액세스하려면 해당 계정에서 법적 사안을 만들었거나 법적 사안이 공유되었거나 모든 법적 사안 보기 권한이 있어야 합니다.

검색어를 사용하여 특정 사용자 계정의 메일에 대한 보존 조치 만들기

다음 예시에서는 'My First mail Accounts Hold'라는 이름의 보존 조치가 생성되는 방법을 보여줍니다.

  • 서비스: mail
  • 항목: 사용자 계정 'user1' 및 'user2'
  • 추가 옵션: 'to:ceo@company.com' 검색어

AdminSdk에서 사용자 계정 ID를 검색합니다. HeldAccount에는 계정 ID 또는 이메일이 포함될 수 있습니다. 두 가지를 모두 제공하면 이메일이 사용되고 계정 ID는 무시됩니다.

Java

HeldMailQuery mailQuery = new HeldMailQuery().setTerms("to:ceo@company.com");
List accounts = Lists.newArrayList();
accounts.add(new HeldAccount().setAccountId(user1accountId));
accounts.add(new HeldAccount().setEmail(user2Email));
Hold hold = new Hold()
    .setName("My First mail Accounts Hold")
    .setCorpus("MAIL");
    .setQuery(new CorpusQuery().setMailQuery(mailQuery))
    .setAccounts(accounts);
Hold createdHold = client.matters().holds().create(matterId, hold).execute();
  

Python

def create_hold_mail_accounts(service, matter_id, account_id):
    mail_query = {'terms': 'to:ceo@company.com'}
    accounts = [
        {'accountId': user1_account_id},
        {'email': user2_email}
    ]
    wanted_hold = {
        'name': 'My First mail Accounts Hold',
        'corpus': 'MAIL',
        'query': {
            'mailQuery': mail_query
        },
        'accounts': accounts
    }
    return service.matters().holds().create(
        matterId=matter_id, body=wanted_hold).execute()

조직 단위에서 Drive에 대한 보존 조치를 만들고 공유 드라이브 콘텐츠를 포함합니다.

다음 예는 '내 첫 번째 드라이브 OU 보존 조치'라는 보존 조치를 생성하는 방법을 보여줍니다.

  • 서비스: Drive
  • 항목: 조직 단위 '재무' (OU ID는 orgUnitId에 캡처됨)
  • 추가 옵션: 이 조직 단위의 사용자가 속한 공유 드라이브를 포함합니다.

AdminSdk에서 OU ID를 검색합니다.

Java

HeldOrgUnit orgUnit = new HeldOrgUnit().setOrgUnitId(orgUnitId);
// Include shared drives content.
HeldDriveQuery driveQuery = new HeldDriveQuery().setIncludeSharedDriveFiles(true);
// Create the hold.
Hold hold = new Hold()
    .setName("My First Drive OU Hold")
    .setCorpus("DRIVE")
    .setQuery(new CorpusQuery().setDriveQuery(driveQuery))
    .setOrgUnit(orgUnit);
Hold createdHold = client.matters().holds().create(matterId, hold).execute();
return createdHold;

Python

def create_hold_drive_org(service, matter_id, org_unit_id):
    drive_query = {'includeSharedDriveFiles': True}
    org_unit = {'orgUnitId': org_unit_id}
    wanted_hold = {
        'name': 'My First Drive OU Hold',
        'corpus': 'DRIVE',
        'orgUnit': org_unit,
        'query': {
            'driveQuery': drive_query
        }
    }
    return service.matters().holds().create(
        matterId=matter_id, body=wanted_hold).execute()

특정 기간 동안 특정 그룹 계정의 그룹스에 대한 보존 조치 만들기

다음 예시는 'My First Group Hold'라는 보존 조치를 생성하는 방법을 보여줍니다.

  • 서비스: 그룹스
  • 항목: 그룹 계정 'group1' 및 'group2'
  • 추가 옵션: 전송된 날짜가 '시작 시간'과 '종료 시간' 사이에 있는 메시지만 보존 조치

AdminSdk에서 그룹 계정 ID를 검색합니다.

Java

String APRIL_2_2017_GMT = "2017-04-02T00:00:00Z"; // See below for format*.
 
List accounts = Lists.newArrayList();
accounts.add(new HeldAccount().setAccountId(accountId));
accounts.add(new HeldAccount().setAccountId(accountId2));
HeldGroupsQuery groupQuery = new HeldGroupsQuery();
// Restrict by sent date.
groupQuery.setStartTime(APRIL_2_2017_GMT);
groupQuery.setEndTime(APRIL_2_2017_GMT);
// create the hold
Hold hold = new Hold()
    .setName("My First Group Hold")
    .setCorpus("GROUPS")
    .setQuery(new CorpusQuery().setGroupsQuery(groupQuery));
    hold.setAccounts(accounts);
Hold createdHold = client.matters().holds().create(matterId, hold).execute();
 

Python

def create_hold_groups_date_range(service, matter_id, group_account_id):
    groups_query = {
        'startTime': '2017-04-02T00:00:00Z', # See below for format*
        'endTime': '2017-04-02T00:00:00Z'
    }
    accounts = [{'accountId': group_account_id}]
    wanted_hold = {
        'name': 'My First Group Hold',
        'corpus': 'GROUPS',
        'query': {
            'groupsQuery': groups_query
        },
        'accounts': accounts
    }
    return service.matters().holds().create(
        matterId=matter_id, body=wanted_hold).execute()
 
  • 타임스탬프 형식. 또한 start/endTime은 GMT로 변환되고 지정된 날짜의 시작으로 내림됩니다.

기존 보존 조치 쿼리 및 수정

다음 예는 기존 보존 조치에 포함된 모든 계정을 나열하는 방법을 보여줍니다.

Java

client.matters().holds().accounts().list(matterId, holdId).execute().getAccounts();

Python

# If no accounts are on hold, ['accounts'] will raise an error.
def list_held_accounts(service, matter_id, hold_id):
    return service.matters().holds().accounts().list(
        matterId=matter_id, holdId=hold_id).execute()['accounts'] 

다음 예에서는 기존 보존 조치에 계정을 추가하거나 기존 보존 조치에서 계정을 삭제하는 방법을 보여줍니다.

Java

// Add an account by id.
client
        .matters()
        .holds()
        .accounts()
        .create(matterId, holdId, new HeldAccount().setAccountId(accountId))
        .execute();
// Remove an account by id.
client.matters().holds().accounts().delete(matterId, holdId, accountId).execute();

String email = "email@email.com";
// Add an account by email.
client
        .matters()
        .holds()
        .accounts()
        .create(matterId, holdId, new HeldAccount().setEmail(email))
        .execute();

Python

 
def add_held_account(service, matter_id, hold_id, account_id):
    held_account = {'accountId': account_id}
    return service.matters().holds().accounts().create(
        matterId=matter_id, holdId=hold_id, body=held_account).execute()

def remove_held_account(service, matter_id, hold_id, account_id):
    return service.matters().holds().accounts().delete(
        matterId=matter_id, holdId=hold_id, accountId=account_id).execute()

def add_held_account(service, matter_id, hold_id, email):
    held_account = {'email': email}
    return service.matters().holds().accounts().create(
        matterId=matter_id, holdId=hold_id, body=held_account).execute()
 

다음 예시에서는 기존 OU 보존 조치의 OU를 수정하는 방법을 보여줍니다.

Java

Hold hold = client.matters().holds().get(matterId, holdId).execute();
hold.getOrgUnit().setOrgUnitId(newOrgUnitId);
Hold modifiedHold = client.matters().holds().update(matterId, holdId, hold).execute();
return modifiedHold;
 

Python

def update_hold_ou(service, matter_id, hold_id, org_unit_id):
    current_hold = get_hold(matter_id, hold_id)
    current_hold['orgUnit'] = {'orgUnitId': org_unit_id}
    return service.matters().holds().update(
        matterId=matter_id, holdId=hold_id, body=current_hold).execute() 

다음 예에서는 법적 사안에 대한 모든 보존 조치를 나열하는 방법을 보여줍니다.

Java

 
String matterId = "Matter Id";

// List all holds. List holdsList = client.matters().holds().list(matterId).execute().getHolds();

// Paginate on holds. ListHoldsResponse response = client .matters() .holds() .list(matterId) .setPageSize(10) .execute();

String nextPageToken = response.getNextPageToken(); if (nextPageToken != null) { client .matters() .holds() .list(matterId) .setPageSize(10) .setPageToken(nextPageToken) .execute(); }

Python

# This can paginate in the same manner as with matters.
def list_holds(service, matter_id):
    return service.matters().holds().list(matterId=matter_id).execute()