실습 설정 안내 및 요구사항
계정과 진행 상황을 보호하세요. 이 실습을 실행하려면 항상 시크릿 브라우저 창과 실습 사용자 인증 정보를 사용하세요.

PostgreSQL용 Cloud SQL 인스턴스 보호

실습 35분 universal_currency_alt 크레딧 1개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
이 콘텐츠는 아직 휴대기기에 최적화되지 않음
최상의 경험을 위해 데스크톱 컴퓨터에서 이메일로 전송된 링크를 사용하여 방문하세요.

GSP920

Google Cloud 사용자 주도형 실습 로고

개요

고객 관리 암호화 키(CMEK)를 사용하면 Cloud SQL의 저장 데이터에 자체 암호화 키를 사용할 수 있습니다. 고객 관리 암호화 키를 추가하면 Cloud SQL은 API 호출이 있을 때마다 해당 키를 사용하여 데이터에 액세스합니다.

이 실습에서는 PostgreSQL용 Cloud SQL 인스턴스를 보호하는 방법을 단계별로 안내합니다. 먼저 CMEK를 사용하여 새 Cloud SQL 인스턴스를 배포합니다. PostgreSQL용 Cloud SQL 인스턴스를 만든 후 해당 인스턴스에 대해 실행된 SQL 작업을 선택적으로 기록하고 추적하도록 pgAudit을 구성하고, 마지막으로 Cloud SQL IAM 데이터베이스 인증을 구성하고 테스트합니다.

실습할 내용

  • PostgreSQL용 Cloud SQL의 CMEK를 설정합니다.
  • PostgreSQL용 Cloud SQL 인스턴스에서 pgAudit을 사용 설정하고 구성합니다.
  • PostgreSQL용 Cloud SQL IAM 데이터베이스 인증을 구성합니다.

대상

이 실무형 실습의 내용은 PostgreSQL 데이터베이스 관리자에게 가장 적합합니다. 이 실습은 전문가가 PostgreSQL을 지원하기 위해 Google Cloud 리소스를 설정하고 구성하는 실무 경험을 쌓을 수 있도록 고안되었습니다.

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 창이 있습니다.

    • Google Cloud 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.

    {{{user_0.username | "Username"}}}

    실습 세부정보 창에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 세부정보 창에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

    중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  7. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의합니다.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
    • 무료 체험판을 신청하지 않습니다.

잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.

참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다. 탐색 메뉴 아이콘 및 검색창

작업 1. CMEK가 사용 설정된 PostgreSQL용 Cloud SQL 인스턴스 만들기

이 작업에서는 CMEK가 사용 설정된 PostgreSQL용 Cloud SQL 인스턴스를 만듭니다. 키가 없으면 데이터베이스를 관리할 수 없으니 반드시 키를 안전하게 보관해야 합니다.

Cloud SQL의 제품별 및 프로젝트별 서비스 계정 만들기

gcloud beta services identity create 명령어를 사용하여 Cloud SQL CMEK에 필요한 서비스 계정을 만들 수 있습니다.

  1. Cloud Shell에서 다음을 실행하여 서비스 계정을 만듭니다.
export PROJECT_ID=$(gcloud config list --format 'value(core.project)') gcloud beta services identity create \ --service=sqladmin.googleapis.com \ --project=$PROJECT_ID
  1. 메시지가 표시되면 승인 버튼을 클릭합니다.

이렇게 하면 이후 단계에서 CMEK에 바인딩할 서비스 계정이 생성됩니다.

Cloud Key Management Service 키링 및 키 만들기

이 섹션에서는 CMEK와 함께 사용할 Cloud KMS 키링과 키를 만듭니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 Cloud KMS 키링을 만듭니다.
export KMS_KEYRING_ID=cloud-sql-keyring export ZONE=$(gcloud compute instances list --filter="NAME=bastion-vm" --format=json | jq -r .[].zone | awk -F "/zones/" '{print $NF}') export REGION=${ZONE::-2} gcloud kms keyrings create $KMS_KEYRING_ID \ --location=$REGION
  1. Cloud Shell에서 다음 명령어를 실행하여 Cloud KMS 키를 만듭니다.
export KMS_KEY_ID=cloud-sql-key gcloud kms keys create $KMS_KEY_ID \ --location=$REGION \ --keyring=$KMS_KEYRING_ID \ --purpose=encryption
  1. Cloud Shell에서 다음 명령어를 실행하여 키를 서비스 계정에 바인딩합니다.
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} \ --format 'value(projectNumber)') gcloud kms keys add-iam-policy-binding $KMS_KEY_ID \ --location=$REGION \ --keyring=$KMS_KEYRING_ID \ --member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloud-sql.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

서비스 계정 이름은 이전 하위 작업에서 gcloud beta services identity create 명령어로 반환한 이름과 동일합니다.

CMEK가 사용 설정된 Cloud SQL 인스턴스 만들기

이 섹션에서는 CMEK가 사용 설정된 PostgreSQL용 Cloud SQL 인스턴스를 만듭니다. CMEK를 사용하여 데이터를 암호화하고 싶다면 기존 인스턴스를 패치하여 CMEK를 사용 설정할 수는 없다는 사실을 유념해야 합니다.

외부 개발 또는 애플리케이션 환경에서 Cloud SQL 인스턴스에 액세스하려면 공개 IP 주소로 Cloud SQL 인스턴스를 구성하고 해당 환경의 IP 주소를 허용 목록에 추가하여 액세스를 제어해야 합니다. 이렇게 하면 공개 인터페이스에 액세스할 수 있는 범위가 사용자가 지정한 IP 주소 범위로 제한됩니다.

실습의 Compute Engine VM 인스턴스를 개발 환경으로 사용하므로 해당 인스턴스의 허용 목록에 외부 IP 주소를 추가해야 합니다. 또한 실습 후반부에서 작업을 더 쉽게 완료할 수 있도록 Cloud Shell의 외부 IP 주소를 허용 목록에 추가해야 합니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 bastion-vm VM 인스턴스의 외부 IP 주소를 찾습니다.
export AUTHORIZED_IP=$(gcloud compute instances describe bastion-vm \ --zone=$ZONE \ --format 'value(networkInterfaces[0].accessConfigs.natIP)') echo Authorized IP: $AUTHORIZED_IP
  1. Cloud Shell에서 다음 명령어를 실행하여 Cloud Shell의 외부 IP 주소를 찾습니다.
export CLOUD_SHELL_IP=$(curl ifconfig.me) echo Cloud Shell IP: $CLOUD_SHELL_IP
  1. Cloud Shell에서 다음 명령어를 실행하여 PostgreSQL용 Cloud SQL 인스턴스를 만듭니다.
export KEY_NAME=$(gcloud kms keys describe $KMS_KEY_ID \ --keyring=$KMS_KEYRING_ID --location=$REGION \ --format 'value(name)') export CLOUDSQL_INSTANCE=postgres-orders gcloud sql instances create $CLOUDSQL_INSTANCE \ --project=$PROJECT_ID \ --authorized-networks=${AUTHORIZED_IP}/32,$CLOUD_SHELL_IP/32 \ --disk-encryption-key=$KEY_NAME \ --database-version=POSTGRES_13 \ --cpu=1 \ --memory=3840MB \ --region=$REGION \ --root-password=supersecret!
  1. 명령어를 입력한 후 메시지가 표시되면 'y'를 입력합니다.
CMEK가 사용 설정된 Cloud SQL 인스턴스 만들기

작업 2. PostgreSQL용 Cloud SQL 데이터베이스에서 pgAudit 사용 설정 및 구성

이 작업에서는 모든 유형의 데이터베이스 활동 로깅을 세부적으로 제어할 수 있는 pgAudit 데이터베이스 확장 프로그램을 사용 설정하고 구성합니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 pgAudit 데이터베이스 플래그를 Cloud SQL 인스턴스에 추가합니다.
gcloud sql instances patch $CLOUDSQL_INSTANCE \ --database-flags cloudsql.enable_pgaudit=on,pgaudit.log=all
  1. 확인하고 계속하라는 메시지가 표시되면 'y'를 입력합니다.
참고: 패치 명령어가 완료될 때까지 기다린 후 계속 진행하세요. Patching Cloud SQL instance...done이라는 메시지가 표시되면 다음 단계를 진행해도 됩니다.
  1. Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 SQL을 클릭합니다.

  2. postgres-orders라는 이름의 Cloud SQL 인스턴스를 클릭합니다.

  3. Cloud SQL 개요 패널의 상단 메뉴에서 다시 시작을 클릭하여 1단계에서 패치를 실행한 이후로 인스턴스를 다시 시작합니다.

메시지가 다시 표시되면 팝업 대화상자에서 다시 시작을 다시 클릭합니다.

참고: PostgreSQL용 Cloud SQL 인스턴스를 다시 시작하는 데 몇 분 정도 걸릴 수 있습니다. 인스턴스가 다시 시작되었다는 메시지(Restarted postgres-orders)가 표시되면 다음 단계를 진행해도 됩니다.
  1. Cloud 콘솔의 이 인스턴스에 연결 섹션에서 Cloud Shell 열기를 클릭합니다.
참고: 오류 메시지가 표시되고 연결할 수 없는 경우 다시 시작한 후에 몇 분 정도 기다리세요. 인스턴스에 다시 액세스하게 되면 6단계를 반복합니다.

인스턴스에 연결하는 명령어가 Cloud Shell에 자동으로 채워집니다.

  1. 해당 명령어를 그대로 실행하고 메시지가 표시되면 비밀번호 supersecret!을 입력합니다.

Cloud Shell에서 psql 세션이 시작됩니다.

  1. psql에서 다음 명령어를 실행하여 orders 데이터베이스를 만들고 pgAudit 확장 프로그램을 사용 설정하여 모든 읽기 및 쓰기를 로깅합니다.
CREATE DATABASE orders; \c orders;
  1. 비밀번호 supersecret!을 다시 입력합니다.

  2. psql에서 다음 명령어를 실행하여 데이터베이스 확장 프로그램을 만들고 구성합니다.

CREATE EXTENSION pgaudit; ALTER DATABASE orders SET pgaudit.log = 'read,write';

Cloud 콘솔에서 감사 로깅 사용 설정

이 섹션에서는 Cloud 콘솔에서 감사 로깅을 사용 설정합니다.

  1. Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 IAM 및 관리자 > 감사 로그를 클릭합니다.
참고: 페이지 상단에 you don't have permission to view inherited audit logs configuration data for one or more parent resources라는 메시지가 표시되면 메시지를 무시하고 다음 단계를 진행해도 됩니다.
  1. 데이터 액세스 감사 로그 구성필터 상자에 Cloud SQL을 입력하고 드롭다운 목록에서 항목을 선택합니다.

  2. 왼쪽에서 Cloud SQL 체크박스를 사용 설정한 다음 오른쪽의 정보 패널에서 다음 체크박스를 사용 설정합니다.

  • 관리자 읽기
  • 데이터 읽기
  • 데이터 쓰기
  1. 정보 패널에서 저장을 클릭합니다.

PostgreSQL용 Cloud SQL에서 데이터베이스 채우기

이 섹션에서는 제공된 데이터로 orders 데이터베이스를 채웁니다.

  1. Cloud Shell 제목 표시줄에서 + 아이콘을 클릭하여 Cloud Shell에서 새 탭을 엽니다.

  2. 새 탭에서 다음을 실행하여 데이터와 데이터베이스 채우기 스크립트를 다운로드합니다.

export SOURCE_BUCKET=gs://spls/gsp920 gsutil -m cp ${SOURCE_BUCKET}/create_orders_db.sql . gsutil -m cp ${SOURCE_BUCKET}/DDL/distribution_centers_data.csv . gsutil -m cp ${SOURCE_BUCKET}/DDL/inventory_items_data.csv . gsutil -m cp ${SOURCE_BUCKET}/DDL/order_items_data.csv . gsutil -m cp ${SOURCE_BUCKET}/DDL/products_data.csv . gsutil -m cp ${SOURCE_BUCKET}/DDL/users_data.csv .
  1. 새 탭에서 다음을 실행하여 데이터베이스를 만들고 채웁니다.
export CLOUDSQL_INSTANCE=postgres-orders export POSTGRESQL_IP=$(gcloud sql instances describe $CLOUDSQL_INSTANCE --format="value(ipAddresses[0].ipAddress)") export PGPASSWORD=supersecret! psql "sslmode=disable user=postgres hostaddr=${POSTGRESQL_IP}" \ -c "\i create_orders_db.sql"
  1. 새 탭에서 터미널 세션을 종료합니다.
exit
  1. 원래 Cloud Shell 탭의 psql 세션으로 돌아가서 다음을 실행하여 특정 관계(예: order_items 테이블)의 모든 SELECT 작업을 추가로 로깅합니다.
CREATE ROLE auditor WITH NOLOGIN; ALTER DATABASE orders SET pgaudit.role = 'auditor'; GRANT SELECT ON order_items TO auditor;
  1. 아래의 첫 번째 SELECT 쿼리를 실행합니다.
SELECT users.id AS users_id, users.first_name AS users_first_name, users.last_name AS users_last_name, COUNT(DISTINCT order_items.order_id ) AS order_items_order_count, COALESCE(SUM(order_items.sale_price ), 0) AS order_items_total_revenue FROM order_items LEFT JOIN users ON order_items.user_id = users.id GROUP BY 1, 2, 3 ORDER BY 4 DESC LIMIT 500; SELECT products.id AS products_id, products.name AS products_name, products.sku AS products_sku, products.cost AS products_cost, products.retail_price AS products_retail_price, products.distribution_center_id AS products_distribution_center_id, COUNT(DISTINCT order_items.order_id ) AS order_items_order_count, COALESCE(SUM(order_items.sale_price ), 0) AS order_items_total_revenue FROM order_items LEFT JOIN inventory_items ON order_items.inventory_item_id = inventory_items.id LEFT JOIN products ON inventory_items.product_id = products.id GROUP BY 1, 2, 3, 4, 5, 6 ORDER BY 7 DESC LIMIT 500; SELECT order_items.order_id AS order_id, distribution_centers.id AS distribution_centers_id, distribution_centers.name AS distribution_centers_name, distribution_centers.latitude AS distribution_centers_latitude, distribution_centers.longitude AS distribution_centers_longitude FROM order_items LEFT JOIN inventory_items ON order_items.inventory_item_id = inventory_items.id LEFT JOIN products ON inventory_items.product_id = products.id LEFT JOIN distribution_centers ON products.distribution_center_id = distribution_centers.id GROUP BY 1, 2, 3, 4, 5 ORDER BY 2 LIMIT 500;
  1. 출력은 길이가 500행이므로 q를 입력하여 결과를 닫고 orders=> 프롬프트로 돌아가도 됩니다.

  2. 코드 블록의 다른 두 쿼리 탭에 대해 5~6단계를 반복합니다.

  3. 다음을 실행하여 psql을 종료합니다.

\q

pgAudit 로그 보기

이 단계에서는 pgAudit 로그에서 데이터베이스 업데이트 및 쿼리의 로깅을 확인합니다.

  1. Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 모든 제품 보기를 클릭합니다. 모니터링 가능성에서 로깅을 클릭하여 로그 탐색기 페이지를 엽니다.

  2. 로그 탐색기쿼리 탭에 다음을 붙여넣고 쿼리 실행을 클릭합니다.

resource.type="cloudsql_database" logName="projects/{{{project_0.project_id|(GCP Project)}}}/logs/cloudaudit.googleapis.com%2Fdata_access" protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
  1. 표시된 히스토그램에서 DDL 삽입과 관련된 감사 활동과 이전에 실행한 SELECT 쿼리를 확인할 수 있습니다.

막대 7개가 있는 히스토그램 예

  1. 히스토그램의 마지막 막대를 클릭합니다. 이 막대는 실행한 SELECT 쿼리를 나타냅니다.

히스토그램 아래의 쿼리 결과 패널에 로그 항목이 나열됩니다.

  1. 로그 항목을 펼치면 protoPayload.request 아래에 SELECT 쿼리가 표시됩니다.
PostgreSQL용 Cloud SQL 데이터베이스에서 pgAudit 사용 설정 및 구성

작업 3. Cloud SQL IAM 데이터베이스 인증 구성

이 작업에서는 Cloud SQL IAM 데이터베이스 인증을 구성합니다. 지금까지 실행한 모든 데이터베이스 액세스 및 업데이트 작업은 기본 제공 PostgreSQL 사용자 계정을 사용했습니다. Cloud IAM 계정을 사용하여 PostgreSQL용 Cloud SQL 사용자를 만들 수도 있습니다. 데이터베이스 사용자는 기본 제공 데이터베이스 계정을 사용하는 대신 Cloud IAM을 사용하여 Cloud SQL을 인증할 수 있으며, 이러한 사용자에게 데이터베이스 수준의 세부적인 권한을 부여할 수 있습니다.

이 작업에서는 실습 사용자 계정을 Cloud SQL IAM 사용자로 구성하고, postgres 관리자 계정을 사용하여 해당 사용자에게 orders.order_items 데이터베이스 테이블에 대한 액세스 권한을 부여한 다음, psql 명령줄 유틸리티를 사용하여 명령줄에서 orders.order_items 데이터베이스 테이블에 대한 액세스를 테스트합니다.

이 작업에서 사용하는 인증 프로세스는 PostgreSQL용 Cloud SQL의 IAM 인증 문서에 자세히 설명되어 있습니다.

Cloud SQL IAM 인증이 구성되기 전에 Cloud IAM 사용자를 사용하여 데이터베이스 액세스를 테스트합니다.

Cloud SQL IAM 인증을 사용 설정하기 전에 Cloud IAM 사용자를 사용하여 데이터베이스에 액세스를 시도하여 Cloud IAM 사용자가 처음에는 데이터에 액세스할 수 없는지 확인합니다. 이 연결 시도가 실패했으면 이제 문제를 해결하기 위해 다음 섹션으로 진행합니다.

  • Cloud Shell에서 실습 학습자 계정을 사용자 이름으로 사용하여 orders 데이터베이스에 대한 액세스를 테스트합니다.
export USERNAME=$(gcloud config list --format="value(core.account)") export CLOUDSQL_INSTANCE=postgres-orders export POSTGRESQL_IP=$(gcloud sql instances describe $CLOUDSQL_INSTANCE --format="value(ipAddresses[0].ipAddress)") export PGPASSWORD=$(gcloud auth print-access-token) psql --host=$POSTGRESQL_IP $USERNAME --dbname=orders

Cloud SQL IAM 사용자가 아직 생성되지 않았으므로 이 연결 시도는 실패하며 다음과 비슷한 인증 실패 메시지가 표시됩니다.

psql --host=$POSTGRESQL_IP $USERNAME --dbname=orders psql: error: connection to server at "35.226.251.234", port 5432 failed: FATAL: password authentication failed for user "student-01-22fa974575e4@qwiklabs.net" connection to server at "35.226.251.234", port 5432 failed: FATAL: password authentication failed for user "student-01-22fa974575e4@qwiklabs.net"

Cloud SQL IAM 데이터베이스 인증은 OAuth 2.0 액세스 토큰을 Cloud IAM 사용자 비밀번호로 사용합니다. 이 토큰은 수명이 짧고 1시간 동안만 유효하므로 인증이 필요할 때마다 토큰을 재생성해야 합니다. 액세스 토큰은 항상 PGPASSWORD 환경 변수를 사용하여 psql 명령어로 전달되어야 합니다. psql 비밀번호 파라미터의 버퍼가 너무 작아 OAuth 2.0 토큰 문자열을 저장할 수 없기 때문입니다.

Cloud SQL IAM 사용자 만들기

이 섹션에서는 Cloud SQL IAM 사용자를 만들고, Cloud SQL IAM 사용자 인증이 사용 설정되었는지 확인합니다.

  1. Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 SQL을 클릭합니다.

  2. postgres-orders라는 이름의 Cloud SQL 인스턴스를 클릭합니다.

오른쪽의 구성 패널에서 데이터베이스 플래그 및 파라미터 목록에 pgAudit.logcloudsql.enable_pgaudit만 포함되어 있는지 확인합니다.

  1. 기본 인스턴스SQL 메뉴(왼쪽 패널)에서 사용자를 클릭하여 사용자 패널을 엽니다.

  2. 사용자 계정 추가를 클릭합니다.

  3. Cloud IAM을 선택합니다.

  4. 주 구성원 상자에 실습 학습자 이름()을 입력합니다.

  5. 추가를 클릭합니다.

새 사용자가 추가될 때까지 기다립니다.

인스턴스의 기본 개요 페이지 오른쪽의 구성 패널에서 cloudsql.iam_authentication데이터베이스 플래그 및 파라미터 목록에 추가된 것을 확인할 수 있습니다.

Cloud IAM 사용자에게 Cloud SQL 데이터베이스 테이블에 대한 액세스 권한 부여

이제 기본 제공 postgres 관리자 계정을 사용하여 postgres-orders 인스턴스에 연결하고 Cloud IAM 사용자에게 orders.order_items 테이블에 대한 액세스 권한을 부여합니다.

  1. 인스턴스의 기본 개요 페이지에 있는 이 인스턴스에 연결 섹션에서 Cloud Shell 열기를 클릭합니다.

인스턴스에 연결하는 명령어가 Cloud Shell에 자동으로 채워집니다.

  1. 해당 명령어를 그대로 실행하고 메시지가 표시되면 비밀번호 supersecret!을 입력합니다.

  2. 다음 SQL 명령어를 입력하여 orders 데이터베이스로 전환합니다.

\c orders

비밀번호를 입력하라는 메시지가 표시되면 supersecret!을 다시 입력합니다.

  1. 다음 SQL 명령어를 입력하여 실습 사용자에게 order_items 테이블에 대한 모든 권한을 부여합니다. 실습의 Cloud IAM 사용자 이름이 이 쿼리에 자동으로 삽입되어 있습니다.
GRANT ALL PRIVILEGES ON TABLE order_items TO "{{{user_0.username|[IAM Username]}}}"; \q

Cloud SQL IAM 인증이 구성된 후 Cloud IAM 사용자를 사용하여 데이터베이스 액세스를 테스트합니다.

Cloud SQL IAM 인증이 사용 설정된 후 Cloud IAM 사용자를 사용해 데이터베이스에 액세스하는 시도를 반복하여 이제 Cloud IAM 사용자가 데이터에 액세스할 수 있는지 확인합니다.

이제 기본 제공 postgres 사용자 대신 Cloud IAM 사용자로 데이터베이스에 대한 액세스를 다시 테스트할 수 있습니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 Cloud IAM 데이터베이스 사용자로 데이터베이스에 연결합니다.
export PGPASSWORD=$(gcloud auth print-access-token) psql --host=$POSTGRESQL_IP $USERNAME --dbname=orders

연결에 성공했습니다. 지금은 Cloud IAM 사용자 인증을 사용해 인스턴스에 연결된 상태입니다.

  1. 다음 쿼리를 실행하여 액세스 권한을 테스트합니다.
SELECT COUNT(*) FROM order_items;

이제 성공적인 결과가 반환됩니다.

orders=> SELECT COUNT(*) FROM order_items; count -------- 198553 (1 row)
  1. 다음 쿼리를 실행하여 다른 테이블 중 하나에 대한 액세스 권한이 없는지 확인합니다.
SELECT COUNT(*) FROM users;

이 쿼리는 성공적인 결과를 반환하지 않습니다.

orders=> SELECT COUNT(*) FROM users; ERROR: permission denied for table users Cloud SQL IAM 데이터베이스 인증 구성

수고하셨습니다

이 실습에서는 고객 관리 암호화 키를 사용하여 PostgreSQL용 Cloud SQL의 저장 데이터를 보호하고, pgAudit을 사용 설정하고, Cloud SQL IAM 데이터베이스 사용자 인증을 구성했습니다.

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2025년 9월 3일

실습 최종 테스트: 2025년 7월 2일

Copyright 2026 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하는 가장 좋은 방법은 시크릿 모드 또는 시크릿 브라우저 창을 사용하는 것입니다. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.