직원 ID 제휴 인증

이 페이지에서는 Cloud SQL에서 직원 ID 제휴(서드 파티 IAM 인증이라고도 함)를 구성하고 사용하는 방법을 설명합니다. 직원 ID 제휴를 사용하면 Google 계정 없이 Microsoft Active Directory 또는 Okta와 같은 기존 ID 공급업체 (IdP)를 사용하여 Cloud SQL 인스턴스에 액세스할 수 있습니다.

직원 ID 제휴 사용의 주요 이점은 다음과 같습니다.

  • 오버헤드 감소: 도메인을 인증하거나 ID를 Cloud ID에 동기화할 필요가 없습니다.
  • 보안 강화: 기존 엔터프라이즈 IdP를 통해 데이터베이스 액세스를 중앙에서 관리합니다.
  • 확장 용이성: 복잡한 ID 관리 요구사항이 있는 대규모 조직에 적합합니다.

직원 ID 제휴에 대한 자세한 설명은 직원 ID 제휴 개요를 참고하세요.

작동 방식

직원 ID 제휴를 사용하면 사용자가 외부 ID를 사용하여 Google Cloud 에 인증할 수 있습니다. Cloud SQL의 경우 이는 워크포스 풀의 주 구성원이 PostgreSQL용 Cloud SQL 인스턴스에 연결할 수 있음을 의미합니다.

Cloud SQL은 CLOUD_IAM_WORKFORCE_IDENTITY 사용자 유형을 통해 직원 ID 제휴를 지원합니다. 액세스 권한을 부여하기 위해 Cloud SQL은 로그인 중에 직원 사용자 인증 정보와 프로젝트 수준 IAM 권한을 검증합니다.

시작하기 전에

직원 ID 제휴 데이터베이스 인증을 구성하기 전에 다음 기본 요건을 충족하는지 확인하세요.

역할 및 권한

직원 ID 제휴 인증을 구성하고 사용하는 데 필요한 권한을 얻으려면 관리자에게 조직에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

직원 ID 제휴 인증 구성

다음 섹션에서는 직원 ID 제휴 인증을 사용하도록 인스턴스를 구성하는 방법을 설명합니다.

인스턴스에서 IAM 인증 사용 설정

IAM 인증을 사용 설정하려면 cloudsql.iam_authentication 플래그를 on로 설정합니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
  3. 수정을 클릭합니다.
  4. 인스턴스 맞춤설정 섹션을 펼칩니다.
  5. 연결 섹션을 펼칩니다.
  6. 보안에서 Cloud SQL IAM 인증 사용 설정 체크박스를 선택합니다.
  7. 저장을 클릭합니다.

gcloud

다음 명령어를 사용하여 IAM 인증을 사용 설정합니다.

gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.iam_authentication=on
  

INSTANCE_NAME을 인스턴스 이름으로 바꿉니다.

Terraform

google_sql_database_instance 리소스에 database_flags 블록을 추가합니다.

resource "google_sql_database_instance" "instance" {
  name             = "INSTANCE_NAME"
  database_version = "POSTGRES_15"
  region           = "REGION"

  settings {
    tier = "db-f1-micro"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
}
  

다음을 바꿉니다.

  • INSTANCE_NAME: 인스턴스 이름입니다.
  • REGION: 인스턴스가 있는 리전입니다.

REST v1

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION_ID: 위치 ID입니다.
  • INSTANCE_ID: 원하는 인스턴스 ID입니다.
  • REGION: 원하는 리전입니다.
  • DATABASE_VERSION: 데이터베이스 버전의 열거형 문자열입니다. 예를 들면 POSTGRES_12입니다.
  • PASSWORD: 루트 사용자의 비밀번호입니다.
  • MACHINE_TYPE : db-custom-[CPUS]-[MEMORY_MBS]와 같은 머신(등급) 유형의 열거형 문자열입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances

JSON 요청 본문:

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql.iam_authentication",
        "value": "on"
      }
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • LOCATION_ID: 위치 ID입니다.
  • INSTANCE_ID: 원하는 인스턴스 ID입니다.
  • REGION: 원하는 리전입니다.
  • DATABASE_VERSION: 데이터베이스 버전의 열거형 문자열입니다. 예를 들면 POSTGRES_12입니다.
  • PASSWORD: 루트 사용자의 비밀번호입니다.
  • MACHINE_TYPE : db-custom-[CPUS]-[MEMORY_MBS]와 같은 머신(등급) 유형의 열거형 문자열입니다.

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances

JSON 요청 본문:

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql.iam_authentication",
        "value": "on"
      }
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

인스턴스에 직원 ID 사용자 추가

CLOUD_IAM_WORKFORCE_IDENTITY 유형을 사용하여 인스턴스에 외부 주 구성원을 추가합니다.

사용하는 사용자 ID가 직원 ID 공급업체의 속성 매핑에서 제공하는 값과 일치하는지 확인합니다. 일반적으로 이메일 주소(예: cruz@example.com)로 구성됩니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
  3. SQL 탐색 메뉴에서 사용자를 선택합니다.
  4. 사용자 계정 추가를 클릭합니다. 인스턴스에 사용자 계정 추가 INSTANCE_NAME 창이 열립니다.
  5. 직원 ID 제휴를 선택합니다.
  6. Workforce user 필드에 추가할 사용자의 사용자 ID를 입력합니다.
  7. 추가를 클릭합니다.

gcloud

다음 명령어를 실행하여 사용자를 만듭니다.

gcloud sql users create USER_ID \
    --instance=INSTANCE_NAME \
    --type=CLOUD_IAM_WORKFORCE_IDENTITY
  

다음을 바꿉니다.

  • USER_ID: 추가하려는 사용자의 사용자 ID입니다(예: cruz@example.com).
  • INSTANCE_NAME: 인스턴스 이름입니다.

Terraform

google_sql_user 리소스를 사용하여 직원 ID 사용자를 정의합니다.

resource "google_sql_user" "workforce_user" {
  name     = "USER_ID" # e.g., "cruz@example.com"
  instance = "INSTANCE_NAME"
  type     = "CLOUD_IAM_WORKFORCE_IDENTITY"
}
  

다음을 바꿉니다.

  • USER_ID: 추가하려는 사용자의 사용자 ID입니다(예: cruz@example.com).
  • INSTANCE_NAME: 인스턴스 이름입니다.

REST v1

사용자 계정 만들기

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 사용자를 추가할 인스턴스의 인스턴스 ID
  • USERNAME: 사용자의 이메일 주소

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users

JSON 요청 본문:

{
  "name": "USERNAME",
  "type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

사용자 계정 만들기

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 사용자를 추가할 인스턴스의 인스턴스 ID
  • USERNAME: 사용자의 이메일 주소

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

JSON 요청 본문:

{
  "name": "USERNAME",
  "type": "CLOUD_IAM_WORKFORCE_IDENTITY"
  }

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

인스턴스 사용자 역할 부여

직원 ID 주 구성원 또는 전체 풀에 roles/cloudsql.instanceUser 역할을 부여합니다.

콘솔

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    IAM으로 이동

  2. 액세스 권한 부여를 클릭합니다.
  3. 새 주 구성원 필드에서 다음 중 하나를 수행합니다.

    • 개별 주 구성원에게 액세스 권한을 부여하려면 직원 ID를 principal로 입력합니다.

      principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID

    • 전체 풀에 대한 액세스 권한을 부여하려면 직원 풀을 principalSet로 입력합니다.

      principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*

  4. 역할 목록에서 Cloud SQL > Cloud SQL 인스턴스 사용자를 선택합니다.
  5. 선택사항: Cloud SQL 인증 프록시 또는 Cloud SQL 언어 커넥터를 사용하여 연결하려면 역할 추가를 클릭한 다음 Cloud SQL > Cloud SQL 클라이언트를 선택합니다.
  6. 저장을 클릭합니다.

gcloud

개별 사용자에게 액세스 권한을 부여하려면 gcloud projects add-iam-policy-binding 명령어를 사용합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \
    --role="roles/cloudsql.instanceUser"
  

다음을 바꿉니다.

  • USER_ID: 추가하려는 사용자의 사용자 ID입니다(예: cruz@example.com).
  • POOL_ID: 직원 풀의 ID입니다.
  • PROJECT_ID: 인스턴스가 포함된 프로젝트의 식별자입니다.

전체 직원 풀에 대한 액세스 권한을 부여하려면 principalSet 구성원 형식과 함께 gcloud projects add-iam-policy-binding 명령어를 사용합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \
    --role="roles/cloudsql.instanceUser"
  

Terraform

google_project_iam_member 리소스를 사용하여 워크포스 주 구성원에게 역할을 부여합니다.

resource "google_project_iam_member" "workforce_user_iam" {
  project = "PROJECT_ID"
  role    = "roles/cloudsql.instanceUser"
  member  = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID"
}
  

다음을 바꿉니다.

  • USER_ID: 추가하려는 사용자의 사용자 ID입니다(예: cruz@example.com).
  • POOL_ID: 직원 풀의 ID입니다.
  • PROJECT_ID: 인스턴스가 포함된 프로젝트의 식별자입니다.

REST

API를 사용하여 IAM 정책을 부여하려면 getIamPolicy 메서드를 사용하여 프로젝트의 IAM 정책을 검색합니다. 그런 다음 새 바인딩을 정책에 추가하고 마지막으로 setIamPolicy 메서드를 사용하여 업데이트된 정책을 적용합니다.

다음은 IAM 정책에 추가할 바인딩 페이로드의 예입니다.

{
  "bindings": [
    {
      "role": "roles/cloudsql.instanceUser",
      "members": [
        "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID"
      ]
    }
  ]
}
  

다음을 바꿉니다.

  • USER_ID: 추가하려는 사용자의 사용자 ID입니다(예: cruz@example.com).
  • POOL_ID: 직원 풀의 ID입니다.

데이터베이스 권한 부여

직원 ID 사용자를 만들 때 부여할 데이터베이스 역할을 지정하거나 데이터베이스 내에서 데이터베이스 권한을 수동으로 부여할 수 있습니다.

예를 들어 권한을 수동으로 부여하려면 다음 단계를 따르세요.

GRANT SELECT ON TABLE_NAME TO "USER_ID";

다음을 바꿉니다.

  • TABLE_NAME: 데이터베이스 테이블의 이름입니다.
  • USER_ID 직원 ID 데이터베이스 사용자의 사용자 ID입니다(예: cruz@example.com).

인스턴스에 연결

이제 gcloud CLI 또는 Cloud SQL 인증 프록시를 사용하여 인스턴스에 연결할 수 있습니다.

gcloud CLI 사용

로그인 토큰을 생성하려면 먼저 직원 ID로 인증해야 합니다.

  1. 직원 ID 제휴를 사용하여 인증하려면 --cred-file 플래그와 함께 gcloud auth login 명령어를 사용합니다.

    gcloud auth login --cred-file=CONFIGURATION_FILE
    

    CONFIGURATION_FILE를 직원 ID 공급업체에 대해 생성된 구성 파일의 경로로 바꿉니다.

  2. 생성된 토큰을 사용하여 연결하려면 다음 명령어를 실행합니다.

    bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"

    다음을 바꿉니다.

  3. INSTANCE_IP: Cloud SQL 인스턴스의 IP 주소

  4. USER_ID: 직원 사용자의 사용자 ID입니다(예: cruz@example.com).

  5. DB_NAME: 연결할 데이터베이스의 이름입니다.

Cloud SQL 인증 프록시 사용

--auto-iam-authn 플래그로 프록시를 시작합니다.

./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn

프록시에 대한 자세한 내용은 Cloud SQL 인증 프록시 정보를 참고하세요.

제한 및 한도

  • 풀 간 중복 사용자 ID: Cloud SQL은 서로 다른 직원 풀 또는 ID 공급업체에서 동일한 사용자 ID를 가진 주체를 구분할 수 없습니다. 여러 직원 풀 또는 제공업체를 사용하는 경우 IAM 정책을 사용하여 서로 다른 풀 또는 제공업체의 중복된 주제 이름에 roles/cloudsql.instanceUser 로그인 권한을 부여하지 않도록 해야 합니다. 이렇게 하면 동일한 사용자 ID를 사용하는 다른 풀이나 제공업체에서 무단으로 액세스하는 것을 방지할 수 있습니다.
  • 로그인 할당량: 각 인스턴스의 분당 로그인 할당량은 12,000이며, 여기에는 성공한 로그인과 실패한 로그인 시도가 모두 포함됩니다. 할당량을 초과하면 로그인을 일시적으로 사용할 수 없습니다. 자주 로그인하지 말고 승인된 네트워크를 사용하여 로그인을 제한하는 것이 좋습니다.

다음 단계