Eigenschaften von IAM-Bedingungen

Dynamische Regeln und vertrauenswürdige Profile verwenden bedingte IAM-Anweisungen, die Sie angeben können, um föderierte Benutzer automatisch zu Zugriffsgruppen oder vertrauenswürdigen Profilen hinzuzufügen. Wenn sich Benutzer mit einer föderierten ID anmelden, werden die vom Identitätsprovider (IdP) bereitgestelten Daten dazu verwendet, die Benutzer auf der Basis der von Ihnen festgelegten Bedingungen dynamisch einer Zugriffsgruppe zuzuordnen. Weitere Informationen finden Sie unter Dynamische Regeln für Zugriffsgruppen erstellen und Vertrauenswürdige Profile erstellen.

Sie können auch bedingte IAM-Zugriffsrichtlinien zuweisen, um den temporären Zugriff auf Ressourcen in Ihrem Konto festzulegen oder den Zugriff auf Ressourcen während bestimmter Zeitfenster zu erlauben. Weitere Informationen finden Sie unter Beschränkung des Zugriffs mit zeitbasierten Bedingungen und im Abschnitt Bedingungen in /v2/policies Zugriffsrichtlinien.

Dynamische Regeln und vertrauenswürdige Profildetails

Jede Vertrauensbeziehung zwischen dynamischen Regeln und vertrauenswürdigen Profilen hat die folgenden Eigenschaften:

Name
Geben Sie einen benutzerdefinierten Namen ein, der Ihnen hilft, sich zu merken, welche Art von Benutzern Sie zu einer Zugriffsgruppe oder einem vertrauenswürdigen Profil hinzufügen.
Identitätsprovider (IdP)
Die dynamische Regel oder das vertrauenswürdige Profil wird nur ausgewertet, wenn der Benutzer, der sich anmeldet, sich mit dem Unternehmens-IdP mit diesem Aussteller-URI authentifiziert. Ihre IdP-URL wird in der Konsole angezeigt, damit Sie sie kopieren und einfügen, wenn Sie eine dynamische Regel oder ein vertrauenswürdiges Profil erstellen. Beispiel: https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20. Sie können den IdP auch anzeigen, indem Sie auf View identity provider (IdP) data klicken. Für IBMid ist der IdP das SAML-Feld "entityID", manchmal auch als Aussteller-ID bezeichnet, und ist Teil der Föderationskonfiguration, wenn Sie eine Einbindung mit IBMid durchführen. Für App ID ist die entsprechende Syntax die "realm ID". Weitere Informationen finden Sie unter Authentifizierung über einen externen Identitätsprovider aktivieren
Sitzungsdauer
Die Zugehörigkeit zur dynamischen Zugriffsgruppe oder die Sitzung des vertrauenswürdigen Profils läuft nach der in dieser Eigenschaft angegebenen Anzahl von Stunden ab. Wenn die Eigenschaft beispielsweise auf 24 Stunden gesetzt ist, endet die dynamische oder vertrauenswürdige Profilsitzung des Benutzers einen Tag (24 Stunden) nach der Anmeldung.

Eigenschaften der Regel- und Profilbedingungsanweisungen

Außerdem hat jede Vertrauensbeziehung zwischen dynamischen Regeln und vertrauenswürdigen Profilen eine oder mehrere Bedingungen, die aus den folgenden Eigenschaften bestehen. Benutzer müssen alle Bedingungen erfüllen, damit die gesamte Authentifizierung der dynamischen Regel oder des vertrauenswürdigen Profils als wahr ausgewertet wird:

Benutzer zulassen, wenn
Ein Attributname, der Teil Ihrer Identitätsproviderdaten ist. Weitere Informationen darüber, wie Attributnamen von Ihrem Enterprise Identity Provider für die Bedingungsauswertung erstellt werden, finden Sie unter Zuordnung von Enterprise Identity Provider-Attributen.
Operator
Vergleicht das im Allow users when Feld angegebene Attribut mit der Values Eigenschaft. Mögliche Werte: 'Gleich', 'Ungleich', 'Gleich (ohne Beachtung der Groß-/Kleinschreibung)', 'Ungleich (ohne Beachtung der Groß-/Kleinschreibung)', 'In' und 'Enthält'. Verwenden Sie die Option 'Enthält', wenn die Attributanweisung einen Arraytyp aufweist. Mit der Option "In" können Sie mehrere Werte für den Abgleich eingeben.
Werte
Ein Attributwert, der vom Vergleichsoperator verwendet wird, um den Allow users whenAttributnamen zu vergleichen.

Sie können sich eine dynamische Regel oder eine Bedingung für ein vertrauenswürdiges Profil als ein Schlüssel:Wert-Paar vorstellen. Der Schlüssel ist die Eingabe, die Sie im Feld Allow users when hinzufügen, und der Wert ist die Eingabe im Feld Values.

Verfügbare Operatoren für Regel- und Profilbedingungen

Verfügbare Operatoren für Bedingungen
Operator Beschreibung Beispielbedingung
Ist gleich Zeichenfolgevergleich mit Beachtung der Groß-/Kleinschreibung. Boolesche Werte oder Zahlenwerte werden vor dem Vergleich in eine Zeichenfolge konvertiert. primaryGroup ist gleich "Admins"
Ungleich Zurückgewiesener Vergleich von Zeichenketten unter Berücksichtigung der Groß- und Kleinschreibung. Boolesche Werte oder Zahlenwerte werden vor dem Vergleich in eine Zeichenfolge konvertiert. primaryGroup NotEquals "Admins"
Gleich (ohne Beachtung der Groß-/Kleinschreibung) Zeichenfolgevergleich ohne Beachtung der Groß-/Kleinschreibung. Boolesche Werte oder Zahlenwerte werden vor dem Vergleich in eine Zeichenfolge konvertiert. isManager EqualsIgnoreCase “tRuE”
Ungleich (ohne Beachtung der Groß-/Kleinschreibung) Zurückgewiesener Zeichenfolgevergleich ohne Beachtung der Groß-/Kleinschreibung. Boolesche Werte oder Zahlenwerte werden vor dem Vergleich in eine Zeichenfolge konvertiert. is_teamlead NotEqualsIgnoreCase "TrUe"
Enthält Wenn das Attribut ein Array aus Zeichenfolgen, Zahlen oder booleschen Werten ist, ermittelt Contains mithilfe des Komparators Equals, ob der angegebene Wert Teil des Arrays in der Anmeldenachricht ist. Wenn das Attribut stattdessen eine einzelne Zeichenfolge ist, ermittelt Contains, ob der angegebene Wert im Zeichenfolgeattribut in der Anmeldenachricht enthalten ist. group enthält "Admins".
In Kurznotation für mehrere Gleichheitsoperatoren. Vergleicht den Wert des Attributs für Anmeldenachrichten mit der Liste potenzieller Werte in dieser Regel. Boolesche Werte oder Zahlen werden vor dem Vergleich in eine Zeichenfolge konvertiert. jobRole in ["Manager","Director","Team-Lead"]

Beispiel

Die folgende Tabelle enthält Werte für jedes Feld für eine dynamische Regel oder eine vertrauenswürdige Profilbedingung. In diesem Beispiel werden Benutzer, die als Manager innerhalb des Verbundnetzes IdP identifiziert werden, einer IBM Cloud Zugriffsgruppe oder einem vertrauenswürdigen Profil zugeordnet, für das ein spezifischer Zugriff nur für Manager festgelegt wurde.

Beispielwerte
Feld Wert
Name Manager
Identitätsprovider https://idp.example.org/SAML2
Sitzungsdauer in Stunden 12
Benutzer zulassen, wenn (Attributname) isManager
Operator Equals
Wert true

Attributnamen für Rechenressourcen

Zum Herstellen einer Vertrauensbeziehung mit einer Rechenressource in einem vertrauenswürdigen Profil können Sie die IBM Cloud-Konsole, die IBM Cloud-CLI oder die IAM-API verwenden. Wenn Sie Alle Serviceressourcen auswählen und Bedingungen hinzufügen, um die Rechenressourceninstanzen zu filtern, die das Profil anwenden können, werden die Bedingungen auf der Basis der folgenden Ressourcenattribute erstellt.

Attributnamen für Kubernetes und Red Hat OpenShift

Attributnamen für Kubernetes und Red Hat OpenShift
Name in der IBM Cloud-Konsole CLI- und API-Name Beschreibung
Ressourcengruppen-ID resource_group_id Die ID der Ressourcengruppe, die diesen Cluster enthält. Sie können die Ressourcengruppe eines Clusters über die zugehörige Übersichtsseite in der IBM Cloud-Konsole identifizieren.
Name der Ressourcengruppe resource_group_name Der Name der Ressourcengruppe, die diesen Cluster enthält.
Serviceinstanz service_instance Die ID dieses Clusters. Sie können diesen Wert aus der Übersichtsseite des Clusters in der IBM Cloud-Konsole als "Cluster-ID" oder über die IBM Cloud-CLI abrufen.
Standort location Die Position des Clusters, die aus dem Cloudressourcennamen des Clusters abgeleitet wird.
Namensbereich namespace Der Namensbereich des Servicekontos, das zum Abrufen des Tokens einer Rechenressource und eines IAM-Tokens verwendet wird.
Servicekonto name Der Name des Servicekontos, das zum Abrufen des Tokens einer Rechenressource und eines IAM-Tokens verwendet wird.
Pod pod Der Name des Kubernetes-Pods, das den Code ausführt, der ein IAM-Token abrufen soll.

Attributnamen für den virtuellen Server für VPC

Attributnamen für den virtuellen Server für VPC
Name in der IBM Cloud-Konsole CLI- und API-Name Beschreibung
Ressourcengruppen-ID resource_group_id Die ID der Ressourcengruppe, die diesen Cluster enthält. Sie können die Ressourcengruppe eines Clusters über die zugehörige Übersichtsseite in der IBM Cloud-Konsole identifizieren.
Name der Ressourcengruppe resource_group_name Der Name der Ressourcengruppe, die diesen Cluster enthält.
Ressourcen-ID resource Die ID des virtuellen Servers für VPC.
Gruppenname der Instanz instance_group_name Der Name der Instanzgruppe, wenn dieser virtuelle Server Teil einer Instanzgruppe ist.
Bereich region Die Region, in der dieser virtuelle Server bereitgestellt wird.
Teilnetz subnet_id Die Teilnetz-ID des virtuellen Servers für VPC, sofern verfügbar.
VPC-ID vpc_id Die VPC-ID des virtuellen Servers für VPC, sofern verfügbar.
Zone zone Der Name der Zone, in der dieser virtuelle Server bereitgestellt wird.

Beispiele für Befehle in der IBM Cloud-CLI

In den folgenden Beispielen wird dargestellt, wie Sie die Attributnamen in der Befehlszeilenschnittstelle verwenden können, um Verknüpfungen und Bedingungen für vertrauenswürdige Profile zu erstellen.

Bedingungen für vertrauenswürdige Profile für Kubernetes erstellen

Geben Sie den folgenden Befehl ein, um das vertrauenswürdige Profil mit der ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c mit allen Servicekonten im Kubernetes-Cluster c0pigdctkkc07fs7pm06 im Konto 444aebb0657c7f0f3aae8e7bdc78709a und dem Namensbereich my-namespace des Servicekontos zu verbinden:

ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
              --name NewRule4IKS --type Profile-CR --cr-type IKS_SA \
               --conditions "claim:service_instance,operator:EQUALS,vlaue:c0pigdctkkc07fs7pm06" \
               --conditions "claim:namespace,operator:EQUALS,value:my-namespace"

Bedingungen für vertrauenswürdige Profile für VPC erstellen

Geben Sie den folgenden Befehl ein, um das vertrauenswürdige Profil mit der ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c mit allen virtuellen Servern in einer VPC r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d im Konto 444aebb0657c7f0f3aae8e7bdc78709a zu verbinden:

ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
              --name NewRule4VSI --type Profile-CR --cr-type VSI \
               --conditions "claim:vpc_id,operator:EQUALS,value:r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d"

Bedingungen in der v2 Zugangspolitik

Zeitbasierte und ressourcenattributbasierte Bedingungen für IAM-Zugriffsrichtlinien verwenden die /v2/policies-Syntax. Richtlinien, die die /v1/policies-Syntax verwenden, können keine zeitbasierten, auf Ressourcenattributen basierenden Bedingungen hinzufügen. Weitere Informationen finden Sie unter Versionseinschränkungen der Zugriffsrichtlinie.

Um das neue Schema für Richtlinien anzuzeigen, siehe /v2/policies.

Zeitabhängige Bedingungen

In der folgenden Tabelle sind die Operatoren aufgeführt, die für die Erstellung zeitbasierter Bedingungen für Zugriffsrichtlinien zur Verfügung stehen.

Die Betreiber, die für zeitbasierte Bedingungen für die Zugangspolitik zur Verfügung stehen.
Operator Beschreibung Beispiel
dayOfWeekAnyOf Die Wochentage, an denen der Kunde die Police nutzen kann.
1 - Montag
2 - Dienstag
3 - Mittwoch
4- Donnerstag
5 - Freitag
6 - Samstag
7 - Sonntag
Siehe Beispiel.
timeGreaterThanOrEquals Der Zeitpunkt, ab dem die Bedingung den Zugang gewährt. Die Zeit wird über <time>±<time_zone_offset> berechnet. Siehe Beispiel.
timeLessThanOrEquals Der Zeitpunkt, zu dem die Bedingung den Zugriff beendet. Die Zeit wird über <time>±<time_zone_offset> berechnet. Siehe Beispiel.
dateTimeGreaterThanOrEquals Das Datum und die Uhrzeit, ab der die Bedingung den Zugang gewährt. Das Datum wird von <datetime>±<time_zone_offset> berechnet. Siehe Beispiel.
dateTimeLessThanOrEquals Das Datum und die Uhrzeit, zu der die Bedingung den Zugriff beendet. Das Datum wird von <datetime>±<time_zone_offset> berechnet. Siehe Beispiel.

Wenn Sie eine Bedingung mit einem GreaterThanOrEquals Operator definieren, schließen Sie immer eine Bedingung mit einem LessThanOrEquals Operator ein. Auf diese Weise gibt es eine klar definierte Dauer, unabhängig davon, ob es sich um eine zeitlich begrenzte, ganztägig wiederkehrende oder um eine wiederkehrende mit benutzerdefinierten Stunden handelt. Weitere Informationen finden Sie unter Konditionsmuster.

Für Datums- und Zeitoperatoren unterstützen die Richtlinien das ISO 8601-Format hh:mm:ss±hh:mm. Der Zeitzonenversatz bezieht sich auf die koordinierte Weltzeit.

Verwenden Sie die folgenden Variablen, um die key darzustellen, die das Umgebungsattribut des Clients angibt, das von der Richtlinie ausgewertet wird. Jedes key unterstützt eine bestimmte Anzahl von Operatoren.

Variable Notation für zeitbasierte Bedingungen.
Variablenname Beschreibung Unterstützte Operatoren
environment.attributes.current_time Die aktuelle Uhrzeit des Kunden. timeGreaterThanOrEquals, timeLessThanOrEquals
environment.attributes.current_date_time Das aktuelle Datum und die Uhrzeit des Kunden. dateTimeGreaterThanOrEquals, dateTimeLessThanOrEquals
environment.attributes.day_of_week Der aktuelle Wochentag des Kunden. dayOfWeekAnyOf, dayOfWeekEquals

Beispiel: dayOfWeekAnyOf, timeGreaterThanOrEquals, und timeLessThanOrEquals

Die Wochentage, die in diesem Beispiel angegeben werden, entsprechen Montag, Dienstag, Mittwoch und Donnerstag. Der Wert timeGreaterThanOrEquals gibt an, dass die Bedingung um 9 Uhr morgens in der Zeitzone UTC-5 beginnt, Zugang zu gewähren. Der Wert timeLessThanOrEquals zeigt an, dass die Bedingung den Zugriff um 17 Uhr in der Zeitzone UTC-5 beendet.environment.attributes.current_time und environment.attributes.day_of_week zeigen an, dass es sich um eine wiederkehrende zeitbasierte Bedingung handelt. Fügen Sie immer time Bedingungen mit einer dayOfWeek Bedingung ein.

"conditions": [
			{
				"key": "{{environment.attributes.day_of_week}}",
				"operator": "dayOfWeekAnyOf",
				"value": [
					1,
					2,
					3,
					4
				]
			},
			{
				"key": "{{environment.attributes.current_time}}",
				"operator": "timeGreaterThanOrEquals",
				"value": "09:00:00-05:00"
			},
			{
				"key": "{{environment.attributes.current_time}}",
				"operator": "timeLessThanOrEquals",
				"value": "17:00:00-05:00"
			}
		]

Beispiel: dayOfWeekEquals

Der Wochentag wird in diesem Beispiel durch 3 in der Zeichenkette value repräsentiert, was dem Mittwoch entspricht. In der gleichen Zeichenfolge steht +6:00 für die Zeitzone UTC+6:00. Es gibt nur eine Bedingung, daher ist sie unter "rule" verschachtelt.

"rule": {
		"key": "{{environment.attributes.day_of_week}}",
		"operator": "dayOfWeekEquals",
		"value": "3+06:00"
},

Beispiel: dateTimeGreaterThanOrEquals und dateTimeLessThanOrEquals

In diesem Beispiel gibt der Wert dateTimeGreaterThanOrEquals an, dass die Bedingung am 26. Dezember 2022 um 9 Uhr morgens in der Zeitzone UTC-5 beginnt, Zugang zu gewähren. Der Wert dateTimeLessThanOrEquals zeigt an, dass die Bedingung den Zugriff am 27. Dezember 2022 um 17 Uhr in der Zeitzone UTC-5 beendet. environment.attributes.current_date_time zeigt an, dass es sich um eine zeitlich begrenzte Bedingung handelt.

"conditions": [
			{
				"key": "{{environment.attributes.current_date_time}}",
				"operator": "dateTimeGreaterThanOrEquals",
				"value": "2022-12-26T09:00:00-05:00"
			},
			{
				"key": "{{environment.attributes.current_date_time}}",
				"operator": "dateTimeLessThanOrEquals",
				"value": "2022-12-27T17:00:00-05:00"
			}
		]

Auf Ressourcenattributen basierende Bedingungen

In der folgenden Tabelle sind die Operatoren aufgeführt, die zum Erstellen von auf Ressourcenattributen basierenden Bedingungen für Zugriffsrichtlinien verfügbar sind.

Die Operatoren, die für attributbasierte Bedingungen für Zugriffsrichtlinien zur Verfügung stehen.
Operator Beschreibung Beispiel
stringEquals Zeichenfolgevergleich mit Beachtung der Groß-/Kleinschreibung. Boolesche Werte oder Zahlenwerte werden vor dem Vergleich in eine Zeichenfolge konvertiert. Siehe Beispiel.
stringExists Boolean, wobei true angibt, dass die Zeichenfolge vorhanden sein muss und leer sein kann. false gibt an, dass die Zeichenfolge nicht vorhanden sein darf. Siehe Beispiel.
stringMatch Die Groß-/Kleinschreibung wird bei der Zeichenkettenübereinstimmung zwischen dem Muster und der Zielzeichenkette berücksichtigt, indem entweder ein Sternchen (*), ein Fragezeichen (?), beides oder keines (wie beim literalen Wert) verwendet wird. Ein Stern (*) stellt eine beliebige Folge von null, einem oder mehreren Zeichen in der Zeichenfolge dar, ein Fragezeichen (?) stellt ein einzelnes Zeichen dar. Sie können auch ein Sternchen * und ein Fragezeichen ? als literalen Wert ausdrücken, indem Sie sie in zwei Gruppen von geschweiften Klammern {{}} einschließen. Siehe Beispiel.
stringEqualsAnyOf Groß- und Kleinschreibung beachtende exakte Übereinstimmung mit einer beliebigen Zeichenkette in einem Array von Zeichenketten. Grenze von 10 Werten. Siehe Beispiel.
stringMatchAnyOf Groß- und Kleinschreibung beachtende Zeichenkette, die mit einer beliebigen Zeichenkette in einem Array von Zeichenketten übereinstimmt. Die Zeichenkettenwerte können entweder ein Sternchen (*), ein Fragezeichen (?), beides oder kein Sternchen (wie beim literalen Wert) enthalten. Ein Stern (*) stellt eine beliebige Folge von null, einem oder mehreren Zeichen in der Zeichenfolge dar, ein Fragezeichen (?) stellt ein einzelnes Zeichen dar. Sie können auch ein Sternchen * und ein Fragezeichen ? als literalen Wert ausdrücken, indem Sie sie in zwei Gruppen von geschweiften Klammern {{}} einschließen. Grenze von 10 Werten.

Die Adresse key steht für das Ressourcenattribut, das vom gewählten Dienst unterstützt wird. Eine key hat die Form von resource.attributes.<attribute-name>. Im Fall von Cloud Object Storage beispielsweise kann das unterstützte Attribut prefix als Schlüssel mit der Schreibweise resource.attributes.prefix dargestellt werden. Die folgende Tabelle enthält Beispielvariablen und ist nicht allumfassend.

Variable Notation für auf Ressourcenattributen basierende Bedingungen.
Variablenname Beschreibung Unterstützte Operatoren
resource.attributes.prefix Legt das Präfix fest, das diese Bedingung für die Auflistung von Objekten oder Ordnern zulassen soll. stringMatchAnyOf
resource.attributes.path Umfasst alle Lese-, Schreib- und Verwaltungszugriffe auf Objekte. stringMatchAnyOf
resource.attributes.delimiter Schränkt die Art der Ordnerstruktur ein, die der Benutzer erstellen kann, und hilft dem Benutzer bei der Navigation im Bucket wie bei einer Dateihierarchie. stringEquals

Weitere Informationen finden Sie unter Konditionsmuster.

Beispiel: stringMatchAnyOf und stringEqualsAnyOf

In diesem Beispiel bedeutet der Wert stringMatchAnyOf für die Variable resource.attributes.path, dass der Zugriff gewährt wird, wenn der Objektpfad entweder mit home/David/*, special/*, restricted/* oder temporary/test*spatial.?.log (z. B. temporary/test_spatial.1.log ) beginnt. Der Wert or zeigt an, dass es eine alternative Bedingung gibt, die den Zugang gewähren kann.

Der Wert stringEqualsAnyOf für die Variable resource.attributes.delimiter zeigt an, dass der Zugang gewährt wird, wenn kein Begrenzungsindikator vorhanden ist oder wenn / vorhanden ist. Außerdem zeigt stringEqualsAnyOf für die Variable resource.attributes.prefix an, dass auch home/ oder home/David/ oder kein Präfix vorhanden sein muss, um den Zugriff zu gewähren. Der Wert and gibt an, dass sowohl resource.attributes.delimiter als auch resource.attributes.prefix erfüllt sein müssen, um den Zugang zu gewähren.

"pattern": "attribute-based-condition:resource:literal-and-wildcard",
"rule": {
    "operator": "or",
    "conditions": [
      {
        "key": "{{resource.attributes.path}}",
        "operator": "stringMatchAnyOf",
        "value": [
          "home/David/*",
          "special/*",
          "restricted/*",
          "temporary/test*spatial.?.log"
        ]
      },
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.delimiter}}",
            "operator": "stringEqualsAnyOf",
            "value": [
              "",
              "/"
            ]
          },
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringEqualsAnyOf",
            "value": [
              "",
              "home/",
              "home/David/"
            ]
          }
        ]
      }
    ]
  }

Beispiel stringExists, stringEquals, stringMatch

In diesem Beispiel zeigt stringEquals für iam_id, accountID, serviceName und resourceType an, dass eine exakte Zeichenfolgenübereinstimmung durchgeführt wird. Das Sternchen im Wert stringMatch für die Ressourcenvariable bedeutet, dass der Zugriff auf alle Ressourcen gewährt wird, die mit dev-bucket- beginnen. Der Wert true stringExists für die Pfadvariable und der Wert false stringExists für die Präfix- und Delimiter-Variable zeigen an, dass nur der Pfad existieren muss, um Zugang zu gewähren.

{
    "type": "access",
    "subject": {
        "attributes": [
            {
                "key": "iam_id",
                "operator": "stringEquals",
                "value": "IBMid-1234"
            }
        ]
    },
    "control": {
        "grant": {
            "roles": [
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolderContent"
                },
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolder"
                },
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:AllFolderOperations"
                }
            ]
        }
    },
    "resource": {
        "attributes": [
            {
                "name": "accountId",
                "operator": "stringEquals",
                "value": "account-123"
            },
            {
                "key": "serviceName",
                "operator": "stringEquals",
                "value": "cloud-object-storage"
            },
            {
                "key": "serviceInstance",
                "operator": "stringEquals",
                "value": "cd329d97-c33d-4428-b39e-6170dc1c2a1e"
            },
            {
                "key": "resource",
                "operator": "stringMatch",
                "value": "dev-bucket-*"
            },
            {
                "key": "resourceType",
                "operator": "stringEquals",
                "value": "bucket"
            }
        ]
    },
    "rule": {
        "operator": "and",
        "conditions": [
            {
                "key": "{{resource.attributes.path}}",
                "operator": "stringExists",
                "value": true
            },
            {
                "key": "{{resource.attributes.prefix}}",
                "operator": "stringExists",
                "value": false
            },
            {
                "key": "{{resource.attributes.delimiter}}",
                "operator": "stringExists",
                "value": false
            }
        ]
    }
}