Contrôle de l'accès à des objets individuels dans un compartiment
Ce tutoriel fournit des exemples d'utilisation de règles d'accès IAM avec des compartiments IBM Cloud® Object Storage pour accorder aux utilisateurs l'accès à des objets individuels dans un compartiment.
Avant de commencer
IBM Cloud Object Storage stocke les données dans une structure à plat où un compartiment peut contenir des milliards d'objets nommés distinctement. Une hiérarchie de dossiers peut être simulée à l'aide de préfixes identiques dans les noms d'objet associés. De plus, un nom d'objet peut être appelé clé d'objet. Exemple :
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
Dans cet exemple, le préfixe User1, Engineeringet Product peuvent ressembler à des dossiers de niveau racine. En outre, 2023 et 2024 peuvent représenter des sous-répertoires. Utilisez
le délimiteur "/" pour représenter la hiérarchie de fichiers. Un délimiteur peut être n'importe quel caractère pris en charge. Orgchart.pdf est considéré comme un objet de niveau racine.
Lors de l'exécution d'une demande de liste sur votre compartiment, vous pouvez spécifier un préfixe pour répertorier les objets ou répertorier le contenu de l'ensemble du compartiment. En outre, vous pouvez éventuellement transmettre une valeur de délimiteur dans la demande de liste pour simuler une structure de dossiers dans la réponse. Pour plus d'informations, voir les exemples d'utilisation d'instructions de condition prefix and delimiter.
Les opérations de lecture ou d'écriture ciblent généralement un nom d'objet spécifique qui est également appelé chemin de l'objet.
Scénarios
Les exemples suivants montrent comment utiliser des règles et des conditions IAM pour accorder l'accès à des objets individuels dans un compartiment. Nous allons continuer à utiliser l'exemple de compartiment présenté ci-dessus. Ces exemples montrent des extraits de la règle d'accès complet concernant la configuration des instructions de condition. Pour plus d'informations, voir Affectation d'accès à des objets dans un compartiment à l'aide de conditions d'accès IAM.
Scénario 1: accordez à Adam l'accès en lecture à tous les objets du dossier User1 uniquement.
Cela permettra à Adam de lire tous les objets qui commencent par le nom de clé User1/. Cela ne donnera pas à Adam la possibilité de répertorier des objets et il ne peut donc pas naviguer dans l'interface utilisateur pour accéder
à ces objets. Adam peut uniquement extraire des objets dans le dossier User1 via des méthodes autres que l'interface utilisateur. Utilisez un caractère générique dans la règle pour donner accès à tous les objets possibles qui
commencent par User1/. Si vous n'incluez pas de caractère générique, Adam ne pourra accéder qu'à l'objet nommé 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"
Scénario 2: accordez à Adam l'accès en liste et en lecture à tous les objets du dossier User1 .
Cela permettra à Adam de lire et de répertorier tous les objets qui commencent par le nom de clé User1/. Utilisez également un caractère générique dans l'attribut de condition prefix . Si le caractère générique n'est
pas inclus, Adam n'a que l'accès Liste au premier niveau des objets ou des dossiers du dossier User1 . Cette règle ne permet pas à Adam de répertorier le compartiment au niveau racine. Si Adam utilise l'interface utilisateur,
il doit rechercher le compartiment avec le préfixe spécifique User1/ pour voir les objets auxquels il a accès.
"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
Scénario 3: accordez à Samantha l'accès à la liste, à la lecture et à la réplication des fichiers uniquement dans les sous-répertoires 2023 et 2024 du dossier Product .
Ces ensembles d'actions nécessitent que Samantha ait au moins le rôle Writer . Le rôle Writer contient également certaines actions qui ne spécifient pas un Path , un Prefix ou un Delimiter tel que cloud-object-storage.bucket.put_replication. Pour autoriser ces actions, utilisez l'opérateur StringExists avec les conditions basées sur les attributs de ressource.
Samantha ne pourra pas accéder à l'interface utilisateur à partir du dossier racine. Cette situation est illustrée dans le scénario 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"
Scénario 4: accordez à Samantha l'accès lui permettant de naviguer dans l'interface utilisateur jusqu'aux fichiers des dossiers 2023 et 2024 en plus de répertorier, de lire et de répliquer les fichiers dans 2023 et 2024.
Pour naviguer dans l'interface utilisateur jusqu'à MyBucket, Samantha a besoin du rôle de plateforme Viewer. En outre, Samantha a accès à tous les répertoires situés au-dessus du dossier cible. Dans ce cas, Samantha
a besoin d'un accès pour répertorier le niveau racine (défini par le préfixe de la chaîne vide) et le dossier Product/ . Cela permet à Samantha de voir tous les dossiers et objets de niveau racine.
"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"