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

Date de la dernière mise à jour : 16/08/2021

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

Brève description

Pour empêcher certaines entités AWS Identity and Access Management (IAM) d'accéder à vos compartiments Amazon S3, désignez des autorisations spécifiques dans une politique de compartiment. La politique de compartiment doit utiliser un élément NotPrincipal et un refus explicite. Pour plus d'informations, consultez l'utilisation de 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. Chaque bloc d'instructions doit également inclure 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. Par exemple, les caractères génériques sont utilisés pour un ID d'application, de service ou d'instance lorsque des appels sont effectués pour obtenir des informations d'identification temporaires. Pour plus d'informations, consultez 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/s3-access-role"
        ]
      },
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::awsexamplebucket1"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::444455556666:role/s3-access-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 ?