A ação S3 Bucket não se aplica a nenhum recurso


123

Estou seguindo as instruções desta resposta para gerar a seguinte política de bucket S3:

{
  "Id": "Policy1495981680273",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1495981517155",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::surplace-audio",
      "Principal": "*"
    }
  ]
}

Eu recebo o seguinte erro:

A ação não se aplica a nenhum recurso (s) na declaração

O que estou perdendo na minha política?


1
Tentei a solução no link: stackoverflow.com/a/36551238/2786039 E agora está funcionando. Atenciosamente
Vuong Nguyen

Respostas:


217

Dos documentos IAM, http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

Alguns serviços não permitem especificar ações para recursos individuais; em vez disso, qualquer ação listada no elemento Action ou NotAction se aplica a todos os recursos nesse serviço. Nesses casos, você usa o curinga * no elemento Resource.

Com essas informações, o recurso deve ter um valor como abaixo:

"Resource": "arn:aws:s3:::surplace-audio/*"

39
Não posso acreditar que isso não seja mencionado na política do bucket e / ou no gerador de políticas!
Carles Alcolea

4
Estou usando * e ainda dá aquele erro. Alguém poderia me ajudar?
Yehuda Clinton

@YehudaClinton, funciona para mim. certifique-se de adicionar ambos / *
RMati

74

Apenas remover a s3:ListBucketpermissão não era realmente uma solução boa o suficiente para mim e provavelmente não é para muitos outros.

Se quiser a s3:ListBucketpermissão, você precisa apenas ter o arn simples do balde (sem o /*no final), pois essa permissão se aplica ao próprio balde e não aos itens dentro do balde.

Conforme mostrado abaixo, você deve ter a s3:ListBucketpermissão como uma declaração separada das permissões pertencentes a itens dentro do intervalo como s3:GetObjecte s3:PutObject:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"        
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject", 
        "s3:PutObject"
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}

Acordado. Para algumas ações, a permissão ListBucket é necessária antes de executar GetObject, portanto, esta resposta é mais completa.
3cheesewheel

2
Isso funciona para mim e apenas destaca quanto trabalho a AWS ainda precisa fazer para orientar os usuários a fazer coisas básicas.
volvox

41

A Ação de Erro não se aplica a nenhum recurso (s) na declaração

Simplesmente significa que a ação (você escreveu na política) não se aplica ao recurso. Eu estava tentando tornar público meu balde para que qualquer pessoa possa fazer o download dele. Eu estava recebendo um erro até remover ("s3: ListBucket") do meu extrato.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Principal": "*"
    }
  ]
}

Como o intervalo de lista não se aplica dentro do intervalo, a exclusão dessa política de ação funcionou bem.


Obrigado, funcionou para mim, removendo "s3: ListBucket".
Paul Watson

14

Apenas encontrei esse problema e encontrei uma solução mais curta para aqueles que desejam ter ListBucket e GetObject na mesma política.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
      ],
      "Principal": "*"
    }
  ]
}

Errado - Principalnão é permitido para a gramática da Política S3.
azec-pdx

Nenhuma das soluções acima funcionou para mim, o diretor era inválido ou eu teria acesso negado.
Daniel

Correto. O Recurso deve ser uma matriz neste caso e incluir essas 2 linhas ... Vote.
Assil

4

Eu também enfrentei o problema semelhante ao criar o balde

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949"
            ]
        }
    ]
}

Eu mudei o código acima para

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949/*"
            ]
        }
    ]
}

adicione / * ao nome do seu intervalo, isso resolverá o problema

Aqui, meu nome de balde é mrt9949


Obrigado! Passei muito tempo procurando por isso
Jack_Hardy

4

No meu caso, a solução para esse erro foi tentar remover algumas das ações que eu estava aplicando. Alguns deles não são relevantes ou não podem funcionar com este recurso. Neste caso, não me deixaria incluir estes:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket me pegou! Obrigado por isso
Quad64Bit

Para mim, funcionou apenas mantendo getObjet
LittleTiger

0

Você tem que verificar o padrão do arn definido na tag Resource para o Policy-

"Resource": "arn: aws: s3 ::: s3mybucketname / *"

Adicionar "/ *" no final ajudaria a resolver o problema se você enfrentá-lo, mesmo depois de ter sua política de acesso público desbloqueada para seu intervalo.


0
  • Acesse Amazon S3 em sua instância.
  • Vá para Permissões -> guia Acesso Público.
  • Selecione Editar e desmarque Bloquear todo o acesso público e salvar.
  • Você verá a tag 'Público' na guia Permissão e na Lista de Controle de Acesso.

0

Você também pode configurar ListBuckets para cada pasta, assim

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

Essas regras são usadas junto com o SES para receber um e-mail, mas permitem que um usuário externo visualize os arquivos que foram colocados no balde pelo SES. Segui as instruções daqui: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Além disso, você deve especificar o prefixo como domain.co/user/COM barra no final ao usar o SDK, caso contrário, o acesso será negado. espero que ajude alguém

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.