Comment puis-je utiliser les caractères génériques avec un élément Principal et le refus explicite dans une stratégie de compartiment Amazon S3 ?

Date de la dernière mise à jour : 20/05/2021

Je souhaite utiliser des caractères génériques avec un élément Principal et le refus explicite dans une stratégie de compartiment Amazon Simple Storage Service (Amazon S3). Comment puis-je procéder ?

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. L'utilisateur racine du compte AWS est inclus pour empêcher le verrouillage.

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

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": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/cross-account-read-only-role"
                ]
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "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 ?