개요
Cloud Storage는 다양한 고급 기능을 갖춘 Google Cloud의 기본 리소스입니다. 이 실습에서는 디자인에 유용한 여러 가지 Cloud Storage 기능을 연습합니다. Google Cloud 콘솔, 명령줄 도구 gsutil 또는 다양한 프로그래밍 언어의 Cloud Storage 클라이언트 라이브러리를 통해 Cloud Storage와 상호작용할 수 있습니다.
목표
이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.
- 버킷 생성 및 사용
- 액세스 제어 목록(ACL)을 설정하여 액세스 제한
- 자체 암호화 키 사용
- 버전 제어 구현
- 디렉터리 동기화 사용
설정 및 요구사항
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 팝업이 열립니다.
왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 패널이 있습니다.
-
Google Cloud 콘솔 열기 버튼
- 남은 시간
- 이 실습에 사용해야 하는 임시 사용자 인증 정보
- 필요한 경우 실습 진행을 위한 기타 정보
-
Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).
실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
-
필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.
{{{user_0.username | "Username"}}}
실습 세부정보 패널에서도 사용자 이름을 확인할 수 있습니다.
-
다음을 클릭합니다.
-
아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.
{{{user_0.password | "Password"}}}
실습 세부정보 패널에서도 비밀번호를 확인할 수 있습니다.
-
다음을 클릭합니다.
중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요.
참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
-
이후에 표시되는 페이지를 클릭하여 넘깁니다.
- 이용약관에 동의합니다.
- 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
- 무료 체험판을 신청하지 않습니다.
잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.
참고: Google Cloud 제품 및 서비스 목록이 있는 메뉴를 보려면 왼쪽 상단의 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.
작업 1. 준비
이 작업에서는 Cloud Storage 버킷을 만듭니다. 그런 다음, 다음 작업에서 사용할 샘플 파일을 다운로드합니다.
Cloud Storage 버킷 만들기
- Google Cloud 콘솔의 탐색 메뉴(
)에서 Cloud Storage > 버킷을 클릭합니다.
참고: 버킷의 이름은 전역적으로 고유해야 합니다. 고유한 이름을 만들기 위해 이름에 PROJECT_ID_1의 일부를 사용할 수 있습니다. 예를 들어 PROJECT_ID_1이 myproj-154920인 경우 버킷 이름을 storecore154920으로 할 수 있습니다.
-
만들기를 클릭합니다.
- 다음을 지정하고 나머지 설정은 기본값으로 둡니다.
| 속성 |
값(지정된 대로 값 입력 또는 옵션 선택) |
| 이름 |
전역적으로 고유한 이름 입력 |
| 위치 유형 |
리전 |
| 리전 |
|
| 이 버킷에 공개 액세스 방지 적용 |
선택 해제됨 |
| 액세스 제어 |
세분화(버킷 수준 권한 외에 객체 수준 권한도 사용) |
- 버킷 이름을 기록해 둡니다. 이 실습의 이후 단계에서 [BUCKET_NAME_1]에 사용됩니다.
-
만들기를 클릭합니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Cloud Storage 버킷 만들기
CURL을 사용하여 샘플 파일을 다운로드하고 사본 2개 만들기
- Cloud 콘솔에서 Cloud Shell 활성화(
)를 클릭합니다.
- 메시지가 표시되면 계속을 클릭합니다.
- 환경 변수에 [BUCKET_NAME_1]을 저장합니다.
export BUCKET_NAME_1=<여기에 버킷 이름 1 입력>
- echo를 사용하여 값을 확인합니다.
echo $BUCKET_NAME_1
- 다음 명령어를 실행하여 샘플 파일을 다운로드합니다. 이 샘플 파일은 공개적으로 사용 가능한 Hadoop 문서 HTML 파일입니다.
curl \
https://hadoop.apache.org/docs/current/\
hadoop-project-dist/hadoop-common/\
ClusterSetup.html > setup.html
- 다음 명령어를 실행하여 파일의 사본을 만듭니다.
cp setup.html setup2.html
cp setup.html setup3.html
작업 2. 액세스 제어 목록(ACL)
이 작업에서는 Cloud Storage 버킷에 복사한 파일에 대한 액세스를 제한하도록 액세스 제어 목록을 설정합니다.
파일을 버킷에 복사하고 액세스 제어 목록 구성
- 다음 명령어를 실행하여 첫 번째 파일을 버킷에 복사합니다.
gcloud storage cp setup.html gs://$BUCKET_NAME_1/
- 다음 명령어를 실행하여 setup.html에 할당된 기본 액세스 목록을 가져옵니다.
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl.txt
cat acl.txt
- 다음 명령어를 실행하여 액세스 목록을 비공개로 설정하고 결과를 확인합니다.
gsutil acl set private gs://$BUCKET_NAME_1/setup.html
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl2.txt
cat acl2.txt
- 다음 명령어를 실행하여 액세스 목록을 업데이트하고 공개적으로 읽기 가능한 파일로 만듭니다.
gsutil acl ch -u AllUsers:R gs://$BUCKET_NAME_1/setup.html
gsutil acl get gs://$BUCKET_NAME_1/setup.html > acl3.txt
cat acl3.txt
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
파일을 읽을 수 있도록 공개
Cloud 콘솔에서 파일 검사
- Google Cloud 콘솔의 탐색 메뉴(
)에서 Cloud Storage > 버킷을 클릭합니다.
- [BUCKET_NAME_1]을 클릭합니다.
- setup.html 파일의 공개 액세스에서 공개 링크를 사용할 수 있는지 확인합니다.
로컬 파일 삭제 및 Cloud Storage에서 다시 복사
-
Cloud Shell로 돌아갑니다. 필요한 경우 Cloud Shell 활성화(
)를 클릭합니다.
- 다음 명령어를 실행하여 설정 파일을 삭제합니다.
rm setup.html
- 다음 명령어를 실행하여 파일 삭제를 확인합니다.
ls
- 다음 명령어를 실행하여 버킷에서 파일을 다시 복사합니다.
gcloud storage cp gs://$BUCKET_NAME_1/setup.html setup.html
작업 3. 고객 제공 암호화 키(CSEK)
이 작업에서는 Cloud Storage 버킷에 저장된 파일을 암호화하는 CSEK 키를 생성합니다.
CSEK 키 생성
다음 단계를 진행하려면 AES-256 base-64 키가 필요합니다.
- 다음 명령어를 실행하여 키를 만듭니다.
python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
결과(출력 예시입니다):
b'tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=\n'
- 명령어 출력에서
b' 및 \n'을 제외하고 생성된 키 값을 복사합니다. 키 형식은 tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=입니다.
boto 파일 수정
암호화 컨트롤은 .boto라는 gsutil 구성 파일에 포함되어 있습니다.
- 다음 명령어를 실행하여 boto 파일을 열거나 볼 수 있습니다.
ls -al
nano .boto
참고: .boto 파일이 비어 있으면 Ctrl+X를 눌러 nano 편집기를 닫고 gsutil config -n 명령어를 사용하여 새 .boto 파일을 만듭니다. 그런 다음 위에서 사용한 명령어로 파일을 다시 엽니다.
.boto 파일이 여전히 비어 있으면 gsutil version -l 명령어를 사용하여 찾아야 합니다.
- '
#encryption_key='이 있는 줄을 찾습니다.
참고: nano 편집기 하단의 단축키로 파일을 빠르게 탐색할 수 있습니다. Where Is 단축키를 사용하여 #encryption_key=이 있는 줄을 빠르게 찾을 수 있습니다.
- # 문자를 삭제하여 줄의 주석 처리를 삭제하고 앞서 생성한 키를 끝에 붙여넣습니다.
예시(예시입니다):
변경 전:
# encryption_key=
변경 후:
encryption_key=tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=
-
Ctrl+O와 ENTER 키를 눌러 boto 파일을 저장한 다음 Ctrl+X를 눌러 nano 편집기를 종료합니다.
나머지 설정 파일(암호화됨) 업로드 및 Cloud 콘솔에서 확인
- 다음 명령어를 실행하여 나머지 setup.html 파일을 업로드합니다.
gsutil cp setup2.html gs://$BUCKET_NAME_1/
gsutil cp setup3.html gs://$BUCKET_NAME_1/
- Cloud 콘솔로 돌아갑니다.
- [BUCKET_NAME_1]을 클릭합니다. setup2.html 파일과 setup3.html 파일 모두 고객이 제공한 키로 암호화되어 있다고 표시됩니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
고객 제공 암호화 키(CSEK)
로컬 파일 삭제, 새 파일 복사, 암호화 확인
- Cloud Shell에서 다음 명령어를 실행하여 로컬 파일을 삭제합니다.
rm setup*
- 다음 명령어를 실행하여 버킷에서 파일을 다시 복사합니다.
gsutil cp gs://$BUCKET_NAME_1/setup* ./
- 다음 명령어를 실행하여 암호화된 파일을 화면에 출력하고 파일이 다시 돌아왔는지 확인합니다.
cat setup.html
cat setup2.html
cat setup3.html
작업 4. CSEK 키 순환
이 작업에서는 지속적인 데이터 보안을 유지하기 위해 Cloud Storage에서 데이터 암호화에 사용되는 CSEK를 순환합니다.
현재 CSEK 암호화 키를 복호화 키로 이동
- 다음 명령어를 실행하여
.boto 파일을 엽니다.
nano .boto
- 현재 encryption_key 줄의 맨 앞에 # 문자를 추가하여 주석 처리합니다.
참고: nano 편집기 하단의 단축키로 파일을 빠르게 탐색할 수 있습니다. Where Is 단축키를 사용하여 encryption_key=이 있는 줄을 빠르게 찾을 수 있습니다.
- # 문자를 삭제하여 decryption_key1의 주석 처리를 삭제하고 encryption_key 줄의 현재 키를 decryption_key1 줄에 복사합니다.
결과(출력 예시입니다):
변경 전:
encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
# decryption_key1=
변경 후:
# encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
-
Ctrl+O와 ENTER 키를 눌러 boto 파일을 저장한 다음 Ctrl+X를 눌러 nano 편집기를 종료합니다.
참고: 실제 환경에서는 encryption_key 줄에서 이전 CSEK 키를 삭제하게 됩니다.
다른 CSEK 키를 생성하여 boto 파일에 추가
- 다음 명령어를 실행하여 새 키를 생성합니다.
python3 -c 'import base64; import os; print(base64.encodebytes(os.urandom(32)))'
- 명령어 출력에서
b' 및 \n'을 제외하고 생성된 키 값을 복사합니다. 키 형식은 tmxElCaabWvJqR7uXEWQF39DhWTcDvChzuCmpHe6sb0=입니다.
- 다음 명령어를 실행하여 boto 파일을 엽니다.
nano .boto
- 암호화의 주석 처리를 삭제하고 새로운
encryption_key= 키 값을 붙여넣습니다.
결과(출력 예시입니다):
변경 전:
# encryption_key=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
변경 후:
encryption_key=HbFK4I8CaStcvKKIx6aNpdTse0kTsfZNUjFpM+YUEjY=
-
Ctrl+O와 ENTER 키를 눌러 boto 파일을 저장한 다음 Ctrl+X를 눌러 nano 편집기를 종료합니다.
파일 1 키 재작성 및 이전 복호화 키의 주석 처리
암호화된 파일을 재작성하면 이전에 설정한 decryption_key1로 파일이 복호화되고 새 encryption_key로 다시 암호화됩니다.
setup2.html의 키는 재작성하되 setup3.html의 키는 재작성하지 않음으로써 키가 적절히 순환되지 않으면 어떤 일이 발생하는지 확인할 수 있습니다.
- 다음 명령어를 실행합니다.
gsutil rewrite -k gs://$BUCKET_NAME_1/setup2.html
- 다음 명령어를 실행하여 boto 파일을 엽니다.
nano .boto
- # 문자를 다시 추가하여 현재 decryption_key1 줄을 주석 처리합니다.
결과(출력 예시입니다):
변경 전:
decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
변경 후:
# decryption_key1=2dFWQGnKhjOcz4h0CudPdVHLG2g+OoxP8FQOIKKTzsg=
-
Ctrl+O와 ENTER 키를 눌러 boto 파일을 저장한 다음 Ctrl+X를 눌러 nano 편집기를 종료합니다.
참고: 실제 환경에서는 decryption_key1 줄에서 이전 CSEK 키를 삭제하게 됩니다.
설정 2 및 설정 3 다운로드
- 다음 명령어를 실행하여 setup2.html을 다운로드합니다.
gsutil cp gs://$BUCKET_NAME_1/setup2.html recover2.html
- 다음 명령어를 실행하여 setup3.html을 다운로드합니다.
gsutil cp gs://$BUCKET_NAME_1/setup3.html recover3.html
참고: 어떻게 된 것일까요? setup3.html은 새 키로 재작성하지 않았기 때문에 복호화될 수 없고 복사되지 않습니다. CSEK 키를 성공적으로 순환했습니다.
작업 5. 수명 주기 관리 사용 설정
이 작업에서는 Cloud Storage 버킷에 수명 주기 관리를 사용 설정하여 지정된 기간 후에 객체 삭제를 자동화합니다.
버킷의 현재 수명 주기 정책 보기
- 다음 명령어를 실행하여 현재 수명 주기 정책을 확인합니다.
gsutil lifecycle get gs://$BUCKET_NAME_1
참고: 수명 주기 구성이 없습니다. 다음 단계에서 수명 주기 구성을 만듭니다.
JSON 수명 주기 정책 파일 만들기
- 다음 명령어를 실행하여 life.json이라는 이름의 파일을 만듭니다.
nano life.json
- life.json 파일에 다음 값을 붙여넣습니다.
{
"rule":
[
{
"action": {"type": "Delete"},
"condition": {"age": 31}
}
]
}
참고: 이 명령은 Cloud Storage에 31일이 지난 객체를 삭제하도록 지시합니다.
-
Ctrl+O와 ENTER 키를 눌러 파일을 저장한 다음 Ctrl+X를 눌러 nano 편집기를 종료합니다.
정책 설정 및 확인
- 다음 명령어를 실행하여 정책을 설정합니다.
gsutil lifecycle set life.json gs://$BUCKET_NAME_1
- 다음 명령어를 실행하여 정책을 확인합니다.
gsutil lifecycle get gs://$BUCKET_NAME_1
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
수명 주기 관리 사용 설정
작업 6. 버전 관리 사용 설정
이 작업에서는 Cloud Storage 버킷에 버전 관리를 사용 설정하여 실수로 삭제되거나 수정되지 않도록 데이터를 보호합니다.
버킷의 버전 관리 상태 확인 및 버전 관리 사용 설정
- 다음 명령어를 실행하여 버킷의 현재 버전 관리 상태를 확인합니다.
gsutil versioning get gs://$BUCKET_NAME_1
참고: 보류된 정책이란 사용 설정되어 있지 않다는 뜻입니다.
- 다음 명령어를 실행하여 버전 관리를 사용 설정합니다.
gsutil versioning set on gs://$BUCKET_NAME_1
- 다음 명령어를 실행하여 버전 관리가 사용 설정되었는지 확인합니다.
gsutil versioning get gs://$BUCKET_NAME_1
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
버전 관리 사용 설정
버킷에 샘플 파일의 여러 버전 만들기
- 샘플 파일의 크기를 확인합니다.
ls -al setup.html
- setup.html 파일을 엽니다.
nano setup.html
- setup.html에서 임의의 5줄을 삭제하여 파일 크기를 변경합니다.
-
Ctrl+O와 Enter 키를 눌러 파일을 저장한 다음 Ctrl+X를 눌러 nano 편집기를 종료합니다.
- 버전 관리 옵션인 -v를 사용하여 파일을 버킷에 복사합니다.
gcloud storage cp -v setup.html gs://$BUCKET_NAME_1
- setup.html 파일을 엽니다.
nano setup.html
- setup.html에서 5줄을 더 삭제하여 파일 크기를 변경합니다.
-
Ctrl+O와 Enter 키를 눌러 파일을 저장한 다음 Ctrl+X를 눌러 nano 편집기를 종료합니다.
- 버전 관리 옵션인 -v를 사용하여 파일을 버킷에 복사합니다.
gcloud storage cp -v setup.html gs://$BUCKET_NAME_1
파일의 모든 버전 나열
- 다음 명령어를 실행하여 파일의 모든 버전을 나열합니다.
gcloud storage ls -a gs://$BUCKET_NAME_1/setup.html
- 목록 맨 위에 있는 가장 오래된 파일 버전 이름을 강조표시하고 복사합니다. 이 이름은 다음 단계에서 [VERSION_NAME]에 사용됩니다.
참고: gs://로 시작하는 파일의 전체 경로를 복사해야 합니다.
- 환경 변수 [VERSION_NAME]에 버전 값을 저장합니다.
export VERSION_NAME=<여기에 버전 이름 입력>
- echo를 사용하여 값을 확인합니다.
echo $VERSION_NAME
결과(출력 예시입니다):
gs://BUCKET_NAME_1/setup.html#1584457872853517
파일의 가장 오래된 원본 버전 다운로드 및 복구 확인
- 파일의 원래 버전을 다운로드합니다.
gcloud storage cp $VERSION_NAME recovered.txt
- 다음 명령어를 실행하여 복구를 확인합니다.
ls -al setup.html
ls -al recovered.txt
참고: 백업 버전에서 원래 파일을 복구했습니다. 줄을 삭제했기 때문에 원래 버전이 현재 버전보다 더 큽니다.
작업 7. 디렉터리를 버킷에 동기화
이 작업에서는 gsutil rsync 명령어를 사용하여 로컬 디렉터리와 하위 디렉터리를 Cloud Storage 버킷과 동기화합니다.
중첩된 디렉터리를 만들고 버킷과 동기화
디렉터리가 버킷에 재귀적으로 복사되면 어떤 일이 일어나는지 살펴볼 수 있도록 중첩된 디렉터리 구조를 만듭니다.
- 다음 명령어를 실행합니다.
mkdir firstlevel
mkdir ./firstlevel/secondlevel
cp setup.html firstlevel
cp setup.html firstlevel/secondlevel
- 다음 명령어를 실행하여 VM의 첫 번째 수준 디렉터리를 버킷과 동기화합니다.
gsutil rsync -r ./firstlevel gs://$BUCKET_NAME_1/firstlevel
결과 검사
- Google Cloud 콘솔의 탐색 메뉴(
)에서 Cloud Storage > 버킷을 클릭합니다.
- [BUCKET_NAME_1]을 클릭합니다. 버킷 내의 하위 폴더를 확인하세요.
-
/firstlevel과 /secondlevel을 차례로 클릭합니다.
- Cloud 콘솔에 표시된 내용을 다음 명령어의 결과와 비교해 봅니다.
gcloud storage ls -r gs://$BUCKET_NAME_1/firstlevel
- Cloud Shell을 종료합니다.
exit
작업 8. 검토
이 실습에서는 버킷과 객체를 만들고 이를 사용하여 작업하는 방법과 Cloud Storage의 다음과 같은 기능에 관해 배웠습니다.
- CSEK: 고객 제공 암호화 키
- 자체 암호화 키 사용
- 키 순환
- ACL: 액세스 제어 목록
- ACL을 비공개로 설정한 후 공개로 수정
- 수명 주기 관리
- 31일이 지난 객체를 삭제하도록 정책 설정
- 버전 관리
- 버전 만들기 및 이전 버전 복원
- 디렉터리 동기화
- VM 디렉터리를 버킷과 재귀적으로 동기화
실습 종료하기
실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
- 별표 1개 = 매우 불만족
- 별표 2개 = 불만족
- 별표 3개 = 중간
- 별표 4개 = 만족
- 별표 5개 = 매우 만족
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.