Comment utiliser des caractères génériques avec refus explicite avec des éléments « Principal » au lieu des éléments « NotPrincipal » dans une stratégie de compartiment Amazon S3 ?

Date de la dernière mise à jour : 18/09/2020

Comment utiliser des caractères génériques avec refus explicite avec des éléments « Principal » au lieu d'éléments « NotPrincipal » dans une stratégie de compartiment Amazon Simple Storage Service (Amazon S3) ?

Brève description

Vous pouvez empêcher des entités AWS Identity and Access Management (IAM) spécifiques d'accéder à vos compartiments Amazon S3 en désignant des autorisations dans une stratégie de compartiment qui utilise l'élément NotPrincipal et le refus explicite. Pour plus d'informations, consultez NotPrincipal avec Deny.

Toutefois, étant donné que les caractères génériques ne sont pas pris en charge avec l'élément NotPrincipal, vous devez utiliser Principal comme entité cible dans chaque bloc d'instructions, ce qui inclut la condition de chaque bloc d'autorisation.

Résolution

Au lieu d'utiliser NotPrincipal, utilisez Principal comme entité cible dans chaque bloc d'instructions, qui inclut la condition de chaque bloc d'autorisation.

Avant de commencer, vous devez disposer des ressources suivantes :

Dans cet exemple, les caractères génériques sont utilisés dans aws:userid pour inclure tous les noms transmis par le processus appelant (tels que l'ID de l'application, du service ou de l'instance) lorsqu'il appelle pour obtenir des informations d'identification temporaires. Pour plus d'informations, consultez la section Informations disponibles dans toutes les demandes. Le compte racine est inclus pour empêcher le verrouillage.

Remarque : veillez à remplacer les exemples de noms par vos propres ID de rôle et noms de compartiment.

StringNotLike dans le bloc de refus :

"Condition": {
                "StringNotLike": {
                    "aws:userid": [
                        "AROAID2GEXAMPLEROLEID:*",
                        "444455556666"
                    ]
                }
            }

Voici la stratégie complète :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "arn:aws:iam::444455556666:role/cross-account-read-only-role"
            ],
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "arn:aws:iam::444455556666:role/cross-account-read-only-role"
            ],
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1/*"
        },
        {
            "Sid": "",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1/*",
                "arn:aws:s3:::awsexamplebucket1"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userid": [
                        "AROAID2GEXAMPLEROLEID:*",
                        "444455556666"
                    ]
                }
            }
        }
    ]
}

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?