Questa guida descrive come configurare l'accesso sensibile al contesto per proteggere l'accesso all'account di servizio alle API in base ai livelli di accesso che definisci. Cloud de Confiance by S3NS
Limitazioni
Ai criteri di accesso sensibile al contesto per gli account di servizio si applicano le seguenti limitazioni:
Gli attributi basati sulla rete o sull'indirizzo IP non possono essere utilizzati per i binding dei service account se questi verranno utilizzati per le esecuzioni dei flussi di lavoro e Cloud Scheduler.
Le connessioni ai cluster GKE privati, utilizzando
kubectl, e a Cloud SQL, utilizzando Auth Proxy, non possono essere bloccate dalle norme di accesso sensibile al contesto.Se un livello di accesso associato a un account di servizio contiene attributi non supportati, ad esempio attributi
Device, l'accesso API viene negato.I livelli di accesso con ambito non sono supportati per i service account.
Se utilizzi Cloud Build e Cloud Run, ti consigliamo di utilizzare le seguenti funzionalità VPC integrate:
Per Cloud Run, utilizza l'accesso VPC serverless.
Per Cloud Build, utilizza i pool privati.
Prima di iniziare
- Assicurati di avere un'Cloud de Confiance organizzazione e almeno un Cloud de Confiance progetto.
-
Installa Google Cloud CLI.
-
Configura gcloud CLI per utilizzare la tua identità federata.
Per ulteriori informazioni, vedi Accedi a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Cloud de Confiance progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Cloud de Confiance :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Cloud de Confiance che stai creando. -
Seleziona il progetto Cloud de Confiance che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Cloud de Confiance .
-
Verifica che la fatturazione sia attivata per il tuo progetto Cloud de Confiance .
- Aggiorna i componenti di Google Cloud CLI:
gcloud components update --quiet
- Crea un account di servizio nel tuo progetto se non ne hai già uno. Questo account di servizio è la destinazione della policy di accesso sensibile al contesto.
Ruoli obbligatori
Questa sezione descrive i ruoli Identity and Access Management (IAM) necessari per utilizzare l'accesso sensibile al contesto.
Ruoli a livello di progetto
Per ottenere l'autorizzazione
necessaria a livello di progetto,
chiedi all'amministratore di concederti il ruolo IAM Service Account Admin (roles/iam.serviceAccountAdmin) nell'account utente o nel account di servizio.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'autorizzazione
the required permissions
necessaria per
a livello di progetto.
Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Ruoli a livello di organizzazione
Per ottenere l'autorizzazione necessaria a livello di organizzazione, chiedi all'amministratore di concederti i seguenti ruoli IAM sull'account utente o sul account di servizio:
- Cloud Access Binding Admin (
roles/accesscontextmanager.gcpAccessAdmin) - Access Context Manager Admin (
roles/accesscontextmanager.policyAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'autorizzazione
the required permissions
necessaria a livello di organizzazione.
Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Associare le policy di accesso sensibile al contesto a diversi livelli di risorse
Puoi associare criteri di accesso sensibile al contesto con la stessa modalità di applicazione a risorse che si trovano a diversi livelli della gerarchia delle risorse. Quando una risorsa tenta di accedere, l'accesso sensibile al contesto utilizza il criterio associato a quella risorsa prima di tentare di utilizzare un criterio associato a una risorsa di livello superiore.
Ad esempio, puoi associare un criterio in modalità di applicazione direttamente a un account di servizio e un criterio in modalità di applicazione diverso al progetto che contiene il account di servizio. Quando il account di servizio tenta di accedere alle risorse, l'accesso sensibile al contesto valuta il criterio associato al account di servizio. Per gli altri service account nel progetto a cui non sono associati criteri, Accesso sensibile al contesto valuta il criterio in modalità di applicazione associato al progetto. Lo stesso vale se la modalità di applicazione è impostata su dry run sia per la policy a livello di progetto sia per la policy a livello di service account.
Puoi utilizzare più policy per implementare in modo incrementale e selettivo le policy. Ad esempio, puoi:
- Associa una policy in modalità dry run a livello di progetto e assicurati che funzioni come previsto controllando gli eventi di accesso negato in Cloud Audit Logs.
- Associa il criterio in modalità di applicazione forzata solo a service account specifici.
- Associa il criterio in modalità di applicazione a livello di progetto e associa un criterio meno restrittivo in modalità di applicazione a service account specifici in base alle necessità.
Attributi dei livelli di accesso per i service account
Questa sezione elenca i livelli di accesso supportati per i service account.
Per i service account sono supportati i seguenti attributi:
- Subnet IP, che si basano sull'indirizzo IP pubblico.
- Reti VPC, basate sull'indirizzo IP privato.
-
Geolocalizzazione, che si basa sull'indirizzo IP pubblico.
Quando il account di servizio effettua una richiesta alle API Cloud de Confiance, la richiesta viene valutata dall'accesso sensibile al contesto e l'indirizzo IP della richiesta viene confrontato con gli indirizzi IP specificati nel criterio di accesso sensibile al contesto. Se gli indirizzi IP corrispondono, la chiamata API è consentita. Se l'indirizzo IP non corrisponde, la chiamata API viene rifiutata.
-
Un livello di accesso personalizzato con un'espressione Common Expression Language (CEL). L'espressione deve restituire
trueper consentire l'accesso efalseper negarlo.La seguente espressione CEL è utile per limitare l'accesso tramite service account.
L'espressione restituisce
truese la richiesta ha avuto origine da uno o più numeri di progetto specificati:expression: "originatesFromProjects(origin, [PROJECT_NUMBER, ...])"originatesFromProjectsverifica se la richiesta proviene da una rete associata al progetto specificato e se proviene da un indirizzo IP privato. -
Ora del giorno, basata su ora e data della richiesta in un fuso orario specificato.
Per ulteriori informazioni, vedi Configurazione delle condizioni di accesso per ora e giorno.
Crea un livello di accesso
Questa sezione descrive come creare un livello di accesso all'interno della tua organizzazione. I livelli di accesso definiscono le condizioni in base alle quali è consentito l'accesso.
Segui le istruzioni per creare un livello di accesso di base o creare un livello di accesso personalizzato.
Prendi nota del nome completo del livello di accesso, che ha il formato:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
Crea un'associazione di accesso
Associa il livello di accesso al account di servizio selezionato. In questo modo vengono applicate le condizioni definite nel livello di accesso. Puoi associare il livello di accesso a un singolo account di servizio o a tutti i service account all'interno di un progetto.
Associa il livello di accesso a un account di servizio specifico
Questa sezione descrive come associare il livello di accesso a un service account specifico.
gcloud
Associa il livello di accesso a un account di servizio utilizzando gcloud CLI.
gcloud access-context-manager cloud-bindings create \
--organization=ORGANIZATION_ID \
--service-account=SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.s3ns.iam.gserviceaccount.com \
--level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Sostituisci quanto segue:
ORGANIZATION_ID: l' Cloud de Confiance ID organizzazioneSERVICE_ACCOUNT_NAME: il nome, non l'email, del account di servizio di destinazioneSERVICE_ACCOUNT_PROJECT_ID: l'ID del progetto che contiene il account di servizio di destinazionePOLICY_ID: l'ID del criterio di accesso di Gestore contesto accessoACCESS_LEVEL_NAME: il nome del livello di accesso che hai creatoPer utilizzare l'accesso sensibile al contesto senza applicare forzatamente il livello di accesso e senza impedire l'accesso, puoi associare il livello di accesso in modalità di prova.
API REST
Per associare il livello di accesso a un account di servizio specifico utilizzando l'API REST, esegui questo comando:
Crea un file
request.jsoncon il seguente contenuto:{ "principal": { "serviceAccount": "SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.s3ns.iam.gserviceaccount.com" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Sostituisci quanto segue:
SERVICE_ACCOUNT_NAME: il nome, non l'email, del account di servizio di destinazioneSERVICE_ACCOUNT_PROJECT_ID: l'ID del progetto che contiene il account di servizio di destinazionePOLICY_ID: l'ID della policy di accesso di Gestore contesto accessoACCESS_LEVEL_NAME: il nome del livello di accesso che hai creato
Esegui questo comando:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto che utilizzi per effettuare le chiamate APIORGANIZATION_ID: l'ID della tua Cloud de Confiance organizzazione.
Associa il livello di accesso a tutti i service account in un progetto
Questa sezione descrive come associare il livello di accesso a tutti gli account di servizio in un progetto.
gcloud
Per associare il livello di accesso a tutti i service account di un progetto utilizzando gcloud CLI, esegui questo comando:
gcloud access-context-manager cloud-bindings create \ --organization=ORGANIZATION_ID \ --service-account-project-number=PROJECT_NUMBER \ --level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Sostituisci quanto segue:
ORGANIZATION_ID: l' Cloud de Confiance ID organizzazionePROJECT_NUMBER: il numero del progetto che contiene tutti i service account a cui vuoi associare l'accessoPOLICY_ID: l'ID del criterio di accesso di Gestore contesto accessoACCESS_LEVEL_NAME: il nome del livello di accesso che hai creato.
API REST
Per associare il livello di accesso a tutti i service account di un progetto utilizzando l'API REST:
Crea un file
request.jsoncon il seguente contenuto:{ "principal": { "serviceAccountProjectNumber": "PROJECT_NUMBER" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Sostituisci quanto segue:
PROJECT_NUMBER: il numero del progetto che contiene tutti i service account a cui vuoi associare l'accessoPOLICY_ID: l'ID della policy di accesso di Gestore contesto accessoACCESS_LEVEL_NAME: il nome del livello di accesso che hai creato.
Esegui questo comando:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto che utilizzi per effettuare le chiamate APIORGANIZATION_ID: l' Cloud de Confiance ID organizzazione
Per utilizzare l'accesso sensibile al contesto senza applicare forzatamente il livello di accesso e negare l'accesso, puoi associare il livello di accesso in modalità di prova.
La risposta dell'API per l'operazione di creazione del binding include il nome del binding, che contiene l'ID univoco del binding.
Utilizzare la modalità dry run
Puoi associare il livello di accesso in modalità dry run. Quando utilizzi la modalità dry run, i tuoi service account possono continuare ad accedere alle risorse senza applicazione. Tuttavia, se i tuoi service account tentano di accedere in violazione del livello di accesso, Accesso sensibile al contesto registra la violazione in Cloud Audit Logs.
Associa il livello di accesso in modalità dry run
gcloud
Per associare il livello di accesso in modalità dry run, sostituisci il parametro --level
con --dry-run-level, formattato nel seguente modo:
--dry-run-level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
API REST
Per associare il livello di accesso in modalità di prova, crea il file request.json con
il seguente contenuto:
{
"principal": {
"serviceAccountProjectNumber": "TARGET_PROJECT_NUMBER"
},
"dryRunAccessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
}
Sostituisci quanto segue:
TARGET_PROJECT_NUMBER: il numero del progetto di destinazionePOLICY_ID: l'ID del criterio di accesso di Gestore contesto accessoACCESS_LEVEL_NAME: il nome del livello di accesso
Controllare Cloud Audit Logs
Questa sezione descrive come controllare Cloud Audit Logs per i rifiuti di accesso in modalità dry run per il tuo account di servizio. Per scoprire di più sulla ricerca delle voci in modalità dry run in Cloud Audit Logs, consulta Visualizzare i log della modalità dry run.
Console
Per visualizzare i negazioni di accesso all'account di servizio in modalità dry run di Cloud Audit Logs utilizzando la console Cloud de Confiance , segui questi passaggi:
Nella console Cloud de Confiance , vai alla pagina Esplora log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
Nella console Cloud de Confiance , seleziona il progetto o l'organizzazione.
Nel campo Query log, inserisci la seguente query:
protoPayload.serviceName="contextawareaccess.googleapis.com" protoPayload.metadata.dryRunEvaluationResult:DENIED SEARCH("SERVICE_ACCOUNT_NAME")Nel selettore dell'intervallo di tempo, scegli un periodo di tempo relativo predefinito, ad esempio Ultimi 30 minuti, Ultima ora o Ultime 24 ore, oppure specifica un intervallo personalizzato.
gcloud
Per visualizzare i rifiuti di accesso al account di servizio in modalità di simulazione di Cloud Audit Logs utilizzando gcloud CLI:
gcloud logging read \
'protoPayload.serviceName="contextawareaccess.googleapis.com" AND
protoPayload.metadata.dryRunEvaluationResult:DENIED AND
SEARCH("SERVICE_ACCOUNT_NAME")' \
--organization=ORGANIZATION_ID
Sostituisci quanto segue:
ORGANIZATION_ID: l'ID dell'organizzazioneSERVICE_ACCOUNT_NAME: il nome del service account
Il comando gcloud logging read supporta il flag --freshness per visualizzare
le informazioni di logging in intervalli di tempo relativi. Ad esempio, aggiungendo
--freshness=3h al comando, puoi visualizzare le voci di log della modalità di prova
nelle ultime 3 ore.
Risoluzione dei problemi
Questa sezione descrive come risolvere i problemi relativi all'accesso sensibile al contesto per gli account di servizio.
Risoluzione dei problemi generali
Esamina Cloud Audit Logs.
Utilizza la seguente query di log ed esamina le voci di log per ulteriori informazioni.
protoPayload.serviceName="contextawareaccess.googleapis.com"
Esamina il nome della risorsa del livello di accesso che Accesso sensibile al contesto segnala quando registra gli eventi di applicazione.
Assicurati che il livello di accesso sia una risorsa a livello di organizzazione.
Assicurati che il livello di accesso nel criterio di accesso sensibile al contesto si basi su attributi supportati per i service account.
Verifica che la policy di accesso sensibile al contesto sia associata al account di servizio previsto.
Assicurati che l'identità del tuo utente non sia limitata da un criterio di accesso sensibile al contesto. Ciò può accadere quando un'identità utente è membro di un gruppo Google a cui è associato un criterio di accesso sensibile al contesto. Questa norma potrebbe limitare l'accesso degli utenti, impedendo a sua volta il flusso di chiamate all'account del servizio.
Contatta l'amministratore della sicurezza.
Accesso negato
L'accesso è negato per i seguenti motivi:
Hai associato il criterio di accesso sensibile al contesto in modalità di applicazione forzata anziché in modalità di prova.
Anziché l'applicazione forzata, puoi utilizzare la modalità dry run per consentire ai service account di accedere alle risorse e registrare gli eventi di applicazione forzata senza negare effettivamente l'accesso alle risorse. Inoltre, puoi seguire le istruzioni generali per la risoluzione dei problemi.
Il livello di accesso deve essere aggiornato per includere più origini. Ad esempio, viene utilizzato un indirizzo IP che non era incluso nel livello di accesso al momento della creazione.
Passaggi successivi
- Scopri come gestire i binding di accesso.