IAM-Bedingungen verwenden

Mit IAM Conditions können Sie eine bedingte, attributbasierte Zugriffssteuerung für Google Cloud-Ressourcen einschließlich Cloud SQL-Instanzen definieren und erzwingen. Weitere Informationen zu IAM Conditions finden Sie auf der Seite Übersicht über IAM Conditions.

Einführung

In Cloud SQL können Sie den bedingten Zugriff anhand folgender Attribute erzwingen:

  • Datums-/Uhrzeitattribute: Wird verwendet, um den temporären (ablaufenden), geplanten oder zeitlich begrenzten Zugriff auf Cloud SQL-Ressourcen festzulegen. Beispielsweise können Sie einem Nutzer den Zugriff auf eine Datenbankinstanz bis zu einem bestimmten Datum erlauben. Sie können Datums-/Uhrzeitattribute auf jeder Ebene der Ressourcenhierarchie verwenden. Weitere Informationen finden Sie unter Temporären Zugriff konfigurieren.
  • Ressourcenattribute: Dienen zum Konfigurieren des bedingten Zugriffs basierend auf einem Tag, einem Ressourcennamen, einem Ressourcentyp oder einem Ressourcendienstattribut. In Cloud SQL können Sie die Attribute von Datenbankinstanzen verwenden, um den bedingten Zugriff zu konfigurieren. Beispielsweise können Sie einem Nutzer nur Zugriff auf Instanzen mit einem bestimmten Tag gewähren. Weitere Informationen finden Sie unter Ressourcenbasierten Zugriff konfigurieren.

Dies ist unter anderem in folgenden Fällen hilfreich:

  • Nutzern den Aufbau einer Verbindung zu bestimmten Instanzen erlauben.

  • Nutzer können Instanzen mit bestimmten Präfixen oder Suffixen erstellen (z. B. "Test").

  • Zugriff auf Sicherungsvorgänge für Testinstanzen beschränken

  • Nutzern erlauben, Entwicklungs- und Testinstanzen, aber keine Produktionsinstanzen zu löschen.

  • Nutzern an bestimmten Tagen oder zu bestimmten Zeiten die Ausführung administrativer Vorgänge erlauben.

Nutzern den Aufbau einer Verbindung zu bestimmten Instanzen erlauben

Angenommen, Sie möchten einem Nutzer oder Dienstkonto die Berechtigung erteilen, nur eine Verbindung zu einer bestimmten Cloud SQL-Instanz herzustellen. Sie können eine IAM-Bedingung in die IAM-Richtlinienbindung aufnehmen, die diesem Konto die Berechtigungen einer Cloud SQL-Rolle gewährt.

Standardmäßig erhalten Mitglieder der vordefinierten Cloud SQL-Clientrolle (roles/cloudsql.client), die die Berechtigung cloudsql.instances.connect enthält, die Berechtigung, eine Verbindung zu allen Cloud SQL-Instanzen in einem Projekt herzustellen. Durch Einfügen einer IAM-Bedingung in die Richtlinienbindung können Sie die Berechtigung auf eine benannte Instanz beschränken.

Console

Dieses Beispiel zeigt, wie Sie die vorhandene IAM-Bindung für das Projekt ändern, um einem Dienstkonto eine Cloud SQL-Clientrolle für eine bestimmte Instanz zuzuweisen.

In diesem Beispiel werden folgende Variablen verwendet:

  • PROJECT_ID: Ihr Google Cloud-Projekt.
  • INSTANCE_ID: Der Name der Instanz, der Sie Zugriff gewähren möchten.

  1. Öffnen Sie in der Google Cloud Console die Seite IAM.

    IAM aufrufen

  2. Klicken Sie auf Add.
  3. Geben Sie im Eingabefeld Neue Mitglieder die E-Mail-Adresse des Dienstkontos ein.
  4. Klicken Sie auf die Drop-down-Liste Rolle und wählen Sie die Rolle Cloud SQL-Client aus.
  5. Klicken Sie auf Bedingung hinzufügen.
  6. Geben Sie einen Titel und eine Beschreibung ein.
  7. Wählen Sie den Tab Bedingungseditor.
  8. Im Abschnitt Bedingungserstellung:
    • Wählen Sie als Bedingungstyp – Ressource – Typ sqladmin.googleapis.com/Instance.
    • Geben Sie für Bedingungstyp – Ressource – Name den Wert projects/PROJECT_ID/instances/INSTANCE_ID ein.
    • Wählen Sie für Bedingungstyp – Ressource – Dienst den Wert sqladmin.googleapis.com.
  9. Klicken Sie auf Speichern, um die Bedingung zu speichern.
  10. Klicken Sie auf Speichern, um die Richtlinie zu speichern.

gcloud

In diesem Beispiel wird gezeigt, wie Sie die vorhandene IAM-Richtlinienbindung für das Projekt ändern, um einem bestimmten Dienstkonto die Rolle "Cloud SQL-Client" nur für eine bestimmte Instanz zuzuweisen.

In diesem Beispiel werden folgende Variablen verwendet:

  • PROJECT_ID: Ihr Google Cloud-Projekt.
  • INSTANCE_ID: Der Name der Instanz, auf die Sie Zugriff gewähren möchten.
  • SERVICE_ACCOUNT_EMAIL: Die vollständige E-Mail-Adresse des Dienstkontos, dessen Zugriff Sie bearbeiten möchten.

  1. Rufen Sie die vorhandenen IAM-Richtlinienbindungen ab und geben Sie sie in die Datei bindings.json aus:
  2. gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
    
  3. Fügen Sie der bindings.json-Datei folgende bedingte Rollenbindung hinzu:
    {
      "bindings": [
        {
          "role": "roles/cloudsql.client",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ],
          "condition": {
            "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID'
              && resource.type == 'sqladmin.googleapis.com/Instance'"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }
    
  4. Aktualisieren Sie die IAM-Richtlinie mit der neuen bindings.json-Datei.
    gcloud projects set-iam-policy PROJECT_ID bindings.json
    

Terraform

Damit Nutzer eine Verbindung zu bestimmten Instanzen herstellen können, verwenden Sie eine Terraform-google_iam_policy-Datenressource sowie eine google_project_iam_policy-Terraform-Ressource:

data "google_iam_policy" "sql_iam_policy" {
  binding {
    role = "roles/cloudsql.client"
    members = [
      "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
    ]
    condition {
      expression  = "resource.name == 'google_sql_database_instance.default.id' && resource.type == 'sqladmin.googleapis.com/Instance'"
      title       = "created"
      description = "Cloud SQL instance creation"
    }
  }
}

resource "google_project_iam_policy" "project" {
  project     = data.google_project.project.id
  policy_data = data.google_iam_policy.sql_iam_policy.policy_data
}

Zugriff auf Sicherungsvorgänge für Testinstanzen beschränken

Angenommen, die Topologie Ihres Dienstes ist so konfiguriert, dass alle Testinstanzen das Präfix test (z. B. test-instance-1) und alle Produktionsinstanzen das Präfix prod (z. B. prod-instance-1) haben.

Sie können den Zugriff auf Sicherungsvorgänge für Ihre Nutzer oder ein Dienstkonto auf Ihre Testinstanzen beschränken. Beschränken des Zugriffs umfasst das Einschränken von CREATE-, GET-, LIST- und DELETE-Vorgängen auf Sicherungen Ihrer Testinstanzen.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite IAM.

    IAM aufrufen

  2. Klicken Sie auf den Tab PRINCIPALS.
  3. Suchen Sie die E-Mail-Adresse oder das Dienstkonto des Nutzers (Hauptkonto), auf das Sie den Zugriff beschränken möchten.
  4. Klicken Sie rechts neben dem Hauptkonto auf das Symbol Hauptkonto bearbeiten. Dieses Symbol wird als Stiftsymbol angezeigt.
  5. Klicken Sie im Dialogfeld Berechtigungen bearbeiten auf WEITERE ROLLE HINZUFÜGEN.
  6. Geben Sie im Feld Filter des nachfolgenden Dialogfelds Cloud SQL Admin ein. Wählen Sie dann die Rolle Cloud SQL-Administrator aus.

    Das Dialogfeld Berechtigungen bearbeiten ist aktiv und die Rolle Cloud SQL-Administrator wird jetzt im Dialogfeld angezeigt.

  7. Klicken Sie rechts neben der Rolle Cloud SQL-Administrator auf den Link Bedingung hinzufügen.
  8. Geben Sie im Dialogfeld Bedingung bearbeiten die folgenden Informationen an:
    1. Geben Sie im Feld Titel einen Namen für die Bedingung ein, die Sie hinzufügen, um den Zugriff auf Sicherungsvorgänge für Testinstanzen zu beschränken. Zum Beispiel können Sie Folgendes eingeben: Limit access to backup operations
    2. Klicken Sie auf den Tab BEDINGUNG BEARBEITEN und fügen Sie die folgende Bedingung hinzu:

      resource.type == "sqladmin.googleapis.com/BackupRun" &&
      resource.name.startsWith("projects/PROJECT_ID/instances/test")
          

  9. Klicken Sie auf SPEICHERN.
  10. Klicken Sie im Dialogfeld Berechtigungen bearbeiten auf SPEICHERN.

gcloud

In diesem Beispiel werden folgende Variablen verwendet:

  • PROJECT_ID: Ihr Google Cloud-Projekt.
  • USER_EMAIL: E-Mail-Adresse des Nutzers.
  • SERVICE_ACCOUNT_EMAIL: Die vollständige E-Mail-Adresse des Dienstkontos, dessen Zugriff Sie einschränken möchten.

  1. Schränken Sie den Bereich der Rolle cloudsql.admin für einen Nutzer mit der E-Mail-Adresse USER_EMAIL ein.

    Der Bereich der Rolle ist auf Ressourcen beschränkt, deren Ressourcennamen mit projects/PROJECT_ID/instances/test beginnen.

    gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USER_EMAIL \
    --role=roles/cloudsql.admin \
    --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
        
  2. OR

  3. Schränken Sie den Bereich der Rolle cloudsql.admin für einen Nutzer ein, der mit einem Dienstkonto von SERVICE_ACCOUNT_EMAIL angemeldet ist.

    gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/cloudsql.admin \
    --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
        

Nutzern erlauben, Testinstanzen zu löschen, jedoch keine Produktionsinstanzen

Angenommen, Sie möchten einem Dienstkonto das Löschen von Testinstanzen erlauben, jedoch keine Produktionsinstanzen. Dazu können Sie Tags verwenden und die folgenden beiden Richtlinienbindungen für das Dienstkonto hinzufügen:

  • Eine Cloud SQL-Bearbeiterrolle für die Ressource, der Sie die Rolle zugewiesen haben, und ihre Nachfolger. Wenn die Rolle für das Projekt zugewiesen ist, gilt sie für alle Instanzen im Projekt. Die Rolle „Cloud SQL-Bearbeiter“ enthält nicht die Berechtigung cloudsql.instances.delete.
  • Eine Cloud SQL-Administratorrolle für Instanzen mit dem Tag test.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite IAM.

    IAM aufrufen

  2. Klicken Sie auf Add.
  3. Geben Sie im Feld Neue Mitglieder die E-Mail-Adresse des Dienstkontos ein.
  4. Klicken Sie auf die Drop-down-Liste Rolle und wählen Sie die Rolle Cloud SQL-Bearbeiter aus. Fügen Sie dieser Rolle nichts weiter hinzu.
  5. Klicken Sie auf Speichern, um die Bedingung zu speichern.
  6. Klicken Sie auf das Menü Rolle für dasselbe Konto und wählen Sie die Rolle Cloud Cloud SQL-Administrator aus.
  7. Klicken Sie auf Bedingung hinzufügen.
  8. Geben Sie einen Titel und eine Beschreibung ein.
  9. Wählen Sie den Tab Bedingungseditor.
  10. Im Abschnitt Bedingungserstellung:
    • Wählen Sie als Bedingungstyp – Ressource – Typ sqladmin.googleapis.com/Instance.
    • Geben Sie als Bedingungstyp – Ressource – Name einen Namen für die Bedingung ein.
    • Wählen Sie für Bedingungstyp – Ressource – Dienst den Wert sqladmin.googleapis.com.
    • Geben Sie unter Bedingungstyp – Ressource – Tag den Namen des Tag-Schlüssel-Namespaces ein. In diesem Beispiel ist der Operator matches und der Wert 815471563813/env/test.
  11. Klicken Sie auf Speichern, um die Bedingung zu speichern.
  12. Klicken Sie auf Speichern, um die Richtlinie zu speichern.

gcloud

In diesem Beispiel werden folgende Variablen verwendet:

  • PROJECT_ID: Ihr Google Cloud-Projekt.
  • INSTANCE_ID: Ihre Cloud SQL-Instanz.
  • REGION: Die Region, in der sich Ihre Cloud SQL-Instanz befindet.
  • ORGANIZATION_ID: ID der Organisation, die die übergeordnete Ressource für diesen Tag-Schlüssel sein soll. Beispiel: 12345678901. Informationen zum Abrufen Ihrer Organisations-ID finden Sie unter Organisationen erstellen und verwalten.
  • SERVICE_ACCOUNT_EMAIL: Die vollständige E-Mail-Adresse des Dienstkontos, dessen Zugriff Sie bearbeiten möchten.

  1. Erstellen Sie einen Tag-Schlüssel mit dem Namen „env“ mit den Tag-Werten „prod“ und „test“. Weitere Informationen finden Sie unter Neues Tag erstellen und definieren.
    gcloud alpha resource-manager tags keys create env \
    --parent=organizations/ORGANIZATION_ID
    gcloud alpha resource-manager tags values create prod \
    --parent=env
    gcloud alpha resource-manager tags values create test \
    --parent=env
        
  2. Hängen Sie das Tag „env“ mit dem Wert „test“ an die Cloud SQL-Instanzen der Testumgebung an. Weitere Informationen finden Sie auf der Seite Cloud SQL-Tags.
  3. gcloud alpha resource-manager tags bindings create \
    --tag-value=test \
    --parent=//sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID \
    --location=REGION
      
  4. Rufen Sie die vorhandenen IAM-Richtlinienbindungen ab und geben Sie sie in die Datei bindings.json aus:
    gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
    
  5. Fügen Sie der Datei bindings.json die folgenden bedingten Bindungen hinzu:
    {
      "bindings": [
        {
          "role": "roles/cloudsql.editor",
          "members": [
              "serviceAccount:SERVICE_ACCOUNT_EMAIL"
            ]
        },
        {
          "role": "roles/cloudsql.admin",
          "members": [
              "serviceAccount:SERVICE_ACCOUNT_EMAIL"
            ],
          "condition": {
            "expression": "resource.matchTag('ORGANIZATION_ID/env', 'test')"
          }
        }
      ],
      "etag": "BwWKmjvelug="
      "version": 3
    }
    
  6. Aktualisieren Sie die IAM-Richtlinienbindungen mit der neuen bindings.json-Datei.
    gcloud projects set-iam-policy PROJECT_ID bindings.json