Vai al contenuto principale

Policy e Permessi

Introduzione

Cubbit utilizza un sistema di controllo degli accessi basato su criteri per gestire le autorizzazioni degli utenti e delle risorse all'interno di un progetto. Le policy sono documenti JSON che definiscono le autorizzazioni per le azioni sulle risorse. Le policy possono essere associate alle identità IAM (utenti o gruppi di utenti) o direttamente alle risorse (bucket) per controllare l'accesso.

Cubbit supporta anche lo standard ACL s3 per gestire l'accesso ai bucket e agli oggetti.

Tipi di policy

Cubbit supporta 2 diversi tipi di policy e ACL:

  • Policy basate sull'identità: Collegano le policy alle identità IAM (utenti o gruppi a cui gli utenti appartengono). Le policy basate sull'identità concedono autorizzazioni a un'identità.
  • Policy basate sulle risorse: allega le policy direttamente alle risorse, come i bucket. Le politiche basate sulle risorse concedono autorizzazioni alla risorsa a cui è associata la policy.
  • ACL: Utilizza gli ACL per controllare quali utenti di altri progetti possono accedere alla risorsa a cui è associato l'ACL.

Flusso di autorizzazione

Quando viene effettuata una richiesta di accesso a un bucket o a un oggetto DS3, il flusso di autorizzazione è composto da alcuni passaggi che forniscono decisioni esplicite/implicite di autorizzazione/rifiuto in base alle politiche associate alla risorsa e all'identità che effettua la richiesta. I seguenti passaggi descrivono il flusso di autorizzazione:

  1. Verifica dell'autorizzazione tramite chiave API / chiave segreta (ad eccezione delle richieste anonime): se la richiesta include credenziali API Key e Secret Key valide, il flusso di autorizzazione prosegue con il passaggio successivo. Se le credenziali non sono valide, la richiesta viene rifiutata.
  2. Valutazione delle policy IAM: il sistema valuta le policy IAM associate all'utente collegato alle credenziali fornite. Se una policy IAM nega esplicitamente l'azione richiesta sulla risorsa specificata, la richiesta viene negata. Se una qualsiasi policy IAM consente esplicitamente l'azione richiesta sulla risorsa specificata, il flusso di autorizzazione prosegue con il passaggio successivo.
  3. Valutazione delle policy dei bucket: il sistema valuta la policy del bucket associata al bucket di destinazione. Se la policy del bucket nega esplicitamente l'azione richiesta sulla risorsa specificata, la richiesta viene negata. Se la policy del bucket nega esplicitamente l'azione richiesta sulla risorsa specificata, la richiesta viene negata. Se la policy del bucket non consente o nega esplicitamente l'azione richiesta, la richiesta viene verificata rispetto alle credenziali fornite e passa alla fase successiva.
  4. Valutazione degli ACL: il sistema valuta gli elenchi di controllo degli accessi (ACL) associati al bucket e all'oggetto di destinazione. Se un ACL consente esplicitamente l'azione richiesta dall'utente, la richiesta viene autorizzata. Se nessun ACL consente esplicitamente l'azione richiesta, la richiesta viene negata.

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.

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.

policy applied

Policy predefinite del progetto

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": "2023-10-16", // 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:project:tenant_b562b6be-cac4-4d2c-840c-fa266228a30f/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 resource contiene un elenco di possibili CRN (Cubbit Resource Name) di risorse definiti in Cubbit. Specifica a quali risorse verrà applicato la policy.

Per ulteriori dettagli su CRN, consultare la sezione dedicata riportata di seguito.

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.

Effect1 \ Effect2Allow userAllow groupDeny userDeny group
** Allow user **allowallowdenyallow
** Allow group **allowallowdenydeny
** Deny user **denydenydenydeny
** Deny group **allowdenydenydeny

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

AzioneRisorsa bersaglioDescrizione
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

AzioneRisorsa bersaglioDescrizione
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

:::

DS3 Actions

AzioneRisorsa bersaglioDescrizione
ds3:MapBucketNamesAndIDsbucketFornisce i permessi per listare le associazioni nome del bucket - id

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":"2023-10-16",
"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":"2023-10-16",
"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/*"
]
}
]
}

Come migrare dalle versioni precedenti della sintassi

La versione della sintassi della policy 2023-10-16 ha introdotto alcune modifiche al modo in cui le risorse sono definite nel documento della policy. Se disponi di policy create con una versione sintattica precedente, devi aggiornarle al nuovo formato poiché quello precedente non accetta il formato CRN v2 attualmente utilizzato e restituito nella console DS3.

Per migrare dalla versione sintattica 2022-10-07 alla versione 2023-10-16, è necessario aggiornare il campo resource di ciascuna dichiarazione nel documento della policy in modo che corrisponda al formato CRN v2.

info

Per convertire un CRN v1 in un CRN v2, seguire questo schema:

  1. crn, region, service rimangono invariati
  2. resource-type rimane uguale
  3. tenant-id, swarm-id e project-id faranno parte del percorso delle risorse come tenant_<tenant_id>/project_<project_id>/
  4. resource-id verrà aggiunto alla fine di resource-path

Se non disponi dell'ID, non aggiungere quel segmento al percorso della risorsa per quella risorsa.

Ecco un esempio di migrazione:

Vecchio formato (versione sintattica 2022-10-07):

{
"syntax_version": "2022-10-07",
"name": "Unique Policy Name",
"description": "This is a generic description for the policy",
"statement": [
{
"effect": "allow",
"action": [
"iam:ListUsers"
],
"resource":[
"crn:region1:iam:b562b6be-cac4-4d2c-840c-fa266228a30f::170bcefb-68f5-479f-9d1e-e8553eaaccb9:project:170bcefb-68f5-479f-9d1e-e8553eaaccb9"
]
}
]
}

Nuovo formato (versione sintattica 2023-10-16):

{
"syntax_version":"2023-10-16",
"name": "Unique Policy Name",
"description": "This is a generic description for the policy",
"statement": [
{
"effect": "allow",
"action": [
"iam:ListUsers"
],
"resource":[
"crn:region1:iam:project:tenant_b562b6be-cac4-4d2c-840c-fa266228a30f/170bcefb-68f5-479f-9d1e-e8553eaaccb9"
]
}
]
}

Per ulteriori dettagli sul formato CRN v2, consultare la documentazione CRN.

Policy basate sulle risorse

Una policy bucket è una policy basata sulle risorse che è possibile utilizzare per gestire le autorizzazioni per i bucket DS3 e gli oggetti al loro interno.

Si differenziano dalle policy IAM in quanto sono associate direttamente al bucket, anziché a un utente. Ciò consente di definire regole di controllo degli accessi che si applicano specificatamente al bucket e al suo contenuto, indipendentemente da chi effettua la richiesta.

Le policy dei bucket sono scritte in JSON e specificano quali azioni sono consentite o negate per quali soggetti (utenti) sul bucket specificato e sui suoi oggetti. Una policy bucket viene associata direttamente a un bucket e si applica a tutti gli oggetti definiti dall'ambito specificato nella policy stessa.

È possibile utilizzare le policy dei bucket per controllare l'accesso ai bucket DS3 e agli oggetti in base a varie condizioni, quali la presenza di intestazioni specifiche nella richiesta, l'esecuzione della richiesta da parte di un determinato User Agent o la provenienza della richiesta da un sito web specifico (tramite l'intestazione Referer).

Esempio di policy dei bucket, formato json

{
"name": "Test Policy",
"description": "my beautiful test policy",
"syntax_version": "2025-03-01",
"statement": [
{
"sid": "SkipAuthenticationForProtectedObjectRetrievalWithProperHeader",
"effect": "allow",
"principal": [
"*"
],
"action": [
"s3:GetObject"
],
"resource": [
"crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111-111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket/protected/*"
],
"condition": {
"StringLike": {
"header/X-Custom-Header": [
"Custom-Value-*-???"
]
}
}
},
{
"sid": "SkipAuthenticationForPublicObjectRetrieval",
"effect": "allow",
"principal": [
"*"
],
"action": [
"s3:GetObject"
],
"resource": [
"crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111-111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket/public/*"
]
},
{
"sid": "GetObjectBlockedOnSpecificFile",
"effect": "deny",
"principal": [
"*"
],
"action": [
"s3:GetObject"
],
"resource": [
"crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111-111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket/*/secret-object"
]
}
]
}
nota

The above example policy has 3 statements:

  1. Consente a chiunque di eseguire l'azione s3:GetObject su qualsiasi oggetto nel bucket con una chiave che inizia con protected/, purché la richiesta includa un'intestazione denominata X-Custom-Header con un valore che corrisponda al modello Custom-Value-*-???.
  2. Consente a chiunque di eseguire l'azione s3:GetObject su qualsiasi oggetto nel bucket con una chiave che inizia con public/, senza ulteriori condizioni.
  3. Nega l'accesso a un oggetto specifico denominato “secret-object” nello stesso bucket a tutti i soggetti, sovrascrivendo eventuali precedenti dichiarazioni di autorizzazione.

La seconda regola è un caso d'uso comune, infatti consente di ospitare risorse pubbliche, come immagini o video, in un bucket proteggendo al contempo gli altri oggetti.

Componenti di una policy del bucket

Una policy bucket è costituita da diversi componenti chiave:

  • Name: un nome descrittivo per la policy.
  • Description: breve descrizione dello scopo della policy.
  • Version: specifica la versione del linguaggio della policy. La versione attuale è “2025-03-01”.
  • Statement: una serie di singole dichiarazioni che definiscono le autorizzazioni. Ogni dichiarazione include:
    • Sid (ID Statement): (Facoltativo) Identificatore dello statement.
    • Effect: specifica se l'istruzione consente o nega l'accesso. I valori validi sono "allow" e "deny".
    • Principal: specifica l'utente a cui si applica la policy. È possibile utilizzare “*” per indicare tutti gli utenti.
    • Action: specifica le azioni consentite o negate. Ad esempio, “s3:GetObject” consente di leggere gli oggetti dal bucket. Di seguito è riportato un elenco di tutte le azioni disponibili qui sotto.
    • Resource: specifica il bucket e gli oggetti a cui si applica la policy, utilizzando i loro nomi di risorsa Cubbit (CRN). Il carattere jolly “*” corrisponde a uno o più caratteri. Il carattere jolly “?” corrisponde esattamente a un carattere.
    • Condition: (Facoltativo) Specifica le condizioni alle quali la policy è in vigore, ad esempio intestazioni specifiche nella richiesta.

Principal

Il principale è l'utente a cui si applica la policy. È possibile utilizzare “*” per indicare tutti gli utenti. Un soggetto specifico deve essere specificato con il suo CRN.

Action

Ecco un elenco di tutte le azioni disponibili che possono essere specificate in una policy del bucket:

  • s3:GetObject - Necessario per leggere gli oggetti da un bucket.
  • s3:GetObjectVersion - Richiesto per leggere versioni specifiche di oggetti da un bucket con controllo delle versioni.
  • s3:DeleteObject - Necessario per eliminare oggetti da un bucket.
  • s3:DeleteObjectVersion - Richiesto per eliminare versioni specifiche di oggetti da un bucket con controllo delle versioni.
  • s3:PutObject - Necessario per aggiungere oggetti a un bucket.
  • s3:AbortMultipartUpload - Necessario per interrompere un caricamento multiparte.
  • s3:GetObjectLegalHold - Richiesto per leggere lo stato di conservazione a fini legali di un oggetto.
  • s3:PutObjectLegalHold - Necessario per impostare lo stato di conservazione a fini legali di un oggetto.
  • s3:ListBucket - Richiesto per elencare gli oggetti in un bucket.
  • s3:ListBucketVersions - Richiesto per elencare le versioni degli oggetti in un bucket con controllo delle versioni.
  • s3:ListBucketMultipartUploads - Richiesto per elencare i caricamenti multiparte in corso in un bucket.
  • s3:ListMultipartUploadParts - Richiesto per elencare le parti di un caricamento multiparte specifico.
  • s3:GetLifecycleConfiguration - Richiesto per leggere la configurazione del ciclo di vita di un bucket.
  • s3:PutLifecycleConfiguration - Richiesto per impostare la configurazione del ciclo di vita di un bucket.
  • s3:GetBucketOwnershipControls - Richiesto per leggere i controlli di proprietà di un bucket.
  • s3:PutBucketOwnershipControls - Necessario per impostare i controlli di proprietà di un bucket.
  • s3:DeleteBucket - Necessario per eliminare un bucket.
  • s3:GetBucketAcl - Richiesto per leggere l'elenco di controllo degli accessi (ACL) di un bucket.
  • s3:PutBucketAcl - Richiesto per impostare l'elenco di controllo degli accessi (ACL) di un bucket.
  • s3:GetBucketLocation - Richiesto per leggere il vincolo di posizione di un bucket.
  • s3:GetBucketVersioning - Richiesto per leggere lo stato di versioning di un bucket.
  • s3:PutBucketVersioning - Richiesto per impostare lo stato di versioning di un bucket.
  • s3:GetBucketObjectLockConfiguration - Richiesto per leggere la configurazione del blocco degli oggetti di un bucket.
  • s3:PutBucketObjectLockConfiguration - Richiesto per impostare la configurazione del blocco degli oggetti di un bucket.
  • s3:GetObjectRetention - Richiesto per leggere le impostazioni di conservazione di un oggetto.
  • s3:PutObjectRetention - Necessario per impostare le impostazioni di conservazione di un oggetto.
  • s3:GetObjectAcl - Richiesto per leggere l'elenco di controllo degli accessi (ACL) di un oggetto.
  • s3:PutObjectAcl - Richiesto per impostare l'elenco di controllo degli accessi (ACL) di un oggetto.
nota

Alcune azioni si riferiscono a un bucket, mentre altre si riferiscono a un oggetto. Assicurati di specificare il tipo di risorsa corretto nella dichiarazione della policy. Per ulteriori dettagli, consultare la sezione Resources.

Operazioni S3 comuni e azioni richieste

  • GetObject richiede
    • s3:GetObject durante la lettura di un oggetto
    • s3:GetObjectVersion quando si legge una versione specifica di un oggetto in un bucket con controllo delle versioni
  • PutObject richiede
    • s3:PutObject quando si aggiunge un oggetto a un bucket
  • CreateMultipartUpload, UploadPart e CompleteMultipartUpload richiedono
    • s3:PutObject
  • ListObjectsV2 richiede
    • s3:ListBucket quando si elencano gli oggetti in un bucket
  • HeadObject richiede
    • s3:GetObject durante il recupero dei metadati di un oggetto
    • s3:GetObjectVersion quando si recuperano i metadati di una versione specifica di un oggetto in un bucket con controllo delle versioni
  • DeleteObject e DeleteObjects richiedono
    • s3:DeleteObject quando si elimina un oggetto
    • s3:DeleteObjectVersion quando si elimina una versione specifica di un oggetto in un bucket con controllo delle versioni
  • PutObjectRetention richiede
    • s3:PutObjectRetention quando si impostano le impostazioni di conservazione per un oggetto

Resources

Una risorsa specifica il bucket e/o gli oggetti a cui si applica la policy, utilizzando i loro nomi di risorsa Cubbit (CRN). È possibile utilizzare caratteri jolly nella specifica delle risorse:

  • * (asterisco): corrisponde a zero o più caratteri. Ad esempio, crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111 -111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket/images/* corrisponde a tutti gli oggetti all'interno della cartella images/ del bucket specificato.
  • ? (punto interrogativo): corrisponde esattamente a un carattere. Ad esempio, crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111-111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket/image?. jpg corrisponde a oggetti come image1.jpg, imageA.jpg, ma non a image10.jpg.

A seconda dell'azione specificata nella policy, la risorsa può fare riferimento al bucket stesso o agli oggetti all'interno del bucket. Ad esempio:

  • Per azioni come s3:ListBucket, la risorsa deve fare riferimento al CRN del bucket (ad esempio, crn:eu-west-1:s3:bucket:tenant_11111111-1111-1111-1111 -111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket).
  • Per azioni come s3:GetObject, la risorsa deve fare riferimento al CRN dell'oggetto (ad esempio, crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111 -111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket/my-object.txt).

Esempio

Don't
"statement": [
{
"sid": "SkipAuthenticationForPublicObjectRetrieval",
"effect": "allow",
"principal": ["*"],
"action": ["s3:GetObject"],
"resource": [ // using a bucket CRN
"crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111-111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket"
]
}
]
Do
"statement": [
{
"sid": "SkipAuthenticationForPublicObjectRetrieval",
"effect": "allow",
"principal": ["*"],
"action": ["s3:GetObject"],
"resource": [ // using an object CRN
"crn:eu-west-1:s3:object:tenant_11111111-1111-1111-1111-111111111111/project_6d8a86bf-dfd1-47da-bdec-c36c8e02b7c5/my-bucket/public/*"
]
}
]

Tipo di risorsa per azione

Ecco un elenco delle azioni della policy dei bucket e dei tipi di risorse corrispondenti:

AzioneTipo di risorsa
s3:ListBucketBucket CRN
s3:ListBucketVersionsBucket CRN
s3:GetLifecycleConfigurationBucket CRN
s3:PutLifecycleConfigurationBucket CRN
s3:GetBucketOwnershipControlsBucket CRN
s3:PutBucketOwnershipControlsBucket CRN
s3:DeleteBucketBucket CRN
s3:GetBucketAclBucket CRN
s3:PutBucketAclBucket CRN
s3:GetBucketLocationBucket CRN
s3:GetBucketVersioningBucket CRN
s3:PutBucketVersioningBucket CRN
s3:GetBucketObjectLockConfigurationBucket CRN
s3:PutBucketObjectLockConfigurationBucket CRN
s3:ListBucketMultipartUploadsBucket CRN
s3:GetObjectObject CRN
s3:GetObjectVersionObject CRN
s3:DeleteObjectObject CRN
s3:DeleteObjectVersionObject CRN
s3:PutObjectObject CRN
s3:AbortMultipartUploadObject CRN
s3:GetObjectLegalHoldObject CRN
s3:PutObjectLegalHoldObject CRN
s3:GetObjectRetentionObject CRN
s3:PutObjectRetentionObject CRN
s3:GetObjectAclObject CRN
s3:PutObjectAclObject CRN
s3:ListMultipartUploadPartsObject CRN

Conditions

Una condizione è un oggetto complesso che utilizza “operatori” per confrontare una “chiave di condizione” (come un'intestazione di richiesta) con uno o più valori. Le condizioni consentono di specificare ulteriori vincoli relativi al momento in cui una policy è in vigore.

Condition keys

Le condition keys disponibili sono:

  • header/<header-name> - Corrisponde al valore di un'intestazione HTTP specifica nella richiesta.
  • referer - Corrisponde al valore dell'intestazione Referer nella richiesta.
  • user-agent - Corrisponde al valore dell'intestazione User-Agent nella richiesta.

Operators

Gli operatori disponibili sono:

  • StringEquals - La condizione è vera se il valore della chiave della condizione è esattamente uguale a uno dei valori specificati.
  • StringEqualsIfExists - La condizione è vera se il valore della chiave della condizione è esattamente uguale a uno dei valori specificati o se la chiave della condizione non esiste nella richiesta.
  • StringEqualsIgnoreCase - La condizione è vera se il valore della chiave della condizione è uguale a uno dei valori specificati, ignorando le differenze di maiuscole e minuscole.
  • StringEqualsIgnoreCaseIfExists - La condizione è vera se il valore della chiave della condizione è uguale a uno dei valori specificati, ignorando le differenze di maiuscole/minuscole, oppure se la chiave della condizione non esiste nella richiesta.
  • StringLike - La condizione è vera se il valore della chiave della condizione corrisponde a uno dei valori specificati, che possono includere caratteri jolly (* e ?).
  • StringLikeIfExists - La condizione è vera se il valore della chiave della condizione corrisponde a uno dei valori specificati, che possono includere caratteri jolly (* e ?), oppure se la chiave della condizione non è presente nella richiesta.
  • StringNotEquals - La condizione è vera se una qualsiasi delle chiavi specificate è presente nel contesto della richiesta e i relativi valori non corrispondono a nessuno dei valori specificati. Se la chiave non è nel contesto, restituisce false.
  • StringNotEqualsIfExists - La condizione è vera se una qualsiasi delle chiavi specificate è presente nel contesto della richiesta e i relativi valori non corrispondono a nessuno dei valori specificati. Se la chiave non è nel contesto, restituisce true.
  • StringNotEqualsIgnoreCase - La condizione è vera se una qualsiasi delle chiavi specificate è presente nel contesto della richiesta e i relativi valori non corrispondono a nessuno dei valori specificati, ignorando le differenze di maiuscole/minuscole. Se la chiave non è nel contesto, restituisce false.
  • StringNotEqualsIgnoreCaseIfExists - La condizione è vera se una qualsiasi delle chiavi specificate è presente nel contesto della richiesta e i relativi valori non corrispondono a nessuno dei valori specificati, ignorando le differenze di maiuscole/minuscole. Se la chiave non è nel contesto, restituisce true.
  • StringNotLike - La condizione è vera se una qualsiasi delle chiavi specificate è presente nel contesto della richiesta e i relativi valori non corrispondono a nessuno dei valori specificati, che possono includere caratteri jolly (* e ?). Se la chiave non è nel contesto, restituisce false.
  • StringNotLikeIfExists - La condizione è vera se una qualsiasi delle chiavi specificate è presente nel contesto della richiesta e i relativi valori non corrispondono a nessuno dei valori specificati, che possono includere caratteri jolly (* e ?). Se la chiave non è nel contesto, restituisce true.
  • Null - La condizione è vera se la chiave specificata non è presente nel contesto della richiesta.

Combining conditions

Quando un operatore contiene più chiavi, la condizione restituisce vero se tutte le chiavi corrispondono (AND logico). Lo stesso vale quando una condizione contiene più operatori (anche AND logico).

Ad esempio:

"condition": {
"StringEquals": {
"header/X-Custom-Header": [
"Custom-Value"
],
"referer": [
"https://example.com/*"
]
},
"StringLike": {
"user-agent": [
"*Mozilla*"
]
}
}

Nell'esempio sopra riportato, la condizione risulta vera solo se sia l'intestazione X-Custom-Header che corrisponde a Custom-Value, sia l'intestazione Referer che corrisponde a https://example.com/*, sia l'intestazione User-Agent che corrisponde a *Mozilla*.

Per fornire una logica OR tra più condizioni, è possibile utilizzare diverse istruzioni all'interno della stessa policy, ciascuna con la propria condizione.

ACL

ACL è l'acronimo di Access Control List (lista di controllo degli accessi), utilizzata per impostare i permessi su bucket e oggetti e pienamente supportata da Cubbit.

Le ACL sono utilizzate per concedere permessi a specifici progetti o gruppi al fine di eseguire azioni specifiche su un bucket o un oggetto. Si possono utilizzare due tipi di ACL:

  • Bucket ACL: queste ACL sono utilizzate per concedere permessi per azioni su un bucket.
  • ACL per oggetti: queste ACL sono utilizzate per concedere autorizzazioni per azioni su un singolo oggetto all'interno di un bucket.
attenzione

Gli ACL sono considerati un meccanismo di controllo degli accessi obsoleto in S3 e il loro utilizzo è generalmente sconsigliato a favore di meccanismi più moderni e flessibili come le policy dei bucket.

Concetti principali

Passiamo rapidamente in rassegna alcuni concetti principali e la terminologia delle ACL. Parleremo di cosa sono i grantee e di come possono essere identificati, di quali permessi possono essere concessi e di cosa è una canned ACL.

Grantee

Un grantee è il progetto o il gruppo Cubbit a cui viene concessa l'autorizzazione da una ACL. Esistono due modi per identificare un grantee quando si imposta un'ACL:

  • Cubbit project ID: è possibile specificare il grantee come Cubbit Project ID utilizzando il parametro id. Ad esempio: id=111122223333.
  • Gruppo predefinito: è possibile specificare il destinatario come gruppo predefinito, utilizzando il parametro URI. Il protocollo S3 prevede i seguenti gruppi predefiniti:
    • AuthenticatedUsers: qualsiasi progetto Cubbit autenticato.
    • AllUsers: tutti gli utenti di Internet.
  • Per specificare un gruppo predefinito, è possibile utilizzare il parametro URI e l'URL del gruppo. Ad esempio: uri=http://acs.amazonaws.com/groups/global/AllUsers.

Permessi che possono essere concessi

Le ACL S3 possono essere utilizzate per concedere i seguenti permessi:

  • READ
    • quando applicato ad un bucket consente di elencare gli oggetti del bucket
    • quando applicato ad un oggetto consente di leggerne il suo contenuto
  • WRITE
    • quando applicato ad un bucket consente di creare, sovrascrivere ed eliminare gli oggetti nel bucket
    • non applicabile agli oggetti
  • READ_ACP
    • quando applicato ad un bucket consente di leggere l'ACL del bucket stesso
    • quando applicato ad un oggetto consente di leggere l'ACL dell'oggetto stesso
  • WRITE_ACP
    • quando applicato ad un bucket consente di scrivere l'ACL del bucket stesso
    • quando applicato ad un oggetto consente di scrivere l'ACL dell'oggetto stesso
  • FULL_CONTROL: consente al grantee di avere tutte le autorizzazioni sopra elencate al bucket o all'oggetto a cui è stato applicato
nota

Le operazioni WRITE non hanno alcun effetto sugli oggetti: una volta caricati, non è possibile eseguire altre azioni WRITE su di essi. Esempio: un'operazione di PutObject sostituirebbe semplicemente l’oggetto, o creerebbe una nuova versione nel caso di Bucket versionati.

nota

Un permesso ACL applicato ad un bucket non è ereditato dagli oggetti contenuti in esso.

Permessi richiesti per API

APIBucket grantObject grant
HeadBucket, ListObjects, ListObjectsV2, ListObjectVersionsREAD*
HeadObject, GetObject, GetObjectVersion-READ
PutObject, CreateMultipartUpload, UploadPart, CompleteMultipartUpload, DeleteObjectsWRITEnot applicable
GetBucketAclREAD_ACP*
GetObjectAcl-READ_ACP
PutBucketAclWRITE_ACP*
PutObjectAcl-WRITE_ACP
CopyObjectWRITE (sul bucket destinazione)READ (sull'oggetto sorgente)
ListPartsWRITE*
ListMultipartUploadsFULL_CONTROL-
nota

Altre API, come PutBucketLifecycleConfiguration, richiedono di essere il proprietario del bucket.

Canned ACL

Il protocollo S3 fornisce una serie di ACL predefinite, note come "canned ACL", che possono essere utilizzate per impostare rapidamente autorizzazioni comuni su un bucket o un oggetto. Le canned ACL disponibili sono:

  • private: concede le autorizzazioni solo al proprietario.
  • public-read: concede i permessi di lettura al gruppo AllUsers, che consiste in qualsiasi utente di Internet.
  • public-read-write: concede le autorizzazioni di lettura e scrittura al gruppo AllUsers, che consiste in qualsiasi utente di Internet.
  • authenticated-read: concede i permessi di lettura al gruppo AuthenticatedUsers, composto da tutti i Progetti Cubbit autenticati.
  • bucket-owner-read: concede i permessi di lettura al proprietario del bucket.
  • bucket-owner-full-control: concede il pieno controllo al proprietario del bucket.

API coinvolte

Diverse API S3 sono correlate alle ACL:

  • GetBucketAcl: utilizzato per recuperare l'ACL di un bucket.
  • PutBucketAcl: utilizzato per impostare l'ACL di un bucket.
  • GetObjectAcl: utilizzato per recuperare l'ACL di un oggetto.
  • PutObjectAcl: usato per impostare l'ACL di un oggetto.

Limiti delle ACL

L'uso delle ACL presenta alcuni limiti:

  • Solo il proprietario di un bucket o di un oggetto può impostare l'ACL. Ciò significa che gli altri utenti non possono concedere permessi a se stessi o ad altri utilizzando le ACL.
  • Le ACL possono concedere permessi solo a specifici Progetti Cubbit o a gruppi predefiniti (come AuthenticatedUsers o AllUsers).
  • Le ACL si applicano al bucket o all'oggetto nel suo complesso e non possono essere utilizzate per concedere autorizzazioni su base individuale all'interno di un bucket.

Per superare queste limitazioni, è possibile utilizzare gli Ownership Controls per abilitare i controlli di proprietà degli oggetti su un bucket.

How to

A seguire alcuni esempi di utilizzo delle ACL con la CLI s3api.

Aggiornare l'ACL sovrascrive le configurazioni esistenti

Si noti che eseguendo le operazioni PutBucketAcl (o PutObjectAcl), si sovrascrive quella esistente.

Se si desidera conservare la configurazione esistente, si deve prima eseguire GetBucketAcl (o GetObjectAcl), annotare la configurazione esistente e fornirla insieme a quella nuova.

Leggere le autorizzazioni correnti collegate a un determinato bucket o oggetto

Bucket
aws s3api get-bucket-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket | cat

L'ultima parte del comando (| cat) è opzionale: permette di stampare il risultato come standard output del terminale

Oggetto
aws s3api get-object-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --key my-object | cat

L'ultima parte del comando (| cat) è opzionale: permette di stampare il risultato come standard output del terminale

Concessione dei permessi di lettura e scrittura a uno specifico Progetto Cubbit per un bucket
aws s3api put-bucket-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --grant-read id=111122223333 --grant-write id=111122223333

In questo esempio, il comando put-bucket-acl è usato per impostare l'ACL per il bucket my-bucket. Il parametro --acl è impostato su private, il che significa che solo il proprietario del bucket ha il permesso di accedervi. I parametri --grant-read e --grant-write sono usati per concedere i permessi di lettura e scrittura al Progetto Cubbit con l'ID 111122223333.

Concessione dei permessi di lettura e scrittura al gruppo di utenti autenticati per un bucket
aws s3api put-bucket-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --grant-read uri=<http://acs.amazonaws.com/groups/global/AuthenticatedUsers> --grant-write uri=<http://acs.amazonaws.com/groups/global/AuthenticatedUsers>

In questo esempio, il comando put-bucket-acl viene usato per impostare l'ACL per il bucket my-bucket. Il parametro --acl è impostato su private, il che significa che solo il proprietario del bucket ha il permesso di accedervi. I parametri --grant-read e --grant-write sono usati per concedere i permessi di lettura e scrittura al gruppo AuthenticatedUsers, che consiste in tutti i Progetti Cubbit autenticati.

Concessione dei permessi di lettura e scrittura al gruppo AllUsers per un oggetto

aws s3api put-object-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --key my-object --acl public-read-write

In questo esempio, il comando put-object-acl viene usato per impostare l'ACL per l'oggetto my-object nel bucket my-cubbit-bucket. Il parametro --acl è impostato su public-read-write, il che significa che qualsiasi utente può leggere e scrivere l'oggetto.

Un comando equivalente è il seguente:

aws s3api put-object-acl --endpoint https://s3.cubbit.eu --bucket my-cubbit-bucket --key my-object--grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers --grant-write uri=http://acs.amazonaws.com/groups/global/AllUsers

I parametri --grant-read e --grant-write sono usati per concedere i permessi di lettura e scrittura al gruppo AllUsers, che consiste in qualsiasi utente di internet.

FAQ

Come posso cambiare nuovamente le ACL di un bucket/oggetto?

Per cambiare le ACL di un bucket o di un oggetto basterà sovrascriverle.

Posso dare lo stesso permesso allo stesso Grantee più volte?

Sì, è possibile dare lo stesso permesso allo stesso Grantee più volte.

Vedi l'utente Luigi dell'esempio sotto.

aws s3api get-bucket-acl --endpoint https://s3.cubbit.eu --profile cubbit --bucket my-cubbit-bucket | cat
{
"Owner": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971"
},
"Grants": [
{
"Grantee": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
]
}

Posso dare i permessi READ, WRITE e FULL_CONTROL allo stesso Grantee?

Sì, è possibile dare i permessi READ, WRITE e FULL_CONTROL allo stesso Grantee.

Vedi l'utente Luigi dell'esempio sotto.

{
"Owner": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971"
},
"Grants": [
{
"Grantee": {
"DisplayName": "Mario",
"ID": "eb91a08c-988f-48bb-ab17-f66d90ff4971",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "READ"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "WRITE"
},
{
"Grantee": {
"DisplayName": "Luigi",
"ID": "23e5661e-71a1-4f75-b8df-4e0a504df356",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
]
}

Come si combinano le policy basate su ACL e identità

Quando viene effettuata una richiesta di accesso a un bucket o a un oggetto, vengono valutate sia la policy basata sull'identità (policy IAM) che l'ACL per determinare se la richiesta debba essere autorizzata o negata.

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 ✅  ❌  ❌  ✅  ❌  ✅  ✅

CRN

Il Cubbit Resource Name (CRN) è un metodo standardizzato per identificare le risorse in Cubbit. Viene utilizzato nelle policy per specificare le risorse a cui si applica la policy.

CRN v2

crn:region:service:resource-type:resource-path

  • crn: la stringa statica richiesta dal validatore

  • regione: la regione del coordinatore deploy

  • servizio: il servizio coinvolto (s3, iam, ds3)

  • resource-type: tipo di entità fornito dal servizio (utente, gruppo, policy, progetto, bucket, oggetto)

  • resource-path: identifica la risorsa specifica. Il formato di questo segmento dipende dal tipo di risorsa. Può essere un singolo ID o una struttura simile a un percorso per risorse di natura gerarchica (come gli oggetti in un bucket). es. tenant_<tenant_id>/project_<project_id>/<user_id>

In alcuni casi si vuole specificare tutte le risorse di un certo tipo. In tal caso, è possibile specificare il carattere jolly * come resource-path o ultimo segmento del percorso.

es.

crn:region:service:resource-type:*

crn:region:service:resource-type:tenant_<tenant_id>/project_<project_id>/*

crn:region:service:resource-type:tenant_*/project_<project_id>/<resource_id>

crn:region:service:resource-type:tenant_*/project_<project_id>/*

Un altro target speciale è self nel segmento resource-path. 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. es. crn:region:iam:user:self

Migrazione da CRN v1 a CRN v2

Per convertire un CRN v1 in un CRN v2, seguire questo schema:

  1. crn, region, service rimangono invariati
  2. resource-type rimane uguale
  3. tenant-id, swarm-id e project-id faranno parte del percorso delle risorse come tenant_<tenant_id>/project_<project_id>/
  4. resource-id verrà aggiunto alla fine di resource-path

Se non disponi dell'ID, non aggiungere quel segmento al percorso della risorsa per quella risorsa.

CRN v1 (Deprecato)

attenzione

CRN v1 è deprecato e verrà rimosso nelle versioni future. Si prega di migrare le policy al formato CRN v2.

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

  • crn: la stringa statica richiesta dal validatore

  • regione: la regione del coordinatore, deploy

  • servizio: il servizio coinvolto (s3, iam, ds3)

  • 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.