Configure instâncias novas e existentes para a autenticação de base de dados da IAM

Esta página tem procedimentos para criar ou editar instâncias do Cloud SQL para permitir que utilizadores, contas de serviço ou grupos configurados para usar a autenticação de base de dados do IAM do Cloud SQL. Para saber mais sobre a integração da IAM do Cloud SQL, consulte o artigo Autenticação da IAM.

Uma instância recém-criada tem uma base de dados postgres.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the gcloud CLI.

  5. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the gcloud CLI.

  10. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  12. Certifique-se de que tem as funções de administrador do Cloud SQL e leitor do Compute na sua conta de utilizador.

    Aceda à página IAM

    Saiba mais acerca das funções e autorizações.

  13. O número máximo de instâncias que pode ter num único projeto depende da arquitetura de rede dessas instâncias:

    • Nova arquitetura de rede SQL: pode ter até 1000 instâncias por projeto.
    • Arquitetura de rede SQL antiga: pode ter até 100 instâncias por projeto.
    • Usar ambas as arquiteturas: o seu limite vai estar entre 100 e 1000, consoante a distribuição das suas instâncias pelas duas arquiteturas.

    Apresente um registo de apoio ao cliente para pedir um aumento. As réplicas de leitura são contabilizadas como instâncias.

    Configure novas instâncias para a autenticação de base de dados do IAM

    Para configurar uma nova instância do Cloud SQL para a autenticação de base de dados do IAM, tem de ativar a flag cloudsql.iam_authentication. Depois de ativar esta flag, pode adicionar utilizadores do IAM, contas de serviço ou grupos à instância do Cloud SQL.

    Para configurar uma nova instância do Cloud SQL para usar a autenticação de base de dados da IAM:

    Consola

    1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

      Aceda a Instâncias do Cloud SQL

    2. Clique em Criar instância.
    3. Clique em Escolher PostgreSQL.
    4. Introduza um nome para o ID da instância.
    5. Não inclua informações confidenciais nem de identificação pessoal no nome da instância, uma vez que é visível externamente. Não tem de incluir o ID do projeto no nome da instância. O ID do projeto é incluído automaticamente quando adequado (por exemplo, nos ficheiros de registo).
    6. Introduza uma palavra-passe para o administrador predefinido.
    7. No menu Versão da base de dados, selecione uma versão da base de dados.
    8. Na secção Escolha a região e a disponibilidade zonal, selecione a região e a zona para a sua instância. Coloque a instância na mesma região que os recursos que acedem à mesma. Não é possível modificar a região selecionada no futuro. Normalmente, não precisa de especificar uma zona.
    9. Na secção Personalize a sua instância, clique em Mostrar opções de configuração e, de seguida, expanda Flags.
    10. Clique em Adicionar indicador.
    11. No menu Escolha uma bandeira, selecione a bandeira cloudsql.iam_authentication. Certifique-se de que Ativado está selecionado como o valor desta flag e, de seguida, clique em Concluído.
    12. Configure outras definições da instância, conforme necessário. Para mais informações sobre as definições, consulte o artigo Definições.
    13. Clique em Criar instância.

    gcloud

    Executar gcloud sql instances create com o parâmetro --database-flags definido como cloudsql.iam_authentication=on.

    Substitua o seguinte:

    • INSTANCE_NAME: o nome da nova instância.
    • POSTGRES_VERSION: a versão do PostgreSQL (como POSTGRES_9_6, POSTGRES_10, POSTGRES_11 ou POSTGRES_12).
    • NUMBER_OF_CORES: o número de núcleos na máquina.
    • AMOUNT_OF_MEMORY: a quantidade de memória na máquina. Tem de ser fornecida uma unidade de tamanho (por exemplo, 3072 MiB ou 9 GiB).
    • ZONE: zona do Compute Engine preferencial (como us-central1-a ou us-central1-b).
    • PASSWORD: crie uma palavra-passe para o utilizador raiz.
    gcloud sql instances create INSTANCE_NAME \
    --database-version=POSTGRES_VERSION \
    --cpu=NUMBER_OF_CORES \
    --memory=AMOUNT_OF_MEMORY \
    --zone=ZONE_NAME \
    --root-password=PASSWORD \
    --database-flags=cloudsql.iam_authentication=on

    Terraform

    Para criar uma instância com a autenticação da base de dados do IAM ativada, use um recurso do Terraform.

    resource "google_sql_database_instance" "default" {
      name             = "postgres-db-auth-instance-name-test"
      region           = "us-west4"
      database_version = "POSTGRES_14"
      settings {
        tier = "db-custom-2-7680"
        database_flags {
          name  = "cloudsql.iam_authentication"
          value = "on"
        }
      }
    }

    Aplique as alterações

    Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.

    Prepare o Cloud Shell

    1. Inicie o Cloud Shell.
    2. Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.

      Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.

    Prepare o diretório

    Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).

    1. No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o ficheiro é denominado main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.

      Copie o exemplo de código para o ficheiro main.tf criado recentemente.

      Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.

    3. Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
    4. Guarde as alterações.
    5. Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
      terraform init

      Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção -upgrade:

      terraform init -upgrade

    Aplique as alterações

    1. Reveja a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expetativas:
      terraform plan

      Faça as correções necessárias à configuração.

    2. Aplique a configuração do Terraform executando o seguinte comando e introduzindo yes no comando:
      terraform apply

      Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).

    3. Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.

    Eliminar as alterações

    Para eliminar as alterações, faça o seguinte:

    1. Para desativar a proteção contra eliminação, no ficheiro de configuração do Terraform, defina o argumento deletion_protection como false.
      deletion_protection =  "false"
    2. Aplique a configuração do Terraform atualizada executando o seguinte comando e introduzindo yes no comando:
      terraform apply
    1. Remova os recursos aplicados anteriormente com a sua configuração do Terraform executando o seguinte comando e introduzindo yes no comando:

      terraform destroy

    REST v1

    Não inclua informações confidenciais nem de identificação pessoal (IIP) no nome da instância, uma vez que é visível externamente.

    Não tem de incluir o ID do projeto no nome da instância. O ID do projeto é incluído automaticamente quando necessário (por exemplo, nos ficheiros de registo).

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • INSTANCE_ID: o ID de instância pretendido
    • REGION: a região pretendida, como us-east-1
    • PROJECT_ID: o ID do projeto
    • LOCATION_ID: o ID da localização
    • DATABASE_VERSION: string enum da versão da base de dados. Por exemplo: POSTGRES_12
    • PASSWORD: a palavra-passe do utilizador de raiz
    • MACHINE_TYPE: string enum do tipo de máquina (nível), como: db-custom-[CPUS]-[MEMORY_MBS]

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "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"
    }
    
    Para ver como o pedido da API REST subjacente é construído para esta tarefa, consulte o Explorador de APIs na página instances:insert.

    REST v1beta4

    Não inclua informações confidenciais nem de identificação pessoal (IIP) no nome da instância, uma vez que é visível externamente.

    Não tem de incluir o ID do projeto no nome da instância. O ID do projeto é incluído automaticamente quando necessário (por exemplo, nos ficheiros de registo).

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • INSTANCE_ID: o ID de instância pretendido
    • REGION: a região pretendida, como us-east-1
    • PROJECT_ID: o ID do projeto
    • LOCATION_ID: o ID da localização
    • DATABASE_VERSION: string enum da versão da base de dados. Por exemplo: POSTGRES_12
    • PASSWORD: a palavra-passe do utilizador de raiz
    • MACHINE_TYPE: string enum do tipo de máquina (nível), como: db-custom-[CPUS]-[MEMORY_MBS]

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "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"
    }
    
    Para ver como o pedido da API REST subjacente é construído para esta tarefa, consulte o Explorador de APIs na página instances:insert.

    Configure instâncias existentes para a autenticação de base de dados do IAM

    Para configurar uma instância do Cloud SQL existente para a autenticação de base de dados do IAM, tem de ativar a flag cloudsql.iam_authentication. Depois de ativar esta flag, pode adicionar utilizadores do IAM, contas de serviço ou grupos à instância do Cloud SQL.

    Para configurar uma instância do Cloud SQL existente para usar a autenticação de base de dados da IAM:

    Consola

    1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

      Aceda a Instâncias do Cloud SQL

    2. Para abrir a página Vista geral de uma instância, clique no nome da instância.
    3. Clique em Edit.
    4. Na secção Personalize a sua instância, expanda Flags.
    5. Clique em Adicionar indicador.
    6. No menu Escolha uma bandeira, selecione a bandeira cloudsql.iam_authentication. Certifique-se de que Ativado está selecionado como o valor desta flag e, de seguida, clique em Concluído.
    7. Configure outras definições da instância, conforme necessário. Para mais informações sobre as definições, consulte o artigo Definições.
    8. Clique em Guardar.

    gcloud

    Para informações sobre a instalação e o início da utilização da CLI gcloud, consulte o artigo Instale a CLI gcloud. Para obter informações sobre como iniciar a Cloud Shell, consulte o artigo Use a Cloud Shell.

    Para este procedimento, use gcloud sql instances patch.

    Substitua o seguinte:

    • INSTANCE_NAME: o nome da nova instância.
    gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.iam_authentication=on

    Esta ação repõe todas as outras definições de flags da base de dados existentes. Para mais orientações sobre a definição de flags de base de dados, consulte o artigo Defina uma flag de base de dados.


    REST v1

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto
    • LOCATION_ID: o ID da localização
    • INSTANCE_ID: o ID de instância pretendido
    • REGION: a região pretendida
    • DATABASE_VERSION: string enum da versão da base de dados. Por exemplo: POSTGRES_12
    • PASSWORD: a palavra-passe do utilizador de raiz
    • MACHINE_TYPE: string enum do tipo de máquina (nível), como: db-custom-[CPUS]-[MEMORY_MBS]

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "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

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto
    • LOCATION_ID: o ID da localização
    • INSTANCE_ID: o ID de instância pretendido
    • REGION: a região pretendida
    • DATABASE_VERSION: string enum da versão da base de dados. Por exemplo: POSTGRES_12
    • PASSWORD: a palavra-passe do utilizador de raiz
    • MACHINE_TYPE: string enum do tipo de máquina (nível), como: db-custom-[CPUS]-[MEMORY_MBS]

    Método HTTP e URL:

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

    Corpo JSON do pedido:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "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"
    }
    

    O que se segue?