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?

Philip Kirkbride
fonte
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/*"
Oluwafemi Sule
fonte
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/*"
    }
  ]
}
Lucas
fonte
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.

Vaseem007
fonte
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": "*"
    }
  ]
}
Alex Spence
fonte
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

Ravi Teja Mureboina
fonte
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

Yehuda Clinton
fonte
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.

Pinaki
fonte
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.
Chathura Devinda
fonte
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

zavr
fonte