IAM 계정을 사용하여 연결

이 페이지에서는 Identity and Access Management (IAM)로 준비된 계정을 사용하여 PostgreSQL용 AlloyDB 인스턴스에 로그인하는 프로세스를 설명합니다. psql 명령줄 클라이언트를 사용하여 IAM 기반 로그인을 실행하는 방법을 보여줌으로써 프로세스를 설명합니다.

AlloyDB 인스턴스에 연결하는 방법에 관한 개요는 연결 개요를 참고하세요.

시작하기 전에

IAM 사용자 인증 정보를 사용하여 AlloyDB 인스턴스에 로그인하려면 프로젝트, 클러스터, 인스턴스, IAM 사용자 계정을 모두 준비해야 합니다.

자세한 내용은 IAM 인증 관리를 참고하세요.

OAuth 2.0 토큰으로 인증

사용자 또는 애플리케이션은 다음 단계에 따라 AlloyDB 데이터베이스로 인증할 수 있습니다.

  1. 아직 로그인하지 않았다면 AlloyDB 인스턴스에 로그인할 때 사용할 동일한 사용자 또는 서비스 계정을 사용하여 Google Cloud CLI를 승인합니다.

  2. gcloud auth print-access-token 명령어를 사용하여 Google Cloud 에서 OAuth 2.0 토큰을 요청합니다.

    gcloud auth print-access-token

    Google Cloud 는 이 명령어의 출력으로 OAuth 2.0 토큰을 출력합니다.

    보안을 강화하려면 다음 대체 단계에 따라 AlloyDB 인증에서만 사용할 수 있도록 토큰을 제한할 수 있습니다.

    1. 아직 추가하지 않은 경우 gcloud auth application-default login 명령어를 사용하여 현재 환경의 액세스 사용자 인증 정보에 alloydb.login 범위를 추가합니다.

      gcloud auth application-default login --scopes=https://www.googleapis.com/auth/alloydb.login,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email,openid
    2. gcloud auth application-default print-access-token 명령어를 사용하여 제한된 OAuth 2.0 토큰을 출력하고 토큰의 범위를 AlloyDB 인증으로만 지정합니다.

      gcloud auth application-default print-access-token –-scopes=https://www.googleapis.com/auth/alloydb.login
      

    OAuth 2.0 토큰을 사용하면 나 또는 다른 사용자가 나를 대신하여 Google Cloud 에 인증된 요청을 보낼 수 있습니다. 토큰을 비밀번호와 동일한 수준의 보안으로 취급합니다. 토큰을 안전하게 저장하거나 전혀 저장하지 마세요. 이 페이지 뒷부분에 있는 psql 사용 예는 단일 작업으로 OAuth 2.0 토큰을 요청, 사용, 삭제하는 방법을 보여줍니다.

  3. 다음 사용자 인증 정보를 사용하여 표준 PostgreSQL 기법으로 AlloyDB 인스턴스에 로그인합니다.

    • 이전 단계에서 획득한 액세스 토큰을 비밀번호로 제시합니다.

    • IAM 사용자 계정의 경우 데이터베이스 사용자 이름은 계정의 전체 이메일 주소입니다.

    • IAM 서비스 계정의 경우 데이터베이스 사용자 이름은 .gserviceaccount.com 서픽스가 없는 계정의 이메일 주소입니다.

다음 psql 명령어는 명령줄에서 IAM 사용자에 로그인하는 한 가지 방법을 보여줍니다. gcloud auth print-access-token의 출력을 PGPASSWORD 환경 변수에 할당합니다. 이후 psql에서 이 변수를 데이터베이스 로그인 비밀번호로 사용합니다.

PGPASSWORD=$(gcloud auth print-access-token) psql \
  -h INSTANCE_ADDRESS \
  -U USERNAME \
  -d DATABASE

다음을 바꿉니다.

  • INSTANCE_ADDRESS: 연결할 AlloyDB 인스턴스의 IP 주소입니다.

  • USERNAME: IAM 사용자가 인스턴스로 인증하는 식별자입니다.

    IAM 사용자 계정의 경우 사용자 계정의 전체 이메일 주소를 입력합니다. 예를 들면 kai@altostrat.com입니다.

    IAM 서비스 계정의 경우 .gserviceaccount.com 서픽스를 제외한 서비스 계정의 주소를 입력합니다. 예를 들어 서비스 계정 my-service@my-project.iam.gserviceaccount.com를 지정하려면 여기에서 my-service@my-project.iam 값을 사용합니다.

  • DATABASE: 연결할 데이터베이스의 이름입니다.

psql는 명령줄에 입력된 비밀번호가 100자(영문 기준)를 초과하면 잘립니다. OAuth 2.0 토큰과 함께 psql를 로그인 비밀번호로 사용하려면 메시지가 표시될 때 수동으로 붙여넣는 대신 이 예와 같이 PGPASSWORD 환경 변수를 설정해야 합니다.

AlloyDB 인증 프록시 또는 AlloyDB 언어 커넥터를 사용하여 자동으로 인증

AlloyDB 인증 프록시 또는 AlloyDB 언어 커넥터를 사용하여 IAM 기반 AlloyDB 사용자를 자동으로 인증하고 OAuth 2.0 토큰을 제공하지 않고도 인스턴스에 연결할 수 있습니다.

AlloyDB 인증 프록시를 사용하려면 --auto-iam-authn 플래그가 사용 설정된 상태에서 AlloyDB 인증 프록시 클라이언트를 실행해야 하지만 AlloyDB 언어 커넥터를 사용하려면 프로그래매틱 방식으로 IAM 인증을 사용 설정해야 합니다.

언어 커넥터를 사용할 때는 언어별로 해당하는 옵션이 있습니다. 자세한 내용은 AlloyDB 언어 커넥터 구성을 참고하세요.

프록시 클라이언트 또는 언어 커넥터를 실행하는 데 사용하는 IAM 계정은 데이터베이스 사용자로 추가한 계정과 동일해야 합니다. 예를 들어 IAM 사용자 계정 kai@altostrat.com를 사용하여 워크로드를 실행하는 경우 프록시 클라이언트 또는 언어 커넥터를 사용하여 OAuth 2.0 토큰을 지정하지 않고도 kai@altostrat.com 데이터베이스 사용자를 자동으로 인증할 수 있습니다. 이 예시에서 자동 인증은 kai@altostrat.com를 제외한 다른 데이터베이스 사용자에게는 작동하지 않습니다.

인증 프록시 실행에 관한 자세한 내용은 AlloyDB 인증 프록시를 사용하여 연결을 참고하세요.

언어 커넥터 실행에 관한 자세한 내용은 AlloyDB 언어 커넥터를 사용하여 연결을 참고하세요.

IAM 인증 문제 해결

IAM 기반 인증 시도 실패의 원인을 파악하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 리소스 유형에서 AlloyDB 인스턴스를 클릭합니다.

  3. 심각도에서 알림을 클릭합니다.

    알림 옵션이 표시되지 않으면 선택한 시간 범위 내에 로깅된 인증 실패가 없음을 의미합니다. 로그 탐색기 컨트롤을 사용하여 기간을 조정해야 할 수 있습니다.

  4. 쿼리 결과에서 로그 항목에 다음 메시지 중 하나가 있는지 확인합니다.

    Request had invalid authentication credentials.
    액세스 토큰이 잘못되었습니다.
    Caller does not have required permission to use project.
    IAM 주 구성원에 필요한 IAM 역할 또는 권한이 없습니다. 전체 오류 메시지에는 누락된 역할 또는 권한이 지정됩니다.
    IAM principal does not match database user.

    액세스 토큰으로 지정된 인증된 IAM 주 구성원이 연결하려는 데이터베이스 사용자와 일치하지 않습니다.

    토큰으로 지정된 사용자를 보려면 다음 명령어를 실행합니다.

    curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=ACCESS_TOKEN" https://www.googleapis.com/oauth2/v1/tokeninfo
    

    ACCESS_TOKEN을 OAuth 2.0 액세스 토큰으로 바꿉니다.

    Request had insufficient scopes.
    액세스 토큰에 alloydb.login 범위 또는 cloud-platform 범위가 포함되지 않습니다. 이러한 범위 중 하나 이상이 필요합니다.