Zugriff auf einzelne Objekte in einem Bucket steuern
Dieses Lernprogramm enthält Beispiele für die Verwendung von IAM-Zugriffsrichtlinien mit IBM Cloud® Object Storage-Buckets, um Benutzern Zugriff auf einzelne Objekte in einem Bucket zu erteilen.
Vorbereitende Schritte
IBM Cloud Object Storage speichert Daten in einer unstrukturierten Struktur, in der ein Bucket Milliarden von eindeutig benannten Objekten enthalten kann. Eine Ordnerhierarchie kann unter Verwendung identischer Präfixe in zugehörigen Objektnamen simuliert werden. Ein Objektname kann auch als Objektschlüssel bezeichnet werden. Nachfolgend finden Sie ein Beispiel:
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 diesem Beispiel können das Präfix User1, Engineeringund Product Ordnern auf Stammebene ähneln. Außerdem können 2023 und 2024 Unterverzeichnisse darstellen. Verwenden Sie das
Trennzeichen "/", um die Dateihierarchie darzustellen. Ein Begrenzer kann ein beliebiges unterstütztes Zeichen sein. Orgchart.pdf wird als Objekt auf Stammebene betrachtet.
Wenn Sie eine Listenanforderung für Ihr Bucket ausführen, können Sie ein Präfix für das Auflisten von Objekten oder den Inhalt des gesamten Buckets angeben. Außerdem können Sie optional einen Begrenzerwert in der Listenanforderung übergeben, um eine Ordnerstruktur in der Antwort zu simulieren. Weitere Informationen finden Sie in den Beispielen zur Verwendung der Bedingungsanweisungen prefix und delimiter.
Lese-oder Schreiboperationen zielen normalerweise auf einen bestimmten Objektnamen ab, der auch als Objektpfad bezeichnet wird.
Szenarios
Die folgenden Beispiele zeigen, wie IAM-Richtlinien und -Bedingungen verwendet werden, um Zugriff auf einzelne Objekte in einem Bucket zu erteilen. Das oben gezeigte Beispielbucket wird weiterhin verwendet. Diese Beispiele zeigen Auszüge der Richtlinie für uneingeschränkten Zugriff in Bezug auf die Konfiguration der Bedingungsanweisungen. Weitere Informationen finden Sie unter Zugriff auf Objekte in einem Bucket mit IAM-Zugriffsbedingungen zuweisen.
Szenario 1: Adam Lesezugriff nur auf alle Objekte im Ordner User1 erteilen.
Dies gibt Adam die Möglichkeit, alle Objekte zu lesen, die mit dem Schlüsselnamen User1/beginnen. Dies gibt Adam nicht die Möglichkeit, Objekte aufzulisten, und er kann daher nicht in der Benutzerschnittstelle navigieren, um auf
diese Objekte zuzugreifen. Adam kann Objekte im Ordner User1 nur über Nicht-UI-Methoden abrufen. Verwenden Sie ein Platzhalterzeichen in der Richtlinie, um Zugriff auf alle möglichen Objekte zu erteilen, die mit User1/beginnen.
Wenn Sie keinen Platzhalter angeben, erhält Adam nur Zugriff auf das Objekt 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"
Szenario 2: Adam-Listen-und Lesezugriff auf alle Objekte im Ordner User1 erteilen.
Dies gibt Adam die Möglichkeit, alle Objekte zu lesen und aufzulisten, die mit dem Schlüsselnamen User1/beginnen. Verwenden Sie außerdem ein Platzhalterzeichen im Bedingungsattribut prefix . Wenn Sie das Platzhalterzeichen
nicht einschließen, hat Adam nur Listenzugriff auf die erste Ebene von Objekten oder Ordnern im Ordner User1 . Diese Richtlinie lässt nicht zu, dass Adam das Bucket auf der Stammebene auflistet. Wenn Adam die Benutzerschnittstelle
verwendet, muss er das Bucket mit dem spezifischen Präfix User1/ durchsuchen, um die Objekte anzuzeigen, auf die er Zugriff hat.
"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
Szenario 3: Erteilen Sie Samantha Zugriff zum Auflisten, Lesen und Replizieren von Dateien in den Unterverzeichnissen 2023 und 2024 unter dem Ordner Product .
Für diese Gruppen von Aktionen muss Samantha mindestens die Rolle Writer haben. Die Rolle Writer enthält auch einige Aktionen, die keinen Path , keinen Prefix oder Delimiter angeben, wie z. B. cloud-object-storage.bucket.put_replication. Um diese Aktionen zuzulassen, verwenden Sie den Operator StringExists mit den auf Ressourcenattributen basierenden Bedingungen.
Samantha hat keinen Zugriff zum Navigieren in der Benutzerschnittstelle vom Stammordner aus. Diese Situation wird in Szenario 4 dargestellt.
"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"
Szenario 4: Erteilen Sie Samantha Zugriff zum Navigieren in der Benutzerschnittstelle zu den Dateien in den Ordnern 2023 und 2024 sowie zum Auflisten, Lesen und Replizieren von Dateien in 2023 und 2024.
Für die Navigation in der Benutzerschnittstelle zu MyBucketbenötigt Samantha die Plattformrolle Viewer. Außerdem erhält Samantha Zugriff auf alle Verzeichnisse oberhalb des Zielordners. In diesem Fall benötigt Samantha
Zugriff zum Auflisten der Stammebene (definiert durch das Präfix der leeren Zeichenfolge) und des Ordners Product/ . Dies ermöglicht Samantha, alle Ordner und Objekte auf Stammebene anzuzeigen.
"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"