보존 조치 관리

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

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

보존 조치는 다음과 같은 요소로 구성됩니다.

  • 서비스: 데이터를 보관하는 애플리케이션입니다. 메일, Drive 또는 그룹스로 서비스를 설정할 수 있습니다.
  • 범위: 보존 조치가 적용되는 항목입니다. 범위는 하나 이상의 사용자 계정 또는 조직 단위 (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()

OU에 Drive 보존 조치를 생성하고 공유 드라이브 콘텐츠 포함

다음 예에서는 'My First 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'
  • 추가 옵션: 전송된 날짜가 'startTime'과 'endTime' 사이인 메시지만 보존 조치

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/endTimes는 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()