Cloud SQL 보안 비밀의 자동 순환 구성

이 페이지에서는 Secret Manager에서 Cloud SQL 데이터베이스 사용자 인증 정보의 자동 순환을 구성하는 방법을 설명합니다.

시작하기 전에

  • Cloud SQL 인스턴스에서 지원되는 데이터베이스 엔진 버전(예: PostgreSQL 또는 SQL Server)을 사용하는지 확인합니다.
  • 리전 보안 비밀을 사용하고 있는지 확인합니다. Cloud SQL 사용자 인증 정보의 자동 순환은 Secret Manager의 리전 보안 비밀에만 사용할 수 있습니다. 전역 보안 비밀은 이 기능을 지원하지 않습니다.
  • 기존 Cloud SQL 인스턴스와 데이터베이스 사용자가 있어야 합니다. 자세한 내용은 인스턴스 만들기 및 사용자 만들기 및 관리를 참고하세요.
  • Cloud SQL 인스턴스에 대한 IAM 정책을 관리할 수 있는 권한이 있는지 확인합니다. 자세한 내용은 역할 및 권한을 참조하세요.

필요한 역할

자동 순환을 사용 설정하는 데 필요한 권한을 얻으려면 관리자에게 다음 권한이 포함된 역할을 부여해 달라고 요청하세요.

  • cloudsql.users.list
  • cloudsql.users.update

사전 정의된 역할이나 커스텀 역할을 사용하여 이러한 권한을 얻을 수 있습니다. 어떤 역할이 어떤 권한과 연결되어 있는지 확인하려면 Cloud SQL에 대한 IAM 역할을 참고하세요.

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

Cloud SQL 데이터베이스 사용자 인증 정보 시크릿 만들기

자동 순환을 사용 설정하려면 Cloud SQL DB credentials 유형의 비밀을 만들어야 합니다.

콘솔

  1. Cloud de Confiance 콘솔에서 Secret Manager 페이지로 이동합니다.

    Secret Manager로 이동

  2. Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭한 후 리전 보안 비밀 만들기를 클릭합니다.

  3. 리전 보안 비밀 만들기 페이지에서 이름 필드에 보안 비밀 이름을 입력합니다.

  4. 보안 비밀 유형 설정 체크박스를 선택하고 보안 비밀 유형으로 Cloud SQL DB credentials를 선택합니다.

  5. 리전 목록에서 리전 보안 비밀을 저장하려는 위치를 선택합니다.

  6. (선택사항) 순환 섹션에서 보안 비밀의 순환 일정을 구성합니다. 순환 일정을 구성하지 않으면 보안 비밀을 수동으로 순환해야 합니다.

    1. 순환 기간 설정 체크박스를 선택합니다.

    2. 순환 기간 목록에서 기본 옵션 중에서 선택하거나 커스텀을 선택하여 자체 순환 일정을 구성합니다.

    3. 시작 시간 필드에서 순환 기간 시작 날짜와 시간을 입력합니다.

  7. 보안 비밀 만들기를 클릭합니다.

gcloud

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • SECRET_ID: 보안 비밀의 ID
  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud secrets create SECRET_ID \
    --location=LOCATION \
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

Windows(PowerShell)

gcloud secrets create SECRET_ID `
    --location=LOCATION `
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

Windows(cmd.exe)

gcloud secrets create SECRET_ID ^
    --location=LOCATION ^
    --secret-type=CLOUD_SQL_DB_CREDENTIALS

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

Created secret [projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID].

REST

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

  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치
  • PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID입니다.
  • SECRET_ID: 보안 비밀의 ID

HTTP 메서드 및 URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID

JSON 요청 본문:

{
  "secretType": "CLOUD_SQL_DB_CREDENTIALS"
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2026-07-28T05:00:00Z",
  "secretType": "CLOUD_SQL_DB_CREDENTIALS",
  "etag": "\"1a2b3c4d\"",
  "policyMember": {
    "iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
  }
}

기본 제공 보안 비밀 ID에 권한 부여

각 시크릿에는 Cloud de Confiance by S3NS 프로젝트의 다른 모든 리소스와 구분되는 고유 식별자가 있습니다. 기본 제공 ID에 Cloud SQL 인스턴스의 사용자 인증 정보를 업데이트하는 데 필요한 권한을 부여해야 합니다. 자세한 내용은 기본 제공 ID가 있는 리소스에 역할 부여를 참고하세요.

콘솔

  1. 보안 비밀 세부정보 페이지에서 개요 탭으로 이동합니다.

  2. 보안 비밀의 IAM 주 구성원 식별자를 확인합니다.

    식별자는 principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID 형식입니다.

  3. Cloud de Confiance 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동

  4. 액세스 권한 부여를 클릭합니다.

    액세스 권한 부여 패널이 표시됩니다.

  5. 새 주 구성원 필드에 보안 비밀의 IAM 주 구성원 식별자를 입력합니다.

  6. 역할 선택 목록에서 필요한 권한을 부여하는 역할을 선택합니다.

    자세한 내용은 필요한 역할을 참조하세요.

  7. 저장을 클릭합니다.

gcloud

보안 비밀 ID 가져오기

IAM 권한을 부여하기 전에 보안 비밀을 설명하여 iamPolicyUidPrincipal 기본 제공 ID를 가져옵니다. IAM 정책 바인딩을 추가할 때 --member 플래그에 이 ID 문자열을 지정합니다.

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • SECRET_ID: 보안 비밀의 ID
  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud secrets describe SECRET_ID \
    --location=LOCATION \
    --format="value(policyMember.iamPolicyUidPrincipal)"

Windows(PowerShell)

gcloud secrets describe SECRET_ID `
    --location=LOCATION `
    --format="value(policyMember.iamPolicyUidPrincipal)"

Windows(cmd.exe)

gcloud secrets describe SECRET_ID ^
    --location=LOCATION ^
    --format="value(policyMember.iamPolicyUidPrincipal)"

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

principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID

비밀 ID에 IAM 역할 부여

이전 단계에서 검색된 보안 비밀 ID 보안 주체에 필요한 Cloud SQL 권한 (예: cloudsql.users.update 및 cloudsql.users.list 또는 사전 정의된 roles/cloudsql.admin 역할)이 포함된 IAM 역할을 부여합니다.

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID입니다.
  • PROJECT_NUMBER: 숫자 Cloud de Confiance by S3NS 프로젝트 번호
  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치
  • SECRET_UID: 보안 비밀 리소스의 시스템 생성 고유 식별자
  • ROLE: 보안 비밀 ID에 부여된 IAM 역할

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" \
    --role="ROLE"

Windows(PowerShell)

gcloud projects add-iam-policy-binding PROJECT_ID `
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" `
    --role="ROLE"

Windows(cmd.exe)

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" ^
    --role="ROLE"

REST

보안 비밀 ID 가져오기

IAM 권한을 부여하기 전에 보안 비밀 세부정보를 가져와 iamPolicyUidPrincipal 기본 제공 ID를 가져옵니다. IAM 정책을 설정할 때 요청 JSON에 이 ID 문자열을 지정합니다.

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

  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치
  • PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID입니다.
  • SECRET_ID: 보안 비밀의 ID

HTTP 메서드 및 URL:

GET https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID

JSON 요청 본문:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
        ]
      }
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2026-07-28T05:00:00Z",
  "secretType": "CLOUD_SQL_DB_CREDENTIALS",
  "etag": "\"1a2b3c4d\"",
  "policyMember": {
    "iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
  }
}

비밀 ID에 IAM 역할 부여

이전 단계에서 검색된 보안 비밀 ID 보안 주체에 필요한 Cloud SQL 권한 (예: cloudsql.users.update 및 cloudsql.users.list 또는 사전 정의된 roles/cloudsql.admin 역할)이 포함된 IAM 역할을 부여합니다.

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

  • PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID입니다.
  • ROLE: 보안 비밀 ID에 부여된 IAM 역할
  • PROJECT_NUMBER: 숫자 Cloud de Confiance by S3NS 프로젝트 번호
  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치
  • SECRET_UID: 보안 비밀 리소스의 시스템 생성 고유 식별자

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

JSON 요청 본문:

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
        ]
      }
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy" | Select-Object -Expand Content

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

{
  "version": 1,
  "etag": "BwWWv0I7vBw=",
  "bindings": [
    {
      "role": "roles/cloudsql.admin",
      "members": [
        "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
      ]
    }
  ]
}

보안 비밀 순환

새로 생성된 Cloud SQL 보안 비밀의 순환 상태는 첫 번째 순환이 성공할 때까지 Disabled입니다. 권한을 확인하고 자동 순환 일정을 시작하려면 시크릿을 수동으로 순환해야 합니다.

콘솔

  1. Cloud de Confiance 콘솔에서 Secret Manager 페이지로 이동합니다.

    Secret Manager로 이동

  2. Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭합니다.

  3. 보안 비밀 이름을 클릭하여 보안 비밀 세부정보 페이지로 이동합니다.

  4. 회전을 클릭합니다.

    보안 비밀 순환 패널이 표시됩니다.

  5. 업데이트할 Cloud SQL 인스턴스의 인스턴스 ID와 사용자 이름을 지정합니다.

  6. (선택사항) 추가 설정 섹션을 펼쳐 특정 비밀번호를 입력합니다. 비워두면 Secret Manager에서 강력한 임의 비밀번호를 자동으로 생성합니다.

  7. 회전을 클릭합니다.

gcloud

관리형 순환 사용 설정

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud secrets enable-managed-rotation SECRET_ID \
    --location=LOCATION \
    --instance-id=INSTANCE_ID \
    --username=USERNAME

Windows(PowerShell)

gcloud secrets enable-managed-rotation SECRET_ID `
    --location=LOCATION `
    --instance-id=INSTANCE_ID `
    --username=USERNAME

Windows(cmd.exe)

gcloud secrets enable-managed-rotation SECRET_ID ^
    --location=LOCATION ^
    --instance-id=INSTANCE_ID ^
    --username=USERNAME

보안 비밀 수동 순환

즉시 수동 순환을 트리거하여 초기 보안 비밀 버전을 생성하고 연결을 확인합니다.

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • SECRET_ID: 보안 비밀의 ID
  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud secrets rotate-secret SECRET_ID \
    --location=LOCATION

Windows(PowerShell)

gcloud secrets rotate-secret SECRET_ID `
    --location=LOCATION

Windows(cmd.exe)

gcloud secrets rotate-secret SECRET_ID ^
    --location=LOCATION

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

Name: projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1
State: ENABLED

REST

관리형 순환 사용 설정

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

HTTP 메서드 및 URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation

JSON 요청 본문:

{
  "cloudSqlSingleUserCredentials": {
    "instanceId": "INSTANCE_ID",
    "username": "USERNAME"
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
  "createTime": "2026-07-28T05:00:00Z",
  "state": "ENABLED"
}

보안 비밀 수동 순환

즉시 수동 순환을 트리거하여 초기 보안 비밀 버전을 생성하고 연결을 확인합니다.

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

  • LOCATION: 보안 비밀의 Cloud de Confiance by S3NS 위치
  • PROJECT_ID: Cloud de Confiance by S3NS 프로젝트 ID입니다.
  • SECRET_ID: 보안 비밀의 ID

HTTP 메서드 및 URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret"

PowerShell

다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
  "createTime": "2026-07-28T05:00:00Z",
  "state": "ENABLED"
}

Secret Manager가 Cloud SQL 인스턴스의 사용자 인증 정보를 업데이트하려고 시도합니다. 성공하면 순환 상태가 Enabled로 변경되고 예약된 자동 순환 타이머가 시작됩니다.

다음 단계