Use APIs to Work with Cloud Storage

목록
- Cloud Storage: Qwik Start - CLI/SDK
- APIs Explorer: Cloud Storage
- Introduction to APIs in Google Cloud
- Use APIs to Work with Cloud Storage: Challenge Lab ⬅️ 오늘의 Lab!
🔗 https://developers.google.com/oauthplayground/

➡️ Cloud Storage API V1 선택 > https://www.googleapis.com/auth/devstorage.full_control 범위 선택 > Authorize APIs 버튼 클릭 > 실습 계정으로 로그인 진행 후 권한 승인

단계 설명
1)
Exchange authorization code for tokens버튼 클릭
2~3) Step 3 단계로 넘어갔을 경우, Step 2단계 클릭
4)Access Token의 값 복사
# Token 입력
export OAUTH2_TOKEN=<Access Token>
# 확인 (Access Token과 동일한 값이 출력되면 정상!)
echo $OAUTH2_TOKEN
export PROJECT_ID=$(gcloud config get-value project)
# 파일 생성
nano values.json
# 내용
{
"name": "filled in at lab start-bucket-1", # 실습용 계정마다 다름
"location": "us",
"storageClass": "multi_regional"
}
# request
curl -X POST --data-binary @values.json \ #json 파일명 다르게 했으면 수정 필요
-H "Authorization: Bearer $OAUTH2_TOKEN" \
-H "Content-Type: application/json" \
"https://www.googleapis.com/storage/v1/b?project=$PROJECT_ID"
# response
{
"kind": "storage#bucket",
"selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
"id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
"name": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
"projectNumber": "279638863494",
"generation": "1777435406727446572",
"metageneration": "1",
"location": "US",
"storageClass": "MULTI_REGIONAL",
"etag": "CAE=",
"timeCreated": "2026-04-29T04:03:27.263Z",
"updated": "2026-04-29T04:03:27.263Z",
"softDeletePolicy": {
"retentionDurationSeconds": "604800",
"effectiveTime": "2026-04-29T04:03:27.263Z"
},
"iamConfiguration": {
"bucketPolicyOnly": {
"enabled": false
},
"uniformBucketLevelAccess": {
"enabled": false
},
"publicAccessPrevention": "inherited"
},
"locationType": "multi-region",
"rpo": "DEFAULT"
}
# 내용 수정
nano values.json
# 내용
{
"name": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2", # 기존 버킷명과 다른 버킷명 설정
"location": "us",
"storageClass": "multi_regional"
}
# 버킷 만들기 request
curl -X POST --data-binary @values.json \ #json 파일명 다르면 수정 필요
-H "Authorization: Bearer $OAUTH2_TOKEN" \
-H "Content-Type: application/json" \
"https://www.googleapis.com/storage/v1/b?project=$PROJECT_ID"
# 버킷 생성 완료 response
{
"kind": "storage#bucket",
"selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
"id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
"name": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
"projectNumber": "279638863494",
"generation": "1777435436896653145",
"metageneration": "1",
"location": "US",
"storageClass": "MULTI_REGIONAL",
"etag": "CAE=",
"timeCreated": "2026-04-29T04:03:57.382Z",
"updated": "2026-04-29T04:03:57.382Z",
"softDeletePolicy": {
"retentionDurationSeconds": "604800",
"effectiveTime": "2026-04-29T04:03:57.382Z"
},
"iamConfiguration": {
"bucketPolicyOnly": {
"enabled": false
},
"uniformBucketLevelAccess": {
"enabled": false
},
"publicAccessPrevention": "inherited"
},
"locationType": "multi-region",
"rpo": "DEFAULT"
}
✅ 만들어진 버킷은 Cloud Storage > Buckets 에서 확인 가능
참고✨
이번 실습에서 이미지 파일명은
image로 하였다.

➡️ Cloud Shell 세션의 우측 상단의 점 3개 아이콘 클릭 > Upload > Choose Files 클릭 > image.png 선택
# request
realpath image.png
# response
/home/student_03_7fb59a769f17/image.png
export OBJECT=/home/student_03_7fb59a769f17/image.png
#uploadType의 name은 업로드 시 저장될 파일명을 작성
curl -X POST --data-binary @$OBJECT \
-H "Authorization: Bearer $OAUTH2_TOKEN" \
-H "Content-Type: image/png" \
"https://www.googleapis.com/upload/storage/v1/b/$BUCKET_NAME/o?uploadType=media&name=image"
# response
{
"kind": "storage#object",
"id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1/image/1777435662425101",
"selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image",
"mediaLink": "https://www.googleapis.com/download/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image?generation=1777435662425101&alt=media",
"name": "image", #파일명
"bucket": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
"generation": "1777435662425101",
"metageneration": "1",
"contentType": "image/png",
"storageClass": "MULTI_REGIONAL",
"size": "908993",
"md5Hash": "VHwnW4PU6MHlHHwS8Vuuqg==",
"crc32c": "uGXH4A==",
"etag": "CI24lOqXkpQDEAE=",
"timeCreated": "2026-04-29T04:07:42.491Z",
"updated": "2026-04-29T04:07:42.491Z",
"timeStorageClassUpdated": "2026-04-29T04:07:42.491Z",
"timeFinalized": "2026-04-29T04:07:42.491Z"
}
#버킷 내 복사하려는 파일명이 url에 적혀 있으므로 자신의 파일명에 맞춰 변경 필요
curl -X POST \
-H "Authorization: Bearer $OAUTH2_TOKEN" \
-H "Content-Type: application/json" \
-H "Content-Length: 0" \
"https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image/rewriteTo/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2/o/image"
# response
{
"kind": "storage#rewriteResponse",
"totalBytesRewritten": "908993",
"objectSize": "908993",
"done": true,
"resource": {
"kind": "storage#object",
"id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2/image/1777435834349555",
"selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2/o/image",
"mediaLink": "https://www.googleapis.com/download/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-2/o/image?generation=1777435834349555&alt=media",
"name": "image",
"bucket": "qwiklabs-gcp-00-1a7ab8832a47-bucket-2",
"generation": "1777435834349555",
"metageneration": "1",
"contentType": "image/png",
"storageClass": "MULTI_REGIONAL",
"size": "908993",
"md5Hash": "VHwnW4PU6MHlHHwS8Vuuqg==",
"crc32c": "uGXH4A==",
"etag": "CPPvkbyYkpQDEAE=",
"timeCreated": "2026-04-29T04:10:34.421Z",
"updated": "2026-04-29T04:10:34.421Z",
"timeStorageClassUpdated": "2026-04-29T04:10:34.421Z",
"timeFinalized": "2026-04-29T04:10:34.421Z",
"owner": {
"entity": "user-student-03-7fb59a769f17@qwiklabs.net"
}
}
}
# 파일 생성
nano acl.json
# 파일 내용
{
"entity": "allUsers",
"role": "READER"
}
# url에 이미지 파일 경로가 있으므로 파일명 확인하여 수정하기!
curl -X POST --data-binary @acl.json \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image/acl"
# response
{
"kind": "storage#objectAccessControl",
"object": "image",
"generation": "1777435662425101",
"id": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1/image/1777435662425101/allUsers",
"selfLink": "https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image/acl/allUsers",
"bucket": "qwiklabs-gcp-00-1a7ab8832a47-bucket-1",
"entity": "allUsers",
"role": "READER",
"etag": "CI24lOqXkpQDEAM="
}
# 파일명 수정 필요
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1/o/image"
# 버킷명 수정 필요
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://www.googleapis.com/storage/v1/b/qwiklabs-gcp-00-1a7ab8832a47-bucket-1"