[실습-중급01]Use Google Cloud Console & Cloud Shell
첫번째 실습은 Google Cloud Console, Cloud Shell
을 사용해서 Bucket, VM, IAM
을 생성해보고 권한에 따른 접근을 확인해보는 실습입니다.
아래 4개의 Task를 해결하면서 간접적으로 경험해 봅시다.
Objectives(목표)
- Learn how to access the
Cloud Console
andCloud Shell
- Become familiar with the
Cloud Console
- Become familiar with
Cloud Shell
features, including theCloud Shell code editor
- Use the Cloud Console and Cloud Shell to
create buckets and VMs and service accounts
- Perform
other commands in Cloud Shell
Task 1. Google Cloud Console 탐색하기
Google Cloud Console
은 Google Cloud의 모든 리소스와 서비스를 관리하는 데 사용되는 웹 기반 인터페이스입니다. 이 과제에서는 Google Cloud Console로 Bucket, VM, IAM 을 생성해봅니다.
1. Google Cloud Console 접속
접속화면
2. Create A Bucket
-
Navigation menu > Cloud overview > Dashboard 의 Project ID 기억
- Projcet ID : qwiklabs-gcp-03-076d173bb0ac
-
Navigation menu > Cloud Storage > Buckets 에서 CREATE
- Name 을 위에서 구한 Project ID로 설정
-
Choose how to control access to objects 로 들어가서 Enforce public access prevention on this bucket 을 uncheck 하고, Fine-grained 를 select
- 참고 : Public Access를 가능하게 바꾼것이다.
설정 모습
버킷 생성 완료
3. Create A VM
Google Compute Engine은 Google의 데이터 센터와 네트워크에서 실행되는 가상 머신을 서비스로 제공합니다. Google Kubernetes Engine(=GKE)
은 아키텍처의 구성요소로 Compute Engine을 사용하므로 Compute Engine에 대해 알아봅니다.
-
Navigation menu > Compute Engine > VM instances 에서 Create instance
-
Name 은
first-vm
로 임의로 설정 - Region 은 us-central1 선택
- Zone 은 us-central1-c 선택
-
Machine type은 e2-micro (2 shared vCPU) 선택
- 저렴한 공유 코어 VM을 사용하기 때문
- Firewall 설정에서 Allow HTTP traffic 체크
-
Name 은
VM 생성 모습
HTTP 트래픽을 허용한 결과
- 응답 없음이 아닌 연결 거부로 정상임을 알 수 있음
- “연결거부”의 경우 VM에 대한 HTTP 트래픽을 위해 열려 있는 방화벽 포트가 있지만 거기에서 실행 중인 웹 서버(앱)가 없기 때문에 발생!!
4. Create an IAM service account
IAM 서비스 계정은 개별 사용자가 아닌 애플리케이션이나 가상 머신에 속하는 특별한 유형의 Google 계정을 의미하며, 관리자가 사용자에게 특정 리소스에 조치를 취할 수 있는 권한을 부여할 수 있어 Google Cloud 클라우드 리소스를 중앙에서 관리하는 데 필요한 완전한 제어와 가시성을 얻을 수 있습니다.
-
Navigation menu > IAM & admin > Service accounts 에서 Create service account
- Name :
test-service-account
로 설정
- Name :
- Grant this service account access to project 설정에서 Basic > Editor 권한을 적용 후 Create
- 생성 후에 우리가 만든
test-service-account
의 오른쪽에 Dot(…) 클릭 > Manage keys- ADD Key > CREATE > JSON > CREATE 실행시 자동으로 해당 JSON 다운 (계정 인증에 필수!)
키 생성 모습
Task 2. Cloud Shell 탐색하기
Cloud Shell
은 Google Cloud Console 내에 내장된 Interactive Shell 환경입니다. 이 과제에서는 Task1 과제를 Cloud Shell로 Bucket, VM, IAM 생성해봅니다. 아래는 Cloud Shell의 제공 기능입니다.
- Temporary Compute Engine VM
- Command-line access to the instance through a browser
- 5 GB of persistent disk storage (
$HOME dir
) - Preinstalled Cloud SDK and other tools
-
gcloud
: for working with Compute Engine, Google Kubernetes Engine (GKE) and many Google Cloud services -
gsutil
: for working with Cloud Storage -
kubectl
: for working with GKE and Kubernetes -
bq
: for working with BigQuery - Language support for Java, Go, Python, Node.js, PHP, and Ruby
- Web preview functionality
- Built-in authorization for access to resources and instances
1. Open Cloud Shell
아래 그림의 오른쪽 상단에 아이콘이 존재
존재하지 않는다면 검색 창에 Cloud Shell을 검색하여 오픈!
2. 환경설정 및 credentials file 등록
아래 환경변수 설정을 먼저 진행
MY_BUCKET_NAME_1="qwiklabs-gcp-03-076d173bb0ac" // Task1 에서 만든 버킷이름
MY_BUCKET_NAME_2="qwiklabs-gcp-test123" // 새로 만들 버킷이름(유니크하게)
MY_REGION=us-central1
Task1에서 만든 IAM 서비스 계정의 작업 증명 파일(JSON)을 등록
- Cloud Shell 의 Dot(…) > Upload 를 통해서 JSON 파일을 업로드
- 이때, JSON파일 구분쉽게
credentials.json
파일명으로 바꿔서 업로드!
- 이때, JSON파일 구분쉽게
-
만약 업로드를 안한다면??
- 아래에서 Cloud Shell로 “버킷”을 만들때 no configured credentials(자격증명 없음) 이라는 오류가 발생한다.
여기까지 모습
3. gsutil-Create A Second Cloud Storage Bucket In Cloud Shell
Cloud Shell
에 세팅을 끝내놨으니 이번엔 Google Console이 아니고 여기에서 바로 “버킷, 가상머신” 을 만들어보겠습니다.
-
gsutil mb gs://$MY_BUCKET_NAME_2
명령어 사용 및 Authorize- mb : make bucket
- gs : google storage
두번째 버킷의 생성 모습
4. gcloud-Create A Second VM In Cloud Shell
아래 명령어 진행
// 환경 설정
MY_ZONE="us-central1-c"
gcloud config set compute/zone $MY_ZONE // 기본 zone으로 등록
MY_VMNAME=second-vm
// VM 생성
gcloud compute instances create $MY_VMNAME \
--machine-type "e2-standard-2" \
--image-project "debian-cloud" \
--image-family "debian-11" \
--subnet "default"
두번째 VM 생성된 모습
첫번째 VM과는 다르게 따로 HTTP 트래픽 허용을 안한 두번째 VM
- “연결거부”가 아닌 “응답없음” 이 발생하는게 정상
5. gcloud-Create A Second IAM service account
IAM 생성 위해 아래 명령어 사용!!
gcloud iam service-accounts create test-service-account2 --display-name "test-service-account2"
생성된 서비스 계정에 Project Viewer 권한을 부여
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member serviceAccount:test-service-account2@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com --role roles/viewer
우리가 이때까지 만든 IAM 2개의 역할 확인
Task 3. Cloud Shell에서 Cloud Storage 작업하기
Cloud Storage
는 Google Cloud의 객체 스토리지 서비스입니다. 이 과제에서는 Google이 제공해주는 이미지를 Cloud Shell과 Bucket에 저장 및 사용법을 배워봅니다.
1. 구글에서 제공하는 “고양이” 이미지 저장
Cloud Shell, Bucket1, Bucket2에 각각 저장해보겠습니다.
// 구글제공 이미지 -> Cloud Shell에 복제
gsutil cp gs://cloud-training/ak8s/cat.jpg cat.jpg
// Cloud Shell -> Bucket1에 복제
gsutil cp cat.jpg gs://$MY_BUCKET_NAME_1
// Bucket1 -> Bucket2에 복제
gsutil cp gs://$MY_BUCKET_NAME_1/cat.jpg gs://$MY_BUCKET_NAME_2/cat.jpg
생성된 “이미지”
2. Cloud Storage 접근 권한 확인
먼저, Bucket1의 접근 권한 확인 명령어
- 접근 권한이 여러개가 있음을 알 수 있다.
gsutil acl get gs://$MY_BUCKET_NAME_1/cat.jpg > acl.txt
cat acl.txt
// 결과
[
{
"entity": "project-owners-560255523887",
"projectTeam": {
"projectNumber": "560255523887",
"team": "owners"
},
"role": "OWNER"
},
{
"entity": "project-editors-560255523887",
"projectTeam": {
"projectNumber": "560255523887",
"team": "editors"
},
"role": "OWNER"
},
{
"entity": "project-viewers-560255523887",
"projectTeam": {
"projectNumber": "560255523887",
"team": "viewers"
},
"role": "READER"
},
{
"email": "google12345678_student@qwiklabs.net",
"entity": "user-google12345678_student@qwiklabs.net",
"role": "OWNER"
}
]
접근권한을 “개인”으로 줄여보는 명령어
gsutil acl set private gs://$MY_BUCKET_NAME_1/cat.jpg
// 새로운 ACL 확인
gsutil acl get gs://$MY_BUCKET_NAME_1/cat.jpg > acl-2.txt
cat acl-2.txt
// 결과
[
{
"email": "google12345678_student@qwiklabs.net",
"entity": "user-google12345678_student@qwiklabs.net",
"role": "OWNER"
}
]
3. Service Account 변경
Cloud Shell에서 계정을 바꾼후 권한에 맞게 “이미지” 접근의 가능여부를 확인하는게 목적이다.
gcloud config list
를 통해서 현재 account(계정) 를 확인
// 결과
[component_manager]
disable_update_check = True
[compute]
gce_metadata_read_timeout_sec = 30
zone = us-central1-a
[core]
account = google12345678_student@qwiklabs.net
disable_usage_reporting = False
project = qwiklabs-Google Cloud-1aeffbc5d0acb416
[metrics]
environment = devshell
Your active configuration is: [cloudshell-16441]
gcloud auth activate-service-account --key-file credentials.json
로 아까 credentials.json
으로 파일 업로드한 것으로 변경
다시 gcloud config list
를 통해서 현재 account 를 확인
=> 처음에 Task1 에서 만든 계정으로 변경됨
[component_manager]
disable_update_check = True
[compute]
gce_metadata_read_timeout_sec = 30
zone = us-central1-a
[core]
account = test-service-account@qwiklabs-Google Cloud-1aeffbc5d0acb416.iam.gserviceaccount.com
disable_usage_reporting = False
project = qwiklabs-Google Cloud-1aeffbc5d0acb416
[metrics]
environment = devshell
Your active configuration is: [cloudshell-16441]
이번에는 gcloud auth list
를 통해서 권한 계정 리스트를 확인
- 아래는 예시일 뿐이고, 권한 계정들을 확인 가능
Credentialed Accounts
ACTIVE:
ACCOUNT: student-03-5165fd82c14b@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
4. 권한 여부에 따른 “이미지” 접근 가능성
현재 test-service-account
계정으로 활성화 된 상태에서 아래 명령어를 수행해보면??
gsutil cp gs://$MY_BUCKET_NAME_1/cat.jpg ./cat-copy.jpg
- 아래처럼 에러가 발생해야합니다.
- 왜냐하면 아까전에 “버킷1” 의 이미지의 접근 권한을 “개인”인 owner 로 두었기 때문입니다.
Copying gs://test-bucket-123/cat.jpg...
AccessDeniedException: 403 KiB]
그럼 “버킷2” 의 이미지의 경우에는??
gsutil cp gs://$MY_BUCKET_NAME_2/cat.jpg ./cat-copy.jpg
- 아래처럼 정상 접근 가능합니다.
- 왜냐하면 “버킷2” 에는 따로 이미지 접근 권한을 건드리지 않았기 때문입니다.
Copying gs://test-bucket-123/cat.jpg...
- [1 files][ 81.7 KiB/ 81.7 KiB]
Operation completed over 1 objects/81.7 KiB.
“버킷1” 의 이미지를 접근하기 위해 “개인”인 owner 로 변경하려면 아래 명령어를 수행
-
gcloud config set account [USERNAME]
단, USERNAME은 사용자의 NAME을 의미 - 이후 똑같이 “버킷1” 의 이미지를 접근시 정상 구동
“버킷1” 의 이미지를 인증되지 않은 모든 사람들이 접근가능하게 하는것은??
gsutil iam ch allUsers:objectViewer gs://$MY_BUCKET_NAME_1
- 참고: Cloud Storage에서 공개 웹사이트 콘텐츠를 호스팅하기 위한 적절한 설정입니다.
- 따라서 해당 “버킷1” 스토리지에 “이미지” URL을 웹에 접근하면 접속이 가능합니다.
Task 4. Cloud Shell 코드 에디터 탐색하기
Cloud Shell에는 코드 에디터 기능
이 내장되어 있습니다. 이 과제에서는 Cloud Shell의 코드 에디터를 사용하여 코드를 작성하고 실행하는 방법을 배웁니다.
1. Open Code Editor
Cloud Shell 에서 Open Editor 아이콘을 클릭해서 간단히 켤 수 있다.
- Cloud Shell 에서
git clone https://github.com/googlecodelabs/orchestrate-with-kubernetes.git
을 실행 - 다운 받은 파일을 Code Editor의 왼쪽 면에서 볼 수 있다.
- 파일 중에서
cleanup.sh
파일을echo Finished cleanup!
로 수정하고, - 다시 Cloud Shell 에서
cd orchestrate-with-kubernetes
로 경로 접근 및cat cleanup.sh
로 파일을 열어서Finished cleanup!
가 정상 출력되는지 확인할 수 있다.
2. index.html 생성
아래 그림처럼 index.html을 생성합니다.
index.html 코드
- 단, 아래 src 소스 부분의 값은
https://storage.googleapis.com/qwiklabs-Google Cloud-1aeffbc5d0acb416/cat.jpg
로 이전에 “고양이” 이미지 링크로 수정
<html><head><title>Cat</title></head>
<body>
<h1>Cat</h1>
<img src="REPLACE_WITH_CAT_URL">
</body></html>
3. SSH - nginx 설치
이후 웹으로 “고양이” 이미지를 띄우기 위해서 이전에 http 트래픽 허용했던 VM 1을 접근합니다.
first-vm > SSH 로 접근해서 VM에서 열리는 SSH 로그인 창에 nginx 웹 서버를 설치합니다.
sudo apt-get remove -y --purge man-db
sudo touch /var/lib/man-db/auto-update
sudo apt-get update
sudo apt-get install nginx
이후 Cloud Shell에서 아까 만들었던 index.html을 first-vm 가상머신으로 복제합니다.
gcloud compute scp index.html first-vm:index.nginx-debian.html --zone=us-central1-c
마지막으로 생성한 nginx-debian.html을 nginx
웹 서버의 문서 루트인 /var/www/html로 파일을 복제합니다.
이후 “이미지” 링크가 아닌, first-vm 의 External IP 로 접근하면 “고양이” 이미지가 존재하는 웹을 볼 수 있습니다.
- 물론, 원하는 입맛대로 nginx를 설정하여 리버스 프록시로 로드밸런싱을 적용하거나
- 웹 서버 루트인 /var/www/html 기본 경로를 바꾸는 등은 자유롭게 테스트!
마무리
Google Cloud Storage Bucket, Google Cloud VM (가상 머신), Cloud Shell
각각은 저장소들이 존재했고, 특히 Cloud Shell은 임시 저장소 및 영구 저장소가 있는데 임시 저장소 부분은 일정시간이 지나면 사라진다는 것을 기억하자.
모두 저장 기능을 제공하지만, 그 용도와 저장 위치, 데이터 접근 방식 등에 있어서 각기 달랐다. 사용자가 필요로 하는 기능과 목적에 따라 적절한 서비스를 선택하여 사용하자.
댓글남기기