Policys und Gruppen erstellen

Policys und Gruppen steuern den Zugriff auf Ressourcen innerhalb des Mandanten.

Policys und Gruppen

Um den Zugriff auf Ressourcen zu verwalten, werden Policys auf Benutzer angewendet, die Mitglied einer Gruppe sind. Policys steuern den Zugriff auf Ressourcen.

Die Policy-Profile wenden die folgenden Kriterien für die Mitglieder der Gruppe an:

  • ReadOnly -Policy : Die ReadOnly -Policy wird auf Mitglieder der ReadOnly -Gruppe angewendet. Die ReadOnly -Gruppe wird von Auditoren und neuen Mitgliedern verwendet. Mitglieder haben schreibgeschützten Zugriff auf alle Ressourcen in dem Mandanten und können keine anderen Ressourcen verwenden oder verwalten. Diese Policy ist die restriktivste.
  • DBAdmin -Policy : Die DBAdmin -Policy wird auf Mitglieder der DBAdmins -Gruppe angewendet. Die Mitglieder dieser Policy und Gruppe haben Lesezugriff auf alle Ressourcen in dem Mandanten und können Ressourcen verwalten und verwenden, die Teil der Datenbank-Familie sind.
  • IAMAdminManager -Policy : Die IAMAdminManager -Policy wird auf Mitglieder der IAMAdminManagers -Gruppe angewendet. Mitglieder der Gruppe legen fest, welche Benutzer Mitglieder der Gruppen Administrator und NetSecAdmins sein können.
  • StorageAdmin -Policy : Die StorageAdmin -Policy wird auf Mitglieder der StorageAdmin -Gruppe angewendet. Mitglieder dieser Gruppe können Objekte und Datenträger im Mandanten verwalten. Sie haben außerdem schreibgeschützten Zugriff auf alle anderen Objekte im Mandanten.
  • NetworkAdmin Policy : Die NetworkAdmin -Policy gilt für Mitglieder der NetworkAdmin -Gruppe. Diese Gruppe kann Netzwerkressourcen in den Mandanten verwalten und virtuelle Netzwerkressourcen verwenden. Sie haben außerdem schreibgeschützten Zugriff auf alle anderen Objekte im Mandanten.
  • SysAdmin Policy : Die SysAdmin -Policy gilt für Mitglieder der SysAdmin -Gruppe. Mitglieder dieser Gruppe können Instanzen, Objekte, Datenträger und Compartments im Mandanten verwalten. Sie können Subnets, virtuelle Netzwerkschnittstellenkarten (VNICs), VNIC-Anhänge und Load Balancer-Instanzen im Mandanten verwenden. Sie haben schreibgeschützten Zugriff auf alle anderen Objekte in dem Mandanten.

Variablen für Policys und Gruppen definieren

Erstellen Sie die Konfigurationsdateien für das Identity and Access Management- (IAM-) Modul, die Policys und Gruppen definieren.

  1. Ändern Sie die Verzeichnisse in den Ordner iam.
  2. Erstellen Sie eine Textdatei mit dem Namen policies.tf, und kopieren Sie den folgenden Code in die Datei.
    resource "oci_identity_policy" "iam_admin_managers" {
      name           = "IAMAdminManagers.pl"
      description    = "IAMAdminManagers.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = [
        "ALLOW GROUP ${oci_identity_group.iam_admin_managers.name} to read users IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.iam_admin_managers.name} to read groups IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.iam_admin_managers.name} to manage users IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.iam_admin_managers.name} to manage groups IN TENANCY where target.group.name = 'Administrators'",
        "ALLOW GROUP ${oci_identity_group.iam_admin_managers.name} to manage groups IN TENANCY where target.group.name = '${oci_identity_group.net_sec_admins.name}'",
      ]
    }
    
    resource "oci_identity_policy" "iam_managers" {
      name           = "IAMManagers.pl"
      description    = "IAMManagers.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = [
        "ALLOW GROUP ${oci_identity_group.iam_managers.name} to read users IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.iam_managers.name} to read groups IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.iam_managers.name} to manage users IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.iam_managers.name} to manage groups IN TENANCY where all {target.group.name ! = 'Administrators', target.group.name ! = '${oci_identity_group.net_sec_admins.name}'}",
      ]
    }
    
    resource "oci_identity_policy" "sys_admins" {
      name           = "SysAdmins.pl"
      description    = "SysAdmins.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = [
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to manage instance-family IN TENANCY where all {target.compartment.name=/*/, target.compartment.name!=/${var.app_tag}_${var.environment}_networks/}",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to manage object-family IN TENANCY where all {target.compartment.name=/*/, target.compartment.name!=/${var.app_tag}_${var.environment}_networks/}",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to manage volume-family IN TENANCY where all {target.compartment.name=/*/ , target.compartment.name!=/${var.app_tag}_${var.environment}_networks/}",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to use load-balancers IN TENANCY where all {target.compartment.name=/*/ , target.compartment.name!=/${var.app_tag}_${var.environment}_networks/}",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to use subnets IN TENANCY where target.compartment.name=/${var.app_tag}_${var.environment}_networks/",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to use vnics IN TENANCY where target.compartment.name=/${var.app_tag}_${var.environment}_networks/",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to use vnic-attachments IN TENANCY where target.compartment.name=/${var.app_tag}_${var.environment}_networks/",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to manage compartments in Tenancy where all {target.compartment.name=/*/ , target.compartment.name!=/${var.app_tag}_${var.environment}_networks/, target.compartment.name!=/Shared-Infra-Services/}",
        "ALLOW GROUP ${oci_identity_group.sys_admins.name} to read all-resources IN TENANCY",
      ]
    }
    
    resource "oci_identity_policy" "storage_admins" {
      name           = "StorageAdmins.pl"
      description    = "StorageAdmins.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = [
        "ALLOW GROUP ${oci_identity_group.storage_admins.name} to manage object-family IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.storage_admins.name} to manage volume-family IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.storage_admins.name} to read all-resources IN TENANCY",
      ]
    }
    
    resource "oci_identity_policy" "db_admins" {
      name           = "DBAdmins.pl"
      description    = "DBAdmins.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = [
        "ALLOW GROUP ${oci_identity_group.db_admins.name} manage database-family IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.db_admins.name} read all-resources IN TENANCY",
      ]
    }
    
    resource "oci_identity_policy" "network_admins" {
      name           = "NetworkAdmins.pl"
      description    = "NetworkAdmins.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = [
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage vcns IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage subnets IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage route-tables IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage dhcp-options IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage drgs IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage cross-connects IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage cross-connect-groups IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage virtual-circuits IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage vnics IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage vnic-attachments IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to manage load-balancers IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to use virtual-network-family IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.network_admins.name} to read all-resources IN TENANCY",
      ]
    }
    
    resource "oci_identity_policy" "net_sec_admins" {
      name           = "NetSecAdmins.pl"
      description    = "NetSecAdmins.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = [
        "ALLOW GROUP ${oci_identity_group.net_sec_admins.name} to manage security-lists IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.net_sec_admins.name} to manage internet-gateways IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.net_sec_admins.name} to manage cpes IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.net_sec_admins.name} to manage ipsec-connections IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.net_sec_admins.name} to use virtual-network-family IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.net_sec_admins.name} to manage load-balancers IN TENANCY",
        "ALLOW GROUP ${oci_identity_group.net_sec_admins.name} to read all-resources IN TENANCY",
      ]
    }
    
    resource "oci_identity_policy" "read_only" {
      name           = "ReadOnly.pl"
      description    = "ReadOnly.pl"
      compartment_id = "${var.tenancy_ocid}"
    
      statements = ["ALLOW GROUP ${oci_identity_group.read_only.name} to read all-resources IN TENANCY"]
    }
    
  3. Erstellen Sie eine Textdatei mit dem Namen groups.tf, und kopieren Sie den folgenden Code in die Datei.
    resource "oci_identity_group" "db_admins" {
      description = "Group for users allowed manage the Database resources in the tenancy."
      name        = "DBAdmins.grp"
    }
    resource "oci_identity_group" "iam_admin_managers" {
      description = "Group for users allowed to modify the Administrators and NetSecAdmins group."
      name        = "IAMAdminManagers.grp"
    }
    
    resource "oci_identity_group" "iam_managers" {
      description = "Group for users allowed to modify all users groups except the Administrators and NetSecAdmin group."
      name        = "IAMManagers.grp"
    }
    
    resource "oci_identity_group" "net_sec_admins" {
      description = "Administrators of the VCN’s, but restricted from the follow resources: vcns, subnets, route-tables, dhcp-options, drgs, drg-attachments, vnics, vnic-attachments."
      name        = "NetSecAdmins.grp"
    }
    
    resource "oci_identity_group" "network_admins" {
      description = "Administrators of the VCN’s, but restricted from the follow resources: security-lists, internet-gateways, cpes, ipsec-connections."
      name        = "NetworkAdmins.grp"
    }
    
    resource "oci_identity_group" "read_only" {
      description = "Viewing & Inspecting the tenancy configuration. Aim at Management and users in training before getting read/write access."
      name        = "ReadOnly.grp"
    }
    
    resource "oci_identity_group" "shared_infra_services_admins" {
      description = "Group Responsible for Managing the Shared-Infra-Services in the Tenancy."
      name        = "SharedInfraServicesAdmins.grp"
    }
    
    resource "oci_identity_group" "storage_admins" {
      description = "Group for users allowed manage the Storage resources in the tenancy."
      name        = "StorageAdmins.grp"
    }
    
    resource "oci_identity_group" "sys_admins" {
      description = "Group for users allowed manage the Compute and Storage resources in the tenancy. Tenant administrators should be in this group."
      name        = "SysAdmins.grp"
    }
    

Policys und Gruppen erstellen Terraform-Konfiguration

Erstellen Sie die Terraform-Konfigurationsdateien, um Variablen zu definieren, die von der Root-Datei an das Im-Modul übergeben werden, und um Daten dem Terraform-Benutzer zu melden.

  1. Erstellen Sie im Ordner vcn eine Textdatei mit dem Namen variables.tf, und kopieren Sie den folgenden Code In die Datei.
    variable "tenancy_ocid" {}
    
    variable "app_tag" {}
    
    variable "environment" {}
    
  2. Erstellen Sie eine Datei mit dem Namen iam_outputs.tf, und kopieren Sie den folgenden Code in die Datei.
    "output" "db_admins_id" {
      "value" = "${oci_identity_group.db_admins.id}"
    }
    
    "output" "iam_admin_managers_id" {
      "value" = "${oci_identity_group.iam_admin_managers.id}"
    }
    
    "output" "iam_managers_id" {
      "value" = "${oci_identity_group.iam_managers.id}"
    }
    
    "output" "net_sec_admins_id" {
      "value" = "${oci_identity_group.net_sec_admins.id}"
    }
    
    "output" "network_admins_id" {
      "value" = "${oci_identity_group.network_admins.id}"
    }
    
    "output" "read_only_id" {
      "value" = "${oci_identity_group.read_only.id}"
    }
    
    "output" "shared_infra_services_admins_id" {
      "value" = "${oci_identity_group.shared_infra_services_admins.id}"
    }
    
    "output" "storage_admins_id" {
      "value" = "${oci_identity_group.storage_admins.id}"
    }
    
    "output" "sys_admins_id" {
      "value" = "${oci_identity_group.sys_admins.id}"
    }