¿Cómo puedo utilizar comodines con un elemento principal y una denegación explícita en una política de bucket de Amazon S3?

3 minutos de lectura
0

Quiero usar comodines con un elemento principal y una denegación explícita en una política de bucket de Amazon Simple Storage Service (Amazon S3).

Breve descripción

Para evitar que determinadas entidades de AWS Identity and Access Management (IAM) accedan a sus buckets de Amazon S3, designe permisos específicos en una política de bucket. La política de bucket debe usar un elemento NotPrincipal y una denegación explícita. Para obtener más información, consulte Especificar NotPrincipal con Deny.

Sin embargo, dado que Amazon S3 no admite comodines con el elemento NotPrincipal, debe usar Principal como entidad de destino en cada bloque de instrucciones. Además, cada bloque de instrucciones debe incluir también la condición para cada bloque de permisos.

Solución

En primer lugar, asegúrese de disponer de los siguientes recursos:

En el siguiente ejemplo, se utilizan comodines en aws:userid para incluir todos los nombres transferidos por el proceso de llamada. Esto incluye, por ejemplo, los comodines que se utilizan para el ID de una aplicación, servicio o instancia cuando los usuarios realizan llamadas para obtener credenciales temporales. Para obtener más información, consulte Información de la solicitud que puede utilizar para variables de políticas. Para evitar un bloqueo, en este ejemplo se incluye al usuario raíz de la cuenta de AWS.

Nota: Asegúrese de reemplazar los nombres de los ejemplos por sus propios ID de rol y nombres de bucket.

Este es el ejemplo completo de la política. Fíjese en la condición StringNotLike en el bloque de denegación:

{
  "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"
          ]
        }
      }
    }
  ]
}

Información relacionada

How to restrict Amazon S3 bucket access to a specific IAM role

Elemento de la política de JSON de AWS: NotPrincipal

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 6 meses