Amazon Relational Database Service
Guide de l'utilisateur (Version de l'API 2014-10-31)

Utilisation de conditions de stratégie IAM pour un contrôle d'accès précis

Lorsque vous accordez des autorisations dans Amazon RDS, vous pouvez spécifier des conditions pour déterminer comment une stratégie d'autorisation doit prendre effet.

Présentation

Dans Amazon RDS, vous avez la possibilité de spécifier des conditions lorsque vous accordez des autorisations à l'aide d'une stratégie IAM (voir Contrôle d'accès). Par exemple, vous pouvez :

  • autoriser les utilisateurs à créer une instance de base de données seulement s'ils spécifient un moteur de base de données particulier ;

  • autoriser les utilisateurs à modifier les ressources RDS qui sont balisées avec un nom et une valeur de balise spécifiques.

Il existe deux façons de spécifier des conditions dans une stratégie IAM pour Amazon RDS :

Spécification de conditions : Utilisation de clés de condition

AWS fournit un ensemble de clés de condition prédéfinies (clés de condition à l'échelle d'AWS) pour tous les services AWS qui prennent en charge IAM pour le contrôle d'accès. Par exemple, vous pouvez utiliser la clé de condition aws:userid pour exiger un ID AWS spécifique lorsque vous demandez une action. Pour obtenir de plus amples informations et la liste des clés de condition à l'échelle d'AWS, veuillez consulter Clés disponibles pour les conditions dans le Guide de l'utilisateur IAM.

Note

Les noms de clé de condition ne sont pas sensibles à la casse. La sensibilité à la casse des valeurs des clés de condition dépend de l'opérateur de condition que vous utilisez. Pour de plus amples informations, veuillez consulter Éléments de stratégie JSON IAM : Opérateurs de condition dans le Guide de l'utilisateur IAM.

De plus, Amazon RDS fournit également ses propres clés de condition que vous pouvez inclure dans les éléments Condition, dans une stratégie d'autorisations IAM. Le tableau suivant montre les clés de condition RDS qui s'appliquent aux ressources RDS.

Clé de condition RDS Description Type de valeur
rds:DatabaseClass Type de la classe d'instance de base de données. String
rds:DatabaseEngine Moteur de base de données, tel que MySQL. String
rds:DatabaseName Nom défini par l'utilisateur de la base de données sur l'instance de base de données. String
rds:MultiAz Valeur qui spécifie si l'instance de base de données s'exécute dans plusieurs zones de disponibilité. Pour indiquer que l'instance de base de données utilise plusieurs zones de disponibilité, spécifiez true. Booléen
rds:Piops Valeur contenant le nombre de PIOPS (IOPS provisionnées) que l'instance prend en charge. Pour indiquer une instance de base de données ne prenant pas en charge PIOPS, spécifiez 0. Integer
rds:StorageEncrypted Valeur qui spécifie si le stockage d'instance de base de données doit être chiffré. Pour appliquer le chiffrement du stockage, spécifiez true. Booléen
rds:StorageSize Taille du volume de stockage (en Gio). Integer
rds:Vpc Valeur qui spécifie si l'instance de base de données s'exécute dans un Amazon Virtual Private Cloud (Amazon VPC). Pour indiquer que l'instance de base de données s'exécute dans un Amazon VPC, spécifiez true. Booléen
rds:req-tag Valeur qui limite l'ensemble de clés et de valeurs de balise pouvant être utilisées pour baliser une ressource. String

Par exemple, l'élément Condition suivant utilise une clé de condition et spécifie le moteur de base de données MySQL. Vous pouvez appliquer cela à une stratégie IAM qui accorde l'autorisation à l'action rds:CreateDBInstance pour permettre aux utilisateurs de créer uniquement des instances de bases de données à l'aide du moteur de base de données MySQL. Pour obtenir un exemple de stratégie IAM utilisant cette condition, consultez Exemples de stratégies : Utilisation des clés de condition.

"Condition":{"StringEquals":{"rds:DatabaseEngine": "mysql" } }

Pour obtenir la liste de tous les identifiants des clés de condition RDS, ainsi que les actions et ressources RDS auxquelles elles s'appliquent, consultez Autorisations d'API Amazon RDS : référence des actions, ressources et conditions.

Exemples de stratégies : Utilisation des clés de condition

Les exemples suivants montrent comment vous pouvez utiliser des clés de condition dans les stratégies d'autorisation IAM Amazon RDS.

Exemple 1 : Accorder l'autorisation de créer une instance de base de données qui utilise un moteur de base de données spécifique et n'utilise pas plusieurs zones de disponibilité

La stratégie suivante utilise une clé de condition RDS et autorise un utilisateur à créer seulement des instances de bases de données qui utilisent le moteur de base de données MySQL et n'utilisent pas plusieurs zones de disponibilité. L'élément Condition indique l'exigence que le moteur de base de données soit MySQL.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowMySQLCreate", "Effect":"Allow", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:DatabaseEngine":"mysql" }, "Bool":{ "rds:MultiAz": false } } } ] }

Exemple 2 : Refuser explicitement l'autorisation de créer des instances de bases de données pour certaines classes d'instance de base de données et de créer des instances de bases de données qui utilisent les IOPS provisionnées

La stratégie suivante refuse explicitement l'autorisation de créer des instances de bases de données qui utilisent les classes d'instance de base de données r3.8xlarge et m4.10xlarge, lesquelles représentent les instances les plus grandes et les plus onéreuses. Cette stratégie empêche également les utilisateurs de créer des instances de bases de données qui utilisent les IOPS provisionnées, ce qui génère un coût additionnel.

Le refus explicite d'une autorisation a priorité sur toutes les autres autorisations accordées. Cela garantit que des identités n'obtiendront pas par erreur une autorisation que vous ne souhaitez pas accorder.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyLargeCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:DatabaseClass":[ "db.r3.8xlarge", "db.m4.10xlarge" ] } } }, { "Sid":"DenyPIOPSCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "NumericNotEquals":{ "rds:Piops":"0" } } } ] }

Exemple 3 : Limiter l'ensemble de clés et de valeurs de balise pouvant être utilisées pour baliser une ressource

La politique suivante utilise une clé de condition RDS et autorise l'ajout d'une balise avec la clé stage à une ressource avec les valeurs test, qa et production.

{ { "Version" : "2012-10-17", "Statement" : [{ "Effect" : "Allow", "Action" : [ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource" : "*", "Condition" : { "streq" : { "rds:req-tag/stage" : [ "test", "qa", "production" ] } } } ] } }

Spécification de conditions : Utilisation de balises personnalisées

RDS prend en charge la spécification de conditions dans une stratégie IAM à l'aide de balises personnalisées.

Par exemple, si vous ajoutez une balise nommée environment à vos instances de bases de données avec des valeurs telles que beta, staging, production etc., vous pouvez créer une stratégie limitant certains utilisateurs aux instances de bases de données en fonction de la valeur de la balise environment.

Note

Les identifiants des balises personnalisées sont sensibles à la casse.

Le tableau suivant répertorie les identifiants des balises RDS que vous pouvez utiliser dans un élément Condition.

Identifiant de balise RDS S'applique à
db-tag Instances DB, y compris les réplicas en lecture
snapshot-tag Snapshots DB
ri-tag Instances DB réservées
secgrp-tag Groupes de sécurité DB
og-tag Groupes d'options DB
pg-tag Groupes de paramètres DB
subgrp-tag Groupes de sous-réseaux DB
es-tag Abonnements aux événements
cluster-tag Clusters DB
cluster-pg-tag Groupes de paramètres de cluster DB
cluster-snapshot-tag Instantanés de cluster DB

La syntaxe d'une condition de balise personnalisée est la suivante :

"Condition":{"StringEquals":{"rds:rds-tag-identifier/tag-name": ["value"]} }

Par exemple, l'élément Condition suivant s'applique aux instances de bases de données avec une balise nommée environment et la valeur de balise production.

"Condition":{"StringEquals":{"rds:db-tag/environment": ["production"]} }

Pour plus d'informations sur la création de balises, consultez Balisage des ressources Amazon RDS.

Important

Si vous gérez l'accès à vos ressources RDS à l'aide du balisage, nous vous recommandons de sécuriser l'accès aux balises pour vos ressources RDS. Vous pouvez gérer l'accès aux balises en créant des stratégies pour les actions AddTagsToResource et RemoveTagsFromResource. Par exemple, la stratégie suivante refuse aux utilisateurs la capacité à ajouter ou supprimer des balises pour toutes les ressources. Vous pouvez alors créer des stratégies pour autoriser des utilisateurs spécifiques à ajouter ou supprimer des balises.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyTagUpdates", "Effect":"Deny", "Action":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"*" } ] }

Pour obtenir la liste de toutes les valeurs des clés de condition, ainsi que les actions et ressources RDS auxquelles elles s'appliquent, consultez Autorisations d'API Amazon RDS : référence des actions, ressources et conditions.

Exemples de stratégies : Utilisation de balises personnalisées

Les exemples suivants montrent comment vous pouvez utiliser des balises personnalisées dans les stratégies d'autorisation IAM Amazon RDS. Pour plus d'informations sur l'ajout de balises à une ressource Amazon RDS, consultez Utilisation des Amazon Resource Names (ARN) dans Amazon RDS.

Note

Tous les exemples utilisent la région us-west-2 et contiennent des ID de compte fictifs.

Exemple 1 : Accorder une autorisation pour des actions sur une ressource à l'aide d'une balise spécifique avec deux valeurs différentes

La stratégie suivante accorde l'autorisation d'exécuter les API ModifyDBInstance et CreateDBSnapshot sur les instances avec la balise stage définie sur development ou sur test.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowDevTestCreate", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance", "rds:CreateDBSnapshot" ], "Resource":"*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }

Exemple 2 : Refuser explicitement l'autorisation de créer une instance de base de données qui utilise les groupes de paramètres DB spécifiés

La stratégie suivante refuse explicitement l'autorisation de créer une instance de base de données qui utilise les groupes de paramètres DB avec des valeurs de balise spécifiques. Vous pouvez appliquer cette stratégie si vous avez besoin qu'un groupe de paramètres DB créé par le client soit toujours utilisé lors de la création des instances de bases de données. Notez que les stratégies qui utilisent Deny sont le plus souvent utilisées pour limiter un accès accordé par une stratégie plus large.

Le refus explicite d'une autorisation a priorité sur toutes les autres autorisations accordées. Cela garantit que des identités n'obtiendront pas par erreur une autorisation que vous ne souhaitez pas accorder.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyProductionCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:pg-tag/usage":"prod" } } } ] }

Exemple 3 : Accorder une autorisation pour des actions sur une instance de base de données dont le nom d'instance a un nom d'utilisateur comme préfixe

La stratégie suivante accorde l'autorisation d'appeler une API quelconque (à l'exception de AddTagsToResource et de RemoveTagsFromResource) sur une instance de base de données dont le nom d'instance de base de données a comme préfixe le nom de l'utilisateur et a une balise nommée stage égale à devo ou qui n'a pas de balise nommée stage.

La ligne Resource dans la stratégie identifie une ressource par son Amazon Resource Name (ARN). Pour plus d'informations sur l'utilisation des noms ARN avec les ressources Amazon RDS, consultez Utilisation des Amazon Resource Names (ARN) dans Amazon RDS.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowFullDevAccessNoTags", "Effect":"Allow", "NotAction":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"arn:aws:rds:*:123456789012:db:${aws:username}*", "Condition":{ "StringEqualsIfExists":{ "rds:db-tag/stage":"devo" } } } ] }