Creazione di criteri e gruppi

I criteri e i gruppi controllano l'accesso alle risorse all'interno della tenancy.

Informazioni su criteri e gruppi

Per gestire l'accesso alle risorse, i criteri vengono applicati agli utenti membri di un gruppo. I criteri controllano l'accesso alle risorse.

I profili dei criteri applicano i criteri riportati di seguito ai membri del gruppo.

  • Criterio ReadOnly: il criterio ReadOnly viene applicato ai membri del gruppo ReadOnly. Il gruppo ReadOnly viene utilizzato dai revisori e dai nuovi membri. I membri hanno accesso in sola lettura a tutte le risorse nella tenancy e non possono utilizzare o gestire altre risorse. Questo criterio è più restrittivo.
  • Criterio DBAdmin: il criterio DBAdmin viene applicato ai membri del gruppo DBAdmins. I membri di questo criterio e gruppo hanno accesso in lettura a tutte le risorse nella tenancy e possono gestire e utilizzare le risorse che fanno parte della famiglia di database.
  • Criterio IAMAdminManager: il criterio IAMAdminManager viene applicato ai membri del gruppo IAMAdminManagers. I membri del gruppo determinano quali utenti possono essere membri dei gruppi Amministratore e NetSecAdmins.
  • Criterio StorageAdmin: il criterio StorageAdmin viene applicato ai membri del gruppo StorageAdmin. I membri di questo gruppo possono gestire oggetti e volumi nella tenancy. Hanno inoltre accesso in sola lettura a tutti gli altri oggetti nella tenancy.
  • Criterio NetworkAdmin: il criterio NetworkAdmin si applica ai membri del gruppo NetworkAdmin. Questo gruppo può gestire le risorse di rete nella tenancy e usare le risorse di rete virtuali. Hanno inoltre accesso in sola lettura a tutti gli altri oggetti nella tenancy.
  • Criterio SysAdmin: il criterio SysAdmin si applica ai membri del gruppo SysAdmin. I membri di questo gruppo possono gestire istanze, oggetti, volumi e compartimenti non di rete nella tenancy. Possono utilizzare subnet non di rete, schede di interfaccia di rete virtuale (VNICs), allegati VNIC e istanze load balancer nella tenancy. Hanno accesso in sola lettura a tutti gli altri oggetti nella tenancy.

Definire le variabili dei criteri e dei gruppi

Creare i file di configurazione del modulo IAM (Identity and Access Management) che definiscono criteri e gruppi.

  1. Modifica le directory nella cartella iam.
  2. Creare un file di testo denominato policies.tf e copiare il codice seguente nel file.
    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. Creare un file di testo denominato groups.tf e copiare il codice seguente nel file.
    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"
    }
    

Creare i criteri e la configurazione di Terraform dei gruppi

Creare i file di configurazione Terraform per definire le variabili passate dal file radice al modulo iam e per segnalare i dati all'utente Terraform.

  1. Nella cartella vcn creare un file di testo denominato variables.tf e copiare il seguente codice nel file.
    variable "tenancy_ocid" {}
    
    variable "app_tag" {}
    
    variable "environment" {}
    
  2. Creare un file denominato iam_outputs.tf e copiare il codice seguente nel file.
    "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}"
    }