Controllo dell'accesso a singoli oggetti in un bucket
Questa esercitazione fornisce esempi su come utilizzare le politiche di accesso IAM con bucket IBM Cloud® Object Storage per concedere agli utenti l'accesso a singoli oggetti all'interno di un bucket.
Prima di iniziare
IBM Cloud Object Storage archivia i dati in una struttura piatta in cui un bucket può contenere miliardi di oggetti denominati distintamente. Una gerarchia di cartelle può essere simulata utilizzando prefissi identici nei relativi nomi oggetto. Inoltre, un nome oggetto può essere indicato come chiave oggetto. Ecco un esempio:
Bucket Name: MyBucket
Objects in MyBucket:
User1/userDoc1.txt
User1/userDoc2.zip
Engineering/project1.git
Engineering/project2.git
Product/2023/roadmap1.ppt
Product/2024/roadmap2.ppt
Orgchart.pdf
In questo esempio, il prefisso User1, Engineeringe Product può essere simile alle cartelle di livello root. Inoltre, 2023 e 2024 possono rappresentare sottodirectory. Utilizzare
il delimitatore "/" per rappresentare la gerarchia di file. Un delimitatore può essere qualsiasi carattere supportato. Orgchart.pdf è considerato un oggetto di livello root.
Quando esegui una richiesta di elenco sul tuo bucket, puoi specificare un prefisso per elencare gli oggetti o elencare il contenuto dell'intero bucket. Inoltre, è possibile facoltativamente passare un valore delimitatore nella richiesta di elenco per simulare una struttura di cartelle nella risposta. Per ulteriori informazioni, consultare gli esempio di utilizzo delle istruzioni di condizione prefix and delimiter.
Le operazioni di lettura o scrittura generalmente hanno come destinazione un nome oggetto specifico a cui si fa riferimento anche come percorso dell'oggetto.
Scenari
I seguenti esempi mostrano come utilizzare le politiche e condizioni IAM per concedere l'accesso ai singoli oggetti in un bucket. Continueremo a utilizzare il bucket di esempio mostrato sopra. Questi esempi mostrano estratti della politica di accesso completo rispetto alla configurazione delle istruzioni di condizione. Per ulteriori informazioni, vedi Assegnazione dell'accesso agli oggetti in un bucket utilizzando le condizioni di accesso IAM.
Scenario 1: concedere ad Adam l'accesso in lettura a tutti gli oggetti solo nella cartella User1 .
Questo darà ad Adam la possibilità di leggere tutti gli oggetti che iniziano con il nome chiave User1/. Questo non darà ad Adam la possibilità di elencare gli oggetti e quindi non può navigare nell'interfaccia utente per accedere
a questi oggetti. Adam può richiamare solo oggetti nella cartella User1 tramite metodi non UI. Utilizzare un carattere jolly nella politica per fornire l'accesso a tutti i possibili oggetti che iniziano con User1/.
La mancata inclusione di un carattere jolly fornirebbe ad Adam solo l'accesso all'oggetto denominato User1/.
"control": {
"grant": {
"roles": [
{ "role_id":
"crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ObjectReader"
}
]
}
},
"rule": {
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatch",
"value": "User1/*"
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard"
Scenario 2: concedere l'elenco Adam e l'accesso in lettura a tutti gli oggetti nella cartella User1 .
Questo darà ad Adam la possibilità di leggere ed elencare tutti gli oggetti che iniziano con il nome chiave User1/. Inoltre, utilizzare un carattere jolly nell'attributo condizione prefix . Se non si include il carattere
jolly, Adam ha accesso Elenco solo al primo livello di oggetti o cartelle nella cartella User1 . Questa politica non consentirà ad Adam di elencare il bucket al livello root. Se Adam utilizza l'interfaccia utente, deve ricercare
il bucket con il prefisso specifico User1/ per vedere gli oggetti a cui ha accesso.
"control": {
"grant": {
"roles": [
{
"role_id":
"crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ContentReader"
}
]
}
},
"rule": {
"operator": "or",
"conditions": [
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatch",
"value": "User1/*"
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatch",
"value": "User1/*"
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard
Scenario 3: concedere a Samantha l'accesso per elencare, leggere e replicare i file solo nelle sottodirectory 2023 e 2024 nella cartella Product .
Queste serie di azioni richiederanno che Samantha abbia almeno il ruolo Writer . Il ruolo Writer contiene anche alcune azioni che non specificano un Path o un Prefix o un Delimiter come cloud-object-storage.bucket.put_replication. Per consentire queste azioni, utilizzare l'operatore StringExists con le condizioni basate sugli attributi della risorsa.
Samantha non avrà accesso per navigare nell'interfaccia utente dalla cartella root. Questa situazione viene visualizzata nello Scenario 4.
"control": {
"grant": {
"roles": [
{
"role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
}
]
}
},
"rule": {
"operator": "or",
"conditions": [
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringExists",
"value": false
}
]
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard"
Scenario 4: concedere a Samantha l'accesso per esplorare l'interfaccia utente ai file nelle cartelle 2023 e 2024 oltre a elencare, leggere e replicare i file in 2023 e 2024.
Per passare alla UI di MyBucket, Samantha ha bisogno del ruolo della piattaforma Viewer. Inoltre, Samantha ha accesso a tutte le directory sopra la cartella di destinazione. In questo caso, Samantha deve accedere
per elencare il livello root (definito dal prefisso della stringa vuota) e la cartella Product/ . Ciò consente a Samantha di visualizzare tutte le cartelle e gli oggetti di livello root.
"control": {
"grant": {
"roles": [
{
"role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
},
{
"role_id": "crn:v1:bluemix:public:iam::::role:Viewer"
}
]
}
},
"rule": {
"operator": "or",
"conditions": [
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"Product/"
]
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringExists",
"value": false
}
]
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard"