Vai al contenuto principale

IAM Policy

Introduzione

Una policy IAM è un modo per permettere o negare agli utenti di eseguire determinate azioni in un progetto Cubbit.

In Cubbit si gestisce l'accesso creando delle policy e associandole alle identità IAM (utenti o gruppi di utenti).

Ogni volta che un utente IAM effettua una richiesta, Cubbit valuta le policy associate per permettere o negare l'accesso alla risorsa.

Le policy IAM definiscono le autorizzazioni per le azioni, indipendentemente dal metodo utilizzato per operare. Ad esempio, se una policy consente l'azione GetUser, un utente con quella policy può ottenere informazioni sull'utente dalla Cubbit Console o dall'API Cubbit.

Tipi di policy

Cubbit supporta 2 diversi tipi di policy:

  • Policy basate sull'identità: Collegano le policy alle identità IAM (utenti o gruppi a cui gli utenti appartengono). Le policy basate sull'identità concedono permessi a un'identità.
  • ACL: Utilizzare le ACL per controllare quali utenti di altri progetti possono accedere alla risorsa a cui è collegata l'ACL (per maggiori informazioni, vedi la sezione dedicata). (consultate la sezione dedicata)

Policy basate sull'identità

Le policy basate sull'identità sono documenti JSON che descrivono dei permessi che controllano quali azioni un'identità può eseguire, su quali risorse.

policy applied

Policy e utente root

L'utente root ha per default tutti i permessi su tutte le risorse del progetto. Questa policy non può essere modificata o cancellata. Inoltre, è impossibile assegnare altre policy all'utente root.

Policy preimpostate

Quando si crea un progetto, vengono generate alcune policy predefinite:

  • Owner: solo l'utente root può essere l'assegnatario di questa policy. Questo gli consente di eseguire qualsiasi azione su qualsiasi risorsa del progetto.
  • Admin: è una policy per super utenti. Assegnando questa policy a un utente si dà a tale utente gli stessi poteri dell'owner.
  • Member: questa policy consente all'utente di eseguire la maggior parte delle azioni su S3 e IAM. L'utente non può aggiornare o eliminare le impostazioni del progetto e assegnare le policy.
  • ReadOnly: questa policy consente all'utente di leggere solo l'entità di un progetto.

Se si dispone dell'autorizzazione giusta, è possibile creare tutte le combinazioni di policy desiderate.

Definizione delle policy

Le policy sono memorizzate in Cubbit come documenti JSON. Quando si crea una policy JSON, IAM esegue una convalida della policy per aiutarti a creare una policy efficace. IAM identifica gli errori di sintassi JSON e l'applicabilità formale della policy, cioè se la risorsa può essere oggetto dell'azione.

Struttura JSON della policy

Ecco come viene definita una policy in Cubbit

{
"id": "a912ec9a-4623-11ed-b878-0242ac120002",
"syntax_version": "2022-10-07", // Version of the document syntax
"name": "Unique Policy Name",
"description": "This is a generic description for the policy",
"statement": [
{
"effect": "allow", // or "deny"
"action": [
"iam:ListUsers"
],
"resource": [
"crn:region1:iam:b562b6be-cac4-4d2c-840c-fa266228a30f:35b9c04e-d787-4223-8e5a-7847cfbade66:170bcefb-68f5-479f-9d1e-e8553eaaccb9:project:170bcefb-68f5-479f-9d1e-e8553eaaccb9"
]
}
]
}

Effect

allow (letteralmente: permettere) o deny (letteralmente: negare) come valore di stringa

Action

Il campo action (letteralmente: azione) è un elenco di stringhe contenenti l'azione da consentire. Ogni azione inizia con il servizio di dominio, seguito dal separatore : e poi dal nome dell'azione.

Per un elenco dettagliato di tutte le azioni possibili, consulta la sezione dedicata di seguito.

Resource - CRN

Il campo resoure contiene un elenco di possibili CRN (Cubbit Resource Name) di risorse definiti in Cubbit. Specifica a quali risorse verrà applicato la policy.

I formati generali dei CRN sono elencati qua sotto. I formati specifici dipendono dalla risorsa.

crn:region:service:tenant-id:swarm-id:project-id:resource-type:resource-id

  • crn: la stringa statica necessaria al validatore

  • region: la regione di distribuzione del coordinatore

  • service: il servizio coinvolto (S3, IAM, hive, etc.)

  • tenant-id: l'id di riferimento del tenant del tuo account (può essere omesso)

  • swarm-id: l'id di riferimento del cluster geo-distribuito di nodi Cubbit (deve essere omesso)

  • project-id: l'id del progetto al quale appartiene la risorsa specificata (può essere omesso) (può essere omesso)

  • resource-type: l'entità fornita dal servizio (user, group, policy, project, bucket, object)

  • resource-id: l'id specifico o il nome della risorsa di destinazione

In alcuni casi si vuole specificare tutte le risorse di un certo tipo. In questi casi, puoi specificare la wildcard * come resource-id.

crn:region:service:tenant:swarm:project-id:resource-type:*

nota

Al momento la wildcard è possibile solamente per il campo resource-id

Un altro target speciale è self nel segmento resource_id. Questo permette di rendere generica la policy e, quando si assegna il criterio a un utente specifico, la parola chiave self verrà sostituita con l'id dell'utente. Questo caso speciale può essere usato solo in combinazione con resource_type di tipo user.

Actions

Una o più azioni sono coinvolte nella policy.

Le azioni devono corrispondere al tipo di risorsa nel target CRN. Ad esempio, non è possibile definire una policy con iam:CreateGroup su una risorsa di tipo bucket.

IAM Actions

ActionTarget ResourceDescription
iam:GetProjectprojectPermette di recuperare le informazioni del progetto
iam:ManageProjectprojectPermette di aggiornare o cancellare il progetto
iam:CreateUserprojectPermette di creare e invitare un nuovo utente IAM
iam:ListUsersprojectPermette di ottenere la lista di utenti IAM del progetto
iam:ManageUsersuserPermette di aggiornare e cancellare un utente IAM
iam:GetUseruserPermette di recuperare un utente IAM
iam:AttachUserPolicyuserPermette di applicare una policy gestita a uno specifico utente IAM
iam:CreatePolicyVersionpolicyPermette di creare una nuova versione di una specifica policy gestita
iam:DeletePolicypolicyPermette di cancellare una specifica policy gestita e di rimuoverla da qualsiasi entità IAM (utenti o gruppi) alla quale è collegata la policy
iam:DetachUserPolicyuserPermette di separare una policy gestita da uno specifico utente IAM
iam:GetPolicypolicyPermette di recuperare informazioni riguardo una specifica policy gestita, inclusa la versione di default della policy e il numero totale di identità alla quale la policy è collegata
iam:ListAttachedUserPoliciesuserPermette di elencare tutte le policy gestite che sono collegate a uno specifico utente IAM
iam:ListEntitiesForPolicypolicyPermette di elencare tutte le identità IAM alla quale è collegata una specifica policy gestita
iam:ListPoliciespolicyPermette di elencare tutte le policy gestite
iam:CreatePolicypolicyPermette di creare una nuova policy gestita
iam:CreateKeyuserPermette di creare una nuova chiave
iam:ListKeysuserPermette di ottenere una lista di tutte le chiavi che sono controllate da un utente specifico
iam:ManageKeyuserPermette di aggiornare o cancellare il nome di una chiave di un utente IAM
iam:CreateGroupgroupPermette di create un gruppo
iam:ManageGroupgroupPermette di aggiornare un gruppo
iam:ListGroupgroupPermette di ottenere la lista dei gruppi di un progetto
iam:GetGroupgroupPermette di ottenenere i dettagli del gruppo
iam:DeleteGroupgroupPermette di cancellare un gruppo
iam:AddGroupUsergroupPermette di aggiungere un utente al gruppo
iam:RemoveGroupUsergroupPermette di rimuovere un utente dal gruppo
iam:AttachGroupPolicygroupPermette di applicare una policy ad un gruppo
iam:DetachGroupPolicygroupPermette di rimuovere una policy da un gruppo
iam:ListEntitiesForGroupgroupPermette di listare le policy e gli utenti del gruppo
info

Per operare sulle risorse S3, come ad esempio creare un bucket o caricare un oggetto, è necessario fornire almeno iam:CreateKey, iam:ManageKey e iam:ListKeys ai vostri utenti

S3 Actions

attenzione

Le Actions con Target Resource di tipo * possono essere utilizzate solo con *. Non sono ammessi altri valori

ActionTarget ResourceDescription
s3:ListBucketbucketPermette di elencare alcuni o tutti gli oggetti di un bucket Cubbit S3 (fino a 1000)
s3:ListBucketVersionsbucketPermette di elencare i metadati di tutte le versioni degli oggetti in un bucket Cubbit S3
s3:PutObjectobjectGarantisce il permesso di aggiungere oggetti a un bucket o una cartella
s3:GetObjectobjectPermette di scaricare un oggetto
s3:GetObjectVersionobjectPermette di recuperare una versione specifica di un oggetto
s3:DeleteObjectobjectPermette di rimuovere la versione nulla di un oggetto e di inserire un marcatore di cancellazione, il quale diventa la versione corrente dell'oggetto
s3:DeleteObjectVersionobjectPermette di rimuovere una versione specifica di un oggetto
s3:AbortMultipartUploadobjectPermette di interrompere un multipart upload
s3:ListMultipartUploadPartsobjectPermette di elencare le parti che sono state caricate per uno specifico caricamento multipart
s3:GetObjectTaggingobjectPermette di restituire l’insieme dei tag di un oggetto
s3:GetObjectAclobjectPermette di restituire l'elenco di controllo degli accessi (ACL) di un oggetto
s3:GetObjectVersionAclobjectPermette di restituire l'elenco di controllo degli accessi (ACL) di una versione specifica di un oggetto
s3:PutObjectAclobjectPermette di impostare le autorizzazioni dell'elenco di controllo degli accessi (ACL) per gli oggetti nuovi o già esistenti in un bucket S3
s3:PutObjectVersionAclobjectPermette di impostare le autorizzazioni dell'elenco di controllo degli accessi (ACL) per gli oggetti nuovi o già esistenti in un bucket S3
s3:PutObjectRetentionobjectPermette di inserire una configurazione di object retention su un oggetto
s3:GetObjectRetentionobjectPermette di ottenere l'object retention (letteralmente: conservazione dell'oggetto)
s3:PutObjectLegalHoldobjectPermette di applicare una configurazione di legal hold (letteralmente: ritenzione legale) all'oggetto specificato
s3:GetObjectLegalHoldobjectPermette di ottenere la configurazione di legal hold (ritenzione legale) dell'oggetto
s3:BypassGovernanceRetentionobjectPermette di eliminare un oggetto protetto da retention
s3:ListAllMyBuckets-Permette di elencare tutti i bucket di proprietà del mittente autenticato della richiesta
s3:GetBucketVersioningbucketPermette di restituire lo stato di versioning di un bucket Cubbit S3
s3:GetEncryptionConfigurationbucketPermette di restituire la configurazione di crittografia predefinita di un bucket Cubbit S3
s3:CreateBucket-Permette di creare un nuovo bucket
s3:DeleteBucketbucketPermette di cancellare il bucket indicato nell'URI
s3:PutBucketVersioningbucketPermette di impostare lo stato di versioning di un bucket Cubbit S3 esistente
s3:GetBucketOwnershipControlsbucketPermette di recuperare i controlli di proprietà di un bucket
s3:GetLifecycleConfigurationbucketPermette di restituire le informazioni di configurazione del ciclo di vita impostate su un bucket Cubbit S3
s3:PutBucketOwnershipControlsbucketPermette di aggiungere, sostituire o cancellare i controlli di proprietà su un bucket
s3:PutLifecycleConfigurationbucketPermette di creare una nuova configurazione del ciclo di vita per il bucket o di sostituire una configurazione del ciclo di vita esistente.
s3:ListBucketMultipartUploadsbucketPermette di elencare i multipart upload in corso
s3:GetBucketObjectLockConfigurationbucketPermette di ottenere la configurazione object lock di un bucket Cubbit S3
s3:PutBucketObjectLockConfigurationbucketPermette di impostare la configurazione object lock su un bucket Cubbit S3
s3:GetBucketAclbucketPermette di usare la sottorisorsa acl per restituire l'elenco di controllo degli accessi (ACL) di un bucket Cubbit S3
s3:PutBucketAclbucketPermette di impostare i permessi su un bucket esistente utilizzando gli elenchi di controllo degli accessi (ACL)
s3:GetBucketLocationbucketPermette di ottenere la posizione del bucket

Combinazioni con le ACL

Nella seguente tabella mostriamo come le ACL e le Policy possono essere combinate

Root/IAMIAM policyACLEntity owner Result
AllowDenyMissingAllowMissing
Root ✅  ❌  ❌  ❌  ✅  ❌  ❌
Root ✅  ❌  ❌  ✅  ❌  ❌  ✅
IAM ❌  ❌  ✅  ❌  ✅  ❌  ❌
IAM ❌  ❌  ✅  ✅  ❌  ❌  ❌
IAM ❌  ✅  ❌  ❌  ✅  ❌  ❌
IAM ❌  ✅  ❌  ✅  ❌  ❌  ❌
IAM ✅  ❌  ❌  ❌  ✅  ❌  ❌
IAM ✅  ❌  ❌  ✅  ❌  ❌  ✅
Root ✅  ❌  ❌  ❌  ✅  ✅  ❌
Root ✅  ❌  ❌  ✅  ❌  ✅  ✅
IAM ❌  ❌  ✅  ❌  ✅  ✅  ❌
IAM ❌  ❌  ✅  ✅  ❌  ✅  ❌
IAM ❌  ✅  ❌  ❌  ✅  ✅  ❌
IAM ❌  ✅  ❌  ✅  ❌  ✅  ❌
IAM ✅  ❌  ❌  ❌  ✅  ✅  ✅
IAM ✅  ❌  ❌  ✅  ❌  ✅  ✅

Gruppi

Gli utenti possono essere organizzati in gruppi. Un utente può far parte di più gruppi contemporaneamente. Ad ogni gruppo possono essere associate una o più policy.

Un utente può avere assegnate policy tramite gruppi oppure singolarmente. Le policy assegnate ad un utente singolo sono più importanti di quelle assegnate tramite gruppo.

Come per le policy assegnate ad un singolo utente, il caso Deny è il default.

Di seguito vediamo una tabella che spiega come le policy si combinano in caso di assegnamento tra gruppi e singolo utente.

Effetto1 \ Effetto 2Allow userAllow groupDeny userDeny group
** Allow user **allowallowdenyallow
** Allow group **allowallowdenydeny
** Deny user **denydenydenydeny
** Deny group **allowdenydenydeny

Esempi

In questa sezione vedremo alcuni esempi di policy per eseguire casi d'uso comuni.

info

È sempre possibile recuperare il CRN delle risorse dalla Cubbit Console. Ogni risorsa ha il suo menù contestuale con la voce "Copy CRN".

Permessi minimi per accedere alla Console Web

Questa policy fornisce i permessi minimi per l'accesso di un utente alla Console Web. Più in dettaglio, la prima sezione è composta da azioni IAM che consentono a un utente di creare e gestire le proprie chiavi di accesso, oltre alla possibilità di vedersi listato/inserito nell'elenco degli utenti. La seconda sezione è costituita da una singola azione S3, necessaria per listare tutti i bucket del progetto, ma senza la possibilità di visualizzare la lista degli oggetti all'interno di tali bucket.

{
"syntax_version":"2022-10-07",
"statement":[
{
"effect":"allow",
"action":[
"iam:CreateKey",
"iam:ManageKey",
"iam:ListKeys",
"iam:GetUser"
],
"resource":[
"crn:eu-west-1:iam::::user:self"
]
},
{
"effect":"allow",
"action":[
"s3:ListAllMyBuckets"
],
"resource":[
"*"
]
}
]
}

Permessi S3 di base per la lettura/scrittura degli oggetti in una cartella

La prima sezione di questa policy consente all'utente di elencare tutti gli oggetti e le versioni degli oggetti all'interno di un bucket specificato. È possibile estendere questa policy a più bucket aggiungendo un nuovo CRN nel campo resource. Nella seconda sezione della policy vengono assegnati i permessi di lettura, scrittura e cancellazione. In questo caso, il carattere jolly * alla fine del CRN indica che i permessi sono validi per l'intero bucket, ma è possibile specificare una singola cartella o un singolo oggetto. Come nella sezione precedente, è possibile aggiungere più CRN nel campo resource. Infine, è possibile rimuovere o aggiungere azioni per avere un maggiore controllo sui permessi, ad esempio se si lascia solo s3:PutObject, un utente potrà caricare nuovi file senza avere la possibilità di scaricarli o rimuoverli.

{
"syntax_version":"2022-10-07",
"statement":[
{
"effect":"allow",
"action":[
"s3:ListBucket",
"s3:ListBucketVersions"
],
"resource":[
"crn:eu-west-1:s3::::bucket:bucket-name"
]
},
{
"effect":"allow",
"action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"

],
"resource":[
"crn:eu-west-1:s3::::object:bucket-name/*"
]
}
]
}