Questo documento descrive come utilizzare i tag per controllare l'accesso alle dashboard e alle policy di avviso di Cloud Monitoring. I tag sono coppie chiave-valore che crei e colleghi alle risorse. Combinando i tag con le condizioni di Identity and Access Management (IAM) o le policy di negazione, puoi limitare chi può modificare o eliminare dashboard e policy di avviso specifiche.
Pattern di controllo dell'accesso
Puoi implementare il controllo dell'accesso per dashboard e policy di avviso utilizzando uno dei seguenti pattern:
Controlla l'accesso alle risorse gestite da Terraform: utilizza i tag e le policy di negazione IAM in modo che le risorse taggate possano essere modificate solo da Terraform. Le risorse gestite da Terraform sono protette da modifiche manuali non approvate nella console o tramite altri client. Google Cloud
Controlla l'accesso alle risorse gestite dal team: utilizza tag per team e concessioni di ruoli IAM condizionali per assicurarti che solo i membri di un team specifico possano modificare o eliminare le dashboard e i criteri di avviso gestiti dal team.
Proteggere le risorse gestite da Terraform
Questa sezione descrive come utilizzare i tag e i criteri di negazione IAM in modo che i dashboard e i criteri di avviso taggati possano essere modificati o eliminati solo utilizzando un service account configurato per l'utilizzo di Terraform.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per configurare i tag e le policy di negazione IAM per il tuo progetto, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto o nell'organizzazione:
-
Crea tag:
Tag Administrator (
roles/resourcemanager.tagAdmin) -
Gestisci le policy di negazione IAM:
Amministratore policy di negazione (
roles/iam.denyAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Proteggere le risorse utilizzando una policy di rifiuto
Console Google Cloud
- Crea un tag che indichi che la risorsa è gestita da Terraform. Ad esempio, crea una chiave tag
edit_restrictioncon un valore tagterraform_only. Crea un criterio di negazione IAM che neghi le autorizzazioni di aggiornamento ed eliminazione a tutte le entità, ad eccezione del tuo account di servizio Terraform, quando la risorsa ha il tag
edit_restriction:terraform_only.La policy di negazione deve contenere le seguenti configurazioni:
- Autorizzazioni da negare:
monitoring.dashboards.updatemonitoring.dashboards.deletemonitoring.alertPolicies.updatemonitoring.alertPolicies.delete
- Condizione: la risorsa deve avere il tag
edit_restriction:terraform_only. - Esenzione: aggiungi l'identificatore dell'entità per il account di servizio Terraform all'elenco delle eccezioni della regola di negazione.
- Autorizzazioni da negare:
Crea la dashboard o il criterio di avviso che vuoi proteggere, quindi collega il tag alla risorsa.
Terraform
Per configurare le limitazioni utilizzando Terraform:
- Installa e configura Terraform per il tuo progetto.
- Crea la chiave e il valore del tag.
- Crea la policy di negazione IAM.
- Crea la criterio di avviso o la dashboard che vuoi proteggere. Per maggiori dettagli, vedi Creare policy di avviso utilizzando Terraform e Creare dashboard utilizzando Terraform.
- Associa il tag alla risorsa. Per collegare un tag a una dashboard o
a una criterio di avviso utilizzando Terraform, crea una risorsa
di associazione tag utilizzando
google_tags_tag_binding.
Ad esempio, la seguente configurazione di Terraform esegue le seguenti operazioni:
- Crea la chiave e il valore del tag.
- Crea una policy di negazione.
- Crea un criterio di avviso.
- Associa un tag al criterio di avviso.
Tieni presente che non puoi creare una risorsa e associarvi un tag nello stesso comando; devi creare la risorsa e l'associazione tag separatamente.
# Create the tag key.
resource "google_tags_tag_key" "lock_key" {
parent = "projects/PROJECT_ID"
short_name = "edit_restriction"
}
# Create the tag value.
resource "google_tags_tag_value" "restricted_value" {
parent = "tagKeys/${google_tags_tag_key.lock_key.name}"
short_name = "terraform_only"
}
# Define the IAM deny policy.
resource "google_iam_deny_policy" "terraform_lock" {
parent = urlencode(
"cloudresourcemanager.googleapis.com/projects/PROJECT_ID"
)
name = "terraform-exclusive-lock"
display_name = "Deny modifications except for Terraform service account"
rules {
deny_rule {
denied_principals = ["principalSet://goog/public:all"]
# Exempt the Terraform service account.
exception_principals = [
join("", [
"principal://iam.googleapis.com/projects/-/",
"serviceAccounts/TERRAFORM_SERVICE_ACCOUNT_EMAIL"
])
]
denied_permissions = [
"monitoring.googleapis.com/alertPolicies.update",
"monitoring.googleapis.com/alertPolicies.delete",
"monitoring.googleapis.com/dashboards.update",
"monitoring.googleapis.com/dashboards.delete"
]
denial_condition {
title = "is_restricted_resource"
expression = join("", [
"resource.matchTag(",
"'PROJECT_ID/edit_restriction', ",
"'terraform_only')"
])
}
}
}
}
# Create the alerting policy.
resource "google_monitoring_alert_policy" "protected_policy" {
display_name = "Restricted Alert Policy"
combiner = "OR"
conditions {
display_name = "High CPU"
condition_threshold {
filter = join(" AND ", [
"metric.type=\"compute.googleapis.com/instance/cpu/utilization\"",
"resource.type=\"gce_instance\""
])
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 0.9
}
}
}
# Bind the tag to the alerting policy.
resource "google_tags_tag_binding" "policy_binding" {
parent = join("", [
"//monitoring.googleapis.com/",
google_monitoring_alert_policy.protected_policy.name
])
tag_value = google_tags_tag_value.restricted_value.id
}
Configurare l'accesso con ambito del team
Supponiamo che tu sia l'amministratore di un progetto che monitora le applicazioni per
più team. Vuoi che i membri del team possano creare dashboard e
norme di avviso, ma modificare solo le risorse del proprio team. Non vuoi concedere ai membri del team il ruolo di Editor Monitoring (roles/monitoring.editor) perché questo ruolo concede l'autorizzazione per modificare tutte le risorse di monitoraggio nel progetto.
Questa sezione illustra come utilizzare i tag per concedere a un membro del team le autorizzazioni necessarie per modificare solo le dashboard e le norme di avviso di proprietà del team.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per configurare i tag e i ruoli IAM per il tuo progetto, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto o nell'organizzazione:
-
Crea tag:
Tag Administrator (
roles/resourcemanager.tagAdmin) -
Crea un ruolo personalizzato:
Amministratore ruoli (
roles/iam.roleAdmin) -
Gestisci i ruoli del progetto:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Applicare tag specifici per il team
Console Google Cloud
- Crea un tag per ogni team. Crea una nuova chiave tag
e poi crea i valori tag per quella chiave. Ad esempio, se crei
una chiave tag denominata
ownercon i valoriteam_aeteam_b, ottieni due tag:owner:team_aeowner:team_b. Registra l'ID e l'ID valore della chiave del tag per ogni tag. Crea un ruolo personalizzato denominato "Dashboard and Alerting Policy Creator" e aggiungi le seguenti autorizzazioni:
monitoring.alertPolicies.createmonitoring.alertPolicies.createTagBindingmonitoring.dashboards.createmonitoring.dashboards.createTagBindingresourcemanager.tagValueBindings.create
Questo ruolo ti consente di creare dashboard e criteri di avviso e applicare tag.
Concedi i seguenti ruoli a tutti i membri del team:
- Dashboard and Alerting Policy Creator (il ruolo personalizzato che hai creato)
- Visualizzatore Monitoring (
roles/monitoring.viewer) - Visualizzatore tag (
roles/resourcemanager.tagViewer)
Per ogni team, concedi ai membri del team i seguenti ruoli con una condizione IAM allegata:
- Tagga utente (
roles/resourcemanager.tagUser), che ti consente di applicare il tag del tuo team alle risorse. - Editor Monitoring (
roles/monitoring.editor), che ti consente di modificare le dashboard e le policy di avviso che hanno il tag del tuo team.
Aggiungi la condizione IAM alle concessioni di ruolo nel seguente modo:
- Tipo di condizione:
Tag - Operatore:
has value ID - keyID: KEY_ID
- valueID: TEAM_VALUE_ID
Trova l'ID chiave tag e l'ID valore in Resource Manager. Per saperne di più, consulta Accesso alle risorse taggate.
- Tagga utente (
Crea la dashboard o il criterio di avviso a cui vuoi limitare l'accesso, quindi collega il tag alla risorsa.
Terraform
Per configurare l'accesso con ambito di team utilizzando Terraform:
- Installa e configura Terraform per il tuo progetto.
- Crea la chiave e il valore del tag per ogni team.
- Crea un ruolo personalizzato e aggiungi le seguenti autorizzazioni:
monitoring.alertPolicies.createmonitoring.alertPolicies.createTagBindingmonitoring.dashboards.createmonitoring.dashboards.createTagBindingresourcemanager.tagValueBindings.create
- Concedi il ruolo personalizzato, il ruolo Visualizzatore Monitoring
(
roles/monitoring.viewer) e il ruolo Visualizzatore tag (roles/resourcemanager.tagViewer) a tutti i membri. - Per ogni team, concedi il ruolo Tag User (
roles/resourcemanager.tagUser) e il ruolo Editor monitoraggio (roles/monitoring.editor) con un binding condizionale basato sul valore del tag del team. - Crea la criterio di avviso o la dashboard a cui vuoi limitare l'accesso. Per maggiori dettagli, vedi Creare dashboard utilizzando Terraform e Creare policy di avviso utilizzando Terraform.
- Associa il tag alla risorsa. Per collegare un tag a una dashboard o
a una criterio di avviso utilizzando Terraform, crea una risorsa
di associazione tag utilizzando
google_tags_tag_binding.
Ad esempio, la seguente configurazione di Terraform esegue le seguenti operazioni:
- Crea una chiave e un valore del tag.
- Crea un ruolo personalizzato.
- Applica i binding IAM che concedono i ruoli richiesti e le autorizzazioni condizionali.
- Crea una dashboard.
- Collega un tag alla dashboard per stabilire la proprietà del team.
Tieni presente che non puoi creare una risorsa e associarvi un tag nello stesso comando; devi creare la risorsa e l'associazione tag separatamente.
# Create the tag key.
resource "google_tags_tag_key" "res_tag_key" {
parent = "projects/PROJECT_ID"
short_name = "owner"
description = "Identifies the team that owns the resource"
}
# Create the tag value.
# Note: You must create a tag value resource for each team.
resource "google_tags_tag_value" "team_a_value" {
parent = "tagKeys/${google_tags_tag_key.res_tag_key.name}"
short_name = "team_a"
description = "Team A ownership tag value"
}
# Create the custom Creator role.
resource "google_project_iam_custom_role" "creator_role" {
role_id = "dashboardAndPolicyCreator"
title = "Dashboard and Alerting Policy Creator"
permissions = [
"monitoring.alertPolicies.create",
"monitoring.alertPolicies.createTagBinding",
"monitoring.dashboards.create",
"monitoring.dashboards.createTagBinding",
"resourcemanager.tagValueBindings.create"
]
}
# Grant the Custom Creator role to all members.
resource "google_project_iam_binding" "creator_grant" {
project = "PROJECT_ID"
role = join("/", [
"projects",
"PROJECT_ID",
"roles",
google_project_iam_custom_role.creator_role.role_id
])
members = ["group:ALL_MEMBERS_GROUP_EMAIL"]
}
# Grant the Monitoring Viewer role to all members.
resource "google_project_iam_binding" "viewer_grant" {
project = "PROJECT_ID"
role = "roles/monitoring.viewer"
members = ["group:ALL_MEMBERS_GROUP_EMAIL"]
}
# Grant the Tag Viewer role to all members.
resource "google_project_iam_binding" "tag_viewer_grant" {
project = "PROJECT_ID"
role = "roles/resourcemanager.tagViewer"
members = ["group:ALL_MEMBERS_GROUP_EMAIL"]
}
# Grant the Tag User role with a condition.
# Note: You have to configure this team-specific binding for each team.
resource "google_project_iam_binding" "tag_user_grant" {
project = "PROJECT_ID"
role = "roles/resourcemanager.tagUser"
members = ["group:TEAM_A_GROUP_EMAIL"]
condition {
title = "restrict_to_team_a"
description = "Allow Tag User only for team_a tag"
expression = join("", [
"resource.matchTagId('",
google_tags_tag_key.res_tag_key.name,
"', '",
google_tags_tag_value.team_a_value.id,
"')"
])
}
}
# Grant the Monitoring Editor role with a condition.
# Note: You have to configure this team-specific binding for each team.
resource "google_project_iam_binding" "editor_grant" {
project = "PROJECT_ID"
role = "roles/monitoring.editor"
members = ["group:TEAM_A_GROUP_EMAIL"]
condition {
title = "restrict_to_team_a"
description = "Allow Monitoring Editor only for team_a tag"
expression = join("", [
"resource.matchTagId('",
google_tags_tag_key.res_tag_key.name,
"', '",
google_tags_tag_value.team_a_value.id,
"')"
])
}
}
# Create the dashboard.
resource "google_monitoring_dashboard" "example_dashboard" {
dashboard_json = jsonencode({
"displayName": "System Health Overview",
"gridLayout": { "columns": "2", "widgets": [] }
})
}
# Apply the tag binding to the dashboard to give team A ownership.
resource "google_tags_tag_binding" "dashboard_tag" {
parent = join("", [
"//monitoring.googleapis.com/",
google_monitoring_dashboard.example_dashboard.id
])
tag_value = google_tags_tag_value.team_a_value.id
}
Gestire i tag nelle dashboard e nei criteri di avviso
Puoi allegare, elencare e rimuovere i tag nei dashboard e nelle norme di avviso
utilizzando la console Google Cloud o l'interfaccia a riga di comandogcloud.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per gestire i tag sulle risorse Cloud Monitoring, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto o nell'organizzazione:
- Monitoring Viewer (
roles/monitoring.viewer) - Visualizzatore tag (
roles/resourcemanager.tagViewer) - Un ruolo personalizzato con le autorizzazioni minime necessarie per le operazioni sui tag che ti servono e il tipo di risorsa su cui ti servono. Per ulteriori informazioni, espandi la sezione Autorizzazioni richieste.
Per visualizzare le autorizzazioni richieste per ogni operazione sui tag quando configuri il ruolo personalizzato, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per ogni operazione sui tag elencata, sono necessarie le seguenti autorizzazioni:
- Associa tag alle dashboard:
resourcemanager.tagValueBindings.createmonitoring.dashboards.createTagBinding
- Associa tag alle policy di avviso:
resourcemanager.tagValueBindings.createmonitoring.alertPolicies.createTagBinding
- Rimuovi i tag dalle dashboard:
resourcemanager.tagValueBindings.deletemonitoring.dashboards.deleteTagBinding
- Rimuovi i tag dai criteri di avviso:
resourcemanager.tagValueBindings.deletemonitoring.alertPolicies.deleteTagBinding
Associa tag
Per collegare un tag a una dashboard o a un criterio di avviso:
Console Google Cloud
Seleziona il tipo di risorsa a cui vuoi allegare i tag:
Dashboard
-
Nella console Google Cloud , vai alla pagina Dashboard:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Seleziona il dashboard a cui vuoi allegare un tag.
- Fai clic su Tag.
- Nella finestra di dialogo, nella sezione Tag diretti, individua il tag selezionando
l'organizzazione o il progetto in cui è stato creato. Ad esempio, per utilizzare
un tag creato a livello di progetto, scegli Seleziona il progetto corrente
come ambito.
Puoi anche cercare manualmente l'ID progetto, organizzazione o tag selezionando l'opzione Inserimento manuale.
- Seleziona la coppia chiave-valore appropriata, quindi fai clic su Salva.
- Viene visualizzata una finestra di dialogo che conferma le modifiche. Fai clic su Conferma per finalizzare le modifiche.
Criteri di avviso
-
Nella console Google Cloud , vai alla pagina notifications Policy:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Seleziona la criterio di avviso a cui vuoi collegare un tag.
- Fai clic su Tag.
- Nella finestra di dialogo, nella sezione Tag diretti, individua il tag selezionando
l'organizzazione o il progetto in cui è stato creato. Ad esempio, per utilizzare
un tag creato a livello di progetto, scegli Seleziona il progetto corrente
come ambito.
Puoi anche cercare manualmente l'ID progetto, organizzazione o tag selezionando l'opzione Inserimento manuale.
- Seleziona la coppia chiave-valore appropriata, quindi fai clic su Salva.
- Viene visualizzata una finestra di dialogo che conferma le modifiche. Fai clic su Conferma per finalizzare le modifiche.
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- TAG_VALUE_ID: l'ID permanente o il nome con spazio dei nomi del valore del tag. Ad esempio,
tagValues/4567890123. Per ulteriori informazioni sugli identificatori dei tag, vedi Definizioni e identificatori dei tag. - PARENT: il nome completo della risorsa principale. Ad
esempio,
//monitoring.googleapis.com/projects/PROJECT_ID_OR_NUMBER/dashboards/DASHBOARD_IDo//monitoring.googleapis.com/projects/PROJECT_ID_OR_NUMBER/alertPolicies/POLICY_ID.
Esegui il comando
resource-manager tags bindings create:
Linux, macOS o Cloud Shell
gcloud resource-manager tags bindings create \ --tag-value=TAG_VALUE_ID \ --parent=PARENT
Windows (PowerShell)
gcloud resource-manager tags bindings create ` --tag-value=TAG_VALUE_ID ` --parent=PARENT
Windows (cmd.exe)
gcloud resource-manager tags bindings create ^ --tag-value=TAG_VALUE_ID ^ --parent=PARENT
Dovresti ricevere una risposta simile alla seguente:
'@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding name: tagBindings/%2F%2Fmonitoring.googleapis.com%2Fprojects%2F1234567890%2FalertPolicies%2F0987654321/tagValues/1029384756 parent: //monitoring.googleapis.com/projects/1234567890/alertPolicies/0987654321 tagValue: tagValues/1029384756 tagValueNamespacedName: my-project/owner/team_a
Visualizzare i tag
Per visualizzare i tag collegati a una dashboard o a un criterio di avviso:
Console Google Cloud
Seleziona il tipo di risorsa per cui vuoi visualizzare i tag:
Dashboard
-
Nella console Google Cloud , vai alla pagina Dashboard:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Seleziona la dashboard per cui vuoi visualizzare i tag.
- Fai clic su Tag. Si apre una finestra di dialogo che elenca tutti i tag allegati.
Criteri di avviso
-
Nella console Google Cloud , vai alla pagina notifications Policy:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Seleziona la criterio di avviso per la quale vuoi visualizzare i tag.
- Fai clic su Tag. Si apre una finestra di dialogo che elenca tutti i tag allegati.
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- PARENT: il nome completo della risorsa principale. Ad
esempio,
//monitoring.googleapis.com/projects/PROJECT_ID_OR_NUMBER/dashboards/DASHBOARD_IDo//monitoring.googleapis.com/projects/PROJECT_ID_OR_NUMBER/alertPolicies/POLICY_ID.
Esegui il comando
resource-manager tags bindings list:
Linux, macOS o Cloud Shell
gcloud resource-manager tags bindings list \ --parent=PARENT
Windows (PowerShell)
gcloud resource-manager tags bindings list ` --parent=PARENT
Windows (cmd.exe)
gcloud resource-manager tags bindings list ^ --parent=PARENT
Per visualizzare i tag ereditati dalla risorsa, aggiungi il flag --effective. L'aggiunta di questo flag restituisce una risposta simile alla seguente:
namespacedTagKey: my-project/owner namespacedTagValue: my-project/owner/team_a tagKey: tagKeys/5647382910 tagValue: tagValues/1029384756 inherited: true
Se tutti i tag sono collegati esplicitamente alla risorsa e non vengono ereditati tag, il campo inherited viene omesso.
Rimuovere i tag da una risorsa
Per rimuovere un tag collegato a una dashboard o a una criterio di avviso, devi eliminare l'associazione del tag. La rimozione di un tag da una risorsa non comporta l'eliminazione del tag. Per istruzioni su come eliminare un tag, consulta la sezione Elimina i tag.
Console Google Cloud
Seleziona il tipo di risorsa da cui vuoi rimuovere i tag:
Dashboard
-
Nella console Google Cloud , vai alla pagina Dashboard:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Seleziona il dashboard da cui vuoi rimuovere un tag.
- Fai clic su Tag.
- Nella finestra di dialogo, tieni il puntatore del mouse sul tag da rimuovere e fai clic su Elimina elemento. Fai clic su Salva per salvare le modifiche.
- Viene visualizzata una finestra di dialogo che conferma le modifiche. Fai clic su Conferma per finalizzare le modifiche.
Criteri di avviso
-
Nella console Google Cloud , vai alla pagina notifications Policy:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.
- Seleziona la criterio di avviso da cui vuoi rimuovere un tag.
- Fai clic su Tag.
- Nella finestra di dialogo, tieni il puntatore del mouse sul tag da rimuovere e fai clic su Elimina elemento. Fai clic su Salva per salvare le modifiche.
- Viene visualizzata una finestra di dialogo che conferma le modifiche. Fai clic su Conferma per finalizzare le modifiche.
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- TAG_VALUE_ID: l'ID permanente o il nome con spazio dei nomi del valore del tag. Ad esempio,
tagValues/4567890123. Per ulteriori informazioni sugli identificatori dei tag, vedi Definizioni e identificatori dei tag. - PARENT: il nome completo della risorsa principale. Ad
esempio,
//monitoring.googleapis.com/projects/PROJECT_ID_OR_NUMBER/dashboards/DASHBOARD_IDo//monitoring.googleapis.com/projects/PROJECT_ID_OR_NUMBER/alertPolicies/POLICY_ID.
Esegui il comando
resource-manager tags bindings delete:
Linux, macOS o Cloud Shell
gcloud resource-manager tags bindings delete \ --tag-value=TAG_VALUE_ID \ --parent=PARENT
Windows (PowerShell)
gcloud resource-manager tags bindings delete ` --tag-value=TAG_VALUE_ID ` --parent=PARENT
Windows (cmd.exe)
gcloud resource-manager tags bindings delete ^ --tag-value=TAG_VALUE_ID ^ --parent=PARENT
Limitazioni
Non puoi filtrare le dashboard o i criteri di avviso in base ai tag allegati. Se vuoi elencare le risorse associate a un tag specifico, ti consigliamo di allegare un'etichetta insieme al tag e filtrare in base all'etichetta. Per informazioni sull'aggiunta di etichette, vedi Annotare gli avvisi con le etichette e Aggiungere o rimuovere etichette nelle dashboard.