Conditions
L'élément de conditions facultatives d'une instruction de stratégie limite l'accès en fonction des attributs fournis dans IAM.
Une condition renvoie les ressources en fonction des paramètres spécifiés. Par exemple, utilisez une condition pour renvoyer les ressources dont le nom contient certains caractères.
Syntaxe pour une condition unique : variable =|!= value
Syntaxe pour des conditions multiples : any|all {<condition>,<condition>,...}
Pour créer un OU logique pour un ensemble de conditions, utilisez any
. Pour créer un ET logique pour un ensemble de conditions, utilisez all
.
La correspondance de condition ignore les noms sensibles à la casse. Par exemple, une condition pour un bucket nommé "BucketA" correspond également à un bucket nommé "bucketA".
- Chaîne:
'johnsmith@example.com'
'ocid1.compartment.oc1.exampleuniqueID'
(les apostrophes sont requises autour de la valeur)
- Motif :
-
/hr*/
(correspond aux chaînes qui commencent par "hr") -
/*hr/
(correspond aux chaînes qui se terminent par "hr") -
/*hr*/
(correspond aux chaînes qui contiennent "hr")
-
Dans les exemples suivants, les instructions qui indiquent la condition ne permettent pas à GroupAdmins de répertorier tous les utilisateurs et groupes. Des instructions incluant le verbe
inspect
sont ajoutées pour plus d'exhaustivité. Reportez-vous à Variables non applicables à une demande donnant lieu au refus de la demande.Exemples :
- Une seule condition :
Condition unique pour un type de ressource (groupes)
Allow group GroupAdmins to manage groups in tenancy where target.group.name = /A-Users-*/ Allow group GroupAdmins to inspect groups in tenancy
Condition unique pour de nombreux types de ressource (utilisateurs et groupes)
Allow group GroupAdmins to inspect users in tenancy
Allow group GroupAdmins to use users in tenancy where target.group.name != 'Administrators'
Allow group GroupAdmins to inspect groups in tenancy
Allow group GroupAdmins to use groups in tenancy where target.group.name != 'Administrators'
Plusieurs conditions pour une ressource (groupes)
Allow group NetworkAdmins to manage virtual-network-family in tenancy where target.compartment.id != 'ocid1.compartment.oc1.exampleuniqueID'
- Plusieurs conditions
La stratégie suivante permet à GroupAdmins de créer, de mettre à jour ou de supprimer tous les groupes dont le nom commence par "
A-
", à l'exception du groupeA-Admins
:Allow group GroupAdmins to manage groups in tenancy where all {target.group.name=/A-*/,target.group.name!='A-Admins'} Allow group GroupAdmins to inspect groups in tenancy
Variables non applicables à une demande donnant lieu au refus de la demande
Si la variable n'est pas applicable à la demande entrante, la condition évalue la demande comme false et la demande est refusée. Par exemple, voici quelques instructions de stratégie de base qui, ensemble, permettent à une personne d'ajouter des utilisateurs à n'importe quel groupe, à l'exception de Administrators, ou d'en enlever :
Allow group GroupAdmins to use users in tenancy where target.group.name != 'Administrators'
Allow group GroupAdmins to use groups in tenancy where target.group.name != 'Administrators'
Si un utilisateur dans GroupAdmins tente d'appeler une opération d'API générale pour les utilisateurs, telle que ListUsers
ou UpdateUser
(ce qui vous permet de modifier la description de l'utilisateur), la demande est refusée, même si ces opérations d'API sont couvertes par use users
. L'exemple d'instruction de stratégie pour use users
inclut une variable target.group.name
, mais la demande ListUsers
ou UpdateUser
n'indique pas de groupe. La demande est refusée car aucune valeur target.group.name
n'a été fournie.
Pour accorder l'accès à un utilisateur général lorsqu'une opération d'API n'implique pas un groupe particulier, vous devez ajouter une autre instruction qui donne le niveau d'accès que vous voulez accorder mais n'inclut pas la condition. Par exemple, pour accorder l'accès à ListUsers
, vous avez besoin d'une instruction similaire à l'instruction suivante :
Allow group GroupAdmins to inspect users in tenancy
Pour accorder un accès à UpdateUser
, vous avez besoin de cette instruction (qui couvre également ListUsers
car le verbe use
inclut les capacités du verbe inspect
) :
Allow group GroupAdmins to use users in tenancy
Ce concept général applique également tout autre type de ressource avec des variables cible, par exemple, ListGroups.
Contrôle d'accès basé sur des balises
Utilisez des conditions et un ensemble de variables de balise pour écrire des stratégies qui définissent l'accès en fonction des balises appliquées à une ressource. Vous pouvez contrôler l'accès en fonction d'une balise qui existe sur la ressource demandeante (groupe ou groupe dynamique dans la stratégie) ou sur la cible de la demande (ressource ou compartiment). Le contrôle d'accès basé sur les balises offre une certaine flexibilité aux stratégies, ce qui vous permet de définir un accès couvrant des compartiments, des groupes et des ressources. Pour plus d'informations sur l'écriture de stratégies destinées à attribuer l'accès en fonction des balises, reportez-vous à Utilisation des balises pour gérer l'accès.