Como usar curingas com um elemento Principal e uma negação explícita em uma política de bucket do Amazon S3?

3 minuto de leitura
0

Quero usar curingas com um elemento Principal e uma negação explícita em uma política de bucket do Amazon Simple Storage Service (Amazon S3).

Breve descrição

Para evitar acesso aos seus buckets do Amazon S3 por entidades do AWS Identity and Access Management (IAM), atribua permissões específicas em uma política de bucket. A política de bucket deve usar um elemento NotPrincipal e uma negação explícita. Para obter mais informações, consulte Especificar NotPrincipal com Deny.

No entanto, como o Amazon S3 não é compatível com curingas com o elemento NotPrincipal, você deve usar Principal como entidade de destino em cada bloco de instruções. Cada bloco de instruções também deve incluir a condição de cada bloco de permissão.

Resolução

Primeiro, verifique se você tem os seguintes recursos:

O exemplo a seguir usa curingas em aws:userid para incluir todos os nomes que o processo de chamada passa. Por exemplo, isso inclui os curingas para um ID de aplicativo, serviço ou instância quando os usuários fazem chamadas para obter credenciais temporárias. Para obter mais informações, consulte Solicitar informações que você pode usar para variáveis de política. Para evitar o bloqueio, esses exemplos incluem o usuário raiz da conta da AWS.

Observação: certifique-se de substituir os nomes de exemplo pelos seus próprios IDs de perfil e nomes de bucket.

Aqui está o exemplo completo da política. Observe a condição StringNotLike no bloco de negação:

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

Informações relacionadas

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

Elementos da política JSON da AWS: NotPrincipal

AWS OFICIAL
AWS OFICIALAtualizada há 6 meses