보존 조치는 법적 또는 보존 의무를 충족하기 위해 데이터를 무기한 보존합니다. 보통 보류는 하나 이상의 사용자에게 적용되며, 이 경우 해당 문제가 더 이상 활성 상태가 아닐 때까지 문제와 관련이 있을 수 있는 데이터를 삭제할 수 없습니다.
보존 조치의 적용을 받는 사용자가 보관된 데이터를 삭제하면 해당 데이터는 사용자의 뷰에서 삭제되지만 Vault에는 보존됩니다. 보존 조치가 적용되는 동안에는 Vault 관리자가 해당 데이터를 검색하고 내보낼 수 있습니다.
보류에는 다음과 같은 구성요소가 있습니다.
- 서비스: 보관할 데이터를 담당하는 애플리케이션입니다. 서비스는 메일, Drive 또는 그룹으로 설정할 수 있습니다.
- 범위: 보류가 적용되는 항목입니다. 범위는 하나 이상의 사용자 계정 또는 조직 단위 (OU)로 설정할 수 있습니다.
- 추가 옵션 (선택사항): 정의된 범위 내에 보관할 데이터를 좁히는 데 사용되는 구체적인 세부정보 (검색어 또는 구성 옵션)입니다. 옵션은 다음과 같습니다.
- 메일, 그룹: 보류를 좁히기 위한 검색어
- Drive: 보류에 공유 드라이브 포함
Vault 리소스를 사용하려면 계정에 필요한 Vault 권한이 있고 케이스에 대한 액세스 권한이 있어야 합니다. 법적 사안에 액세스하려면 해당 계정이 법적 사안을 만들었거나, 법적 사안이 해당 계정과 공유되었거나, 모든 법적 사안 보기 권한이 있어야 합니다.
검색어를 사용하여 특정 사용자 계정에 대한 메일 보류 설정
다음 예는 다음과 같은 경우 'My First mail Accounts Hold'라는 이름의 보류가 생성되는 방식을 보여줍니다.
- 서비스: 메일
- 항목: 사용자 계정 'user1' 및 'user2'
- 추가 옵션: 검색어 'to:ceo@company.com'
AdminSdk에서 사용자 계정 ID를 가져옵니다. HeldAccount는 계정 ID 또는 이메일을 사용할 수 있습니다. 둘 다 제공된 경우 이메일이 사용되고 계정 ID는 무시됩니다.
자바
HeldMailQuery mailQuery = new HeldMailQuery().setTerms("to:ceo@company.com"); Listaccounts = 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 Hold'라는 이름의 보류가 생성되는 방식을 보여줍니다.
- 서비스: Drive
- 항목: 조직 단위 'Finance' (OU ID는 orgUnitId에 캡처됨)
- 추가 옵션: 이 조직 단위의 사용자가 멤버인 공유 드라이브 포함
AdminSdk에서 OU ID를 가져옵니다.
자바
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를 가져옵니다.
자바
String APRIL_2_2017_GMT = "2017-04-02T00:00:00Z"; // See below for format*. Listaccounts = 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()
- 타임스탬프 형식 또한 시작 시간/종료 시간은 GMT로 변환되고 지정된 날짜의 시작 시간으로 반올림됩니다.
기존 보류 쿼리 및 수정
다음 예는 기존 보류에 포함된 모든 계정을 나열하는 방법을 보여줍니다.
자바
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']
다음 예는 기존 보류에 계정을 추가하고 계정을 삭제하는 방법을 보여줍니다.
자바
// 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를 수정하는 방법을 보여줍니다.
자바
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()
다음 예는 케이스의 모든 보류를 나열하는 방법을 보여줍니다.
자바
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()