Memecahkan masalah autentikasi IAM

Untuk mendiagnosis dan menyelesaikan upaya login autentikasi Identity and Access Management (IAM) yang gagal untuk AlloyDB untuk PostgreSQL, Anda dapat memeriksa log pemberitahuan autentikasi di Logs Explorer.

Untuk mengetahui penyebab kegagalan upaya autentikasi berbasis IAM, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman Logs Explorer:

    Buka Logs Explorer

  2. Di menu drop-down All resources, pilih AlloyDB Instance.

  3. Di bagian Severity, klik Alert.

    Jika Alert tidak tersedia, berarti tidak ada kegagalan autentikasi yang dicatat dalam jangka waktu yang dipilih. Anda mungkin perlu menyesuaikan jendela menggunakan kontrol Logs Explorer.

  4. Di bagian Query results, periksa entri log untuk menemukan salah satu pesan berikut:

    Request had invalid authentication credentials.
    Token akses tidak valid.
    Caller does not have required permission to use project.
    Akun utama IAM tidak memiliki peran IAM atau izin yang diperlukan. Pesan error lengkap menentukan peran atau izin yang tidak ada.
    IAM principal does not match database user.

    Akun utama IAM yang diautentikasi dan ditentukan oleh token akses tidak cocok dengan pengguna database yang ingin Anda hubungkan.

    Untuk melihat akun utama yang ditentukan oleh token, jalankan perintah berikut:

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

    Ganti ACCESS_TOKEN dengan token akses OAuth 2.0.

    Error ini juga terjadi jika akun utama yang dipersingkat dari akun layanan, yaitu alamat email tanpa akhiran .gserviceaccount.com, melebihi 63 karakter.

    PostgreSQL memiliki batas 63 karakter untuk ID peran dan pengguna. Meskipun AlloyDB memungkinkan Anda membuat pengguna, PostgreSQL memotong nama peran menjadi 63 byte dalam katalog internal. Selama login, lapisan autentikasi IAM AlloyDB membandingkan akun utama lengkap yang tidak dipotong dari token OAuth dengan peran database yang dipotong, sehingga menghasilkan ketidakcocokan string.

    Solusi: Menggunakan peniruan akun layanan

    Jika tidak dapat mempersingkat nama akun layanan, Anda dapat mengabaikan batasan ini dengan menggunakan peniruan akun layanan. Hal ini memisahkan identitas yang menjalankan workload dari identitas yang digunakan untuk login ke database:

    1. Buat akun layanan proxy dengan nama yang akun utama singkatnya, tidak termasuk akhiran .gserviceaccount.com, memiliki 63 karakter atau kurang, seperti db-proxy@PROJECT_ID.iam.gserviceaccount.com.
    2. Tambahkan akun layanan proxy ke cluster AlloyDB sebagai pengguna database IAM_BASED dengan nama pengguna db-proxy@PROJECT_ID.iam.
    3. Di IAM, berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) kepada akun layanan asli workload di akun layanan proxy.
    4. Konfigurasikan aplikasi, Konektor Bahasa AlloyDB, atau Proxy Auth AlloyDB Anda untuk terhubung menggunakan identitas proxy.

    Misalnya, Anda dapat terhubung menggunakan perintah gcloud beta alloydb connect dengan flag --impersonate-service-account:

    gcloud beta alloydb connect INSTANCE_ID \
        --cluster=CLUSTER_ID \
        --region=REGION_ID \
        --impersonate-service-account=PROXY_SERVICE_ACCOUNT_EMAIL \
        --auto-iam-authn
    

    Ganti kode berikut:

    • INSTANCE_ID: ID instance AlloyDB.
    • CLUSTER_ID: ID cluster yang berisi instance.
    • REGION_ID: region tempat cluster berada.
    • PROXY_SERVICE_ACCOUNT_EMAIL: alamat email lengkap akun layanan proxy.

    Catatan: Akun layanan asli tidak memerlukan akses login langsung ke database, hanya izin untuk meniru akun proxy. Akun layanan proxy memiliki hak istimewa database.

    Request had insufficient scopes.
    Token akses tidak berisi cakupan alloydb.login atau cakupan cloud-platform. Setidaknya salah satu cakupan ini diperlukan.