Parece que é necessário, porque me pede a senha. Mas se sim, então qual é o sentido de ter 2 credenciais (um arquivo de credenciais + senha)?
Se não, então o que estou perdendo?
Os documentos não são muito reveladores sobre isso:
Se solicitado, digite a senha.
Para testá-lo na máquina local eu fiz:
docker-compose.yml
:
services:
app:
build: .
command: sleep infinity
init: true
volumes:
- .:/app
depends_on:
- proxy
proxy:
image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.6.0
command:
--address 0.0.0.0
--credentials-file /credentials.json
--debug
myprj:europe-central2:db
volumes:
- ./credentials.json:/credentials.json
Dockerfile
:
FROM google/cloud-sdk:435.0.1-alpine
RUN apk add terraform postgresql15-client
WORKDIR /app
main.tf
:
provider "google" {
project = "myprj"
}
resource "google_sql_database_instance" "test-auth" {
deletion_protection = false
name = "db"
region = "europe-central2"
database_version = "POSTGRES_11"
settings {
tier = "db-f1-micro"
}
}
resource "google_sql_user" "test-auth" {
name = "postgres"
instance = google_sql_database_instance.test-auth.name
password = 123456
}
resource "google_service_account" "test-auth" {
account_id = "dbaccount"
}
resource "google_project_iam_member" "test-auth" {
project = "myprj"
role = "roles/cloudsql.client"
member = "serviceAccount:${google_service_account.test-auth.email}"
}
$ gcloud auth application-default login
$ terraform init
$ terraform apply
// create the service account key, copy to ./credentials.json, restart the container
$ psql -h proxy -U postgres
O que estava faltando é:
cloudsql.iam_authentication=on
roles/cloudsql.instanceUser
) , que inclui acloudsql.instances.login
permissão , permite fazer login em um banco de dadospg
usuário correspondentecloud-sql-proxy
necessidades--auto-iam-authn
, faz com que ele use autenticação de banco de dados IAMTambém:
postgres
usuário não pode ser usado para autenticação do banco de dados IAM porque o nome de usuário do banco de dados deve corresponder ao nome da conta de serviçoTudo isso resulta em:
docker-compose.yml
:Dockerfile
:main.tf
: