Existe uma política S3 para limitar o acesso para ver / acessar apenas um bucket?

123

Eu tenho um bucket simples que se parece images.mysite.comno meu S3 e em outros buckets que contêm backups etc.

Desejo permitir que um usuário específico possa acessar o images.mysite.combucket para fazer upload de imagens. No entanto, não quero que ele veja nenhum dos outros baldes; nem que eles existam.

Eu não poderia fazer uma política que faça isso; toda vez que tento algo restritivo, ele acaba bloqueando a listagem de todos os baldes.

Alex
fonte
Eu estou votando para fechar esta questão como off-topic, porque ele deve estar em superusuários
Tonny Madsen
A política pode ser gerada aqui em: awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta
1
Por que não compartilhar apenas o URL do balde - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. Dessa forma, você os impede de ver a lista inteira e não altera nada na sua política atual.
treecoder 23/04

Respostas:

119

Eu tenho tentado isso por um tempo e finalmente veio com uma solução de trabalho. Você deve usar diferentes "Recursos", dependendo do tipo de ação que está executando. Também incluí algumas ações ausentes na resposta anterior (curtir DeleteObject) e restringir mais algumas (curtir PutBucketAcl).

A seguinte política do IAM está funcionando para mim agora:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

As ações relacionadas a um bucket e as relacionadas a objetos devem ter um arn diferente.

rogercampos
fonte
9
Esta é uma ótima resposta, obrigado. Vale a pena notar que a implicação da permissão s3: ListAllMyBuckets é que o destinatário dessa política pode ver todos os seus buckets (da raiz). Não há divulgação de dados diretamente, mas pode haver sensibilidade / confusão em torno dos nomes dos buckets. É possível remover essa permissão específica e as coisas ainda devem funcionar (embora "s3cmd ls" etc não retorne o intervalo de destino).
Mike Repasse
91
Isso não impede que o usuário veja outros nomes de bucket!
Novidade
2
@metdos, você pode impedir que os usuários vejam outros nomes de grupos removendo a última política.
precisa saber é o seguinte
20
Para ver a lista de depósitos no console (e, portanto, usar o console para acesso ao depósito), você deve conceder ListAllMyBucketse GetBucketLocationpara todos os depósitos S3 ( "arn:aws:s3:::*"funcionará em vez "*"do recurso). Conforme declarado nesta postagem no blog da AWS "como um aparte, atualmente você não pode filtrar seletivamente determinados buckets; portanto, os usuários devem ter permissão para listar todos os buckets para acesso ao console".
jwadsack
10
Este é um conselho horrível. É perigoso e especificamente o que o OP não queria. Veja as respostas de Andreas Stankewitz e BFar para soluções possíveis.
AndreKR
37

Nosso caso de uso: Forneça espaço de backup para clientes de nosso aplicativo em nuvem que possa ser acessado diretamente pelos clientes usando ferramentas S3 comuns. Obviamente, nenhum cliente deve ver o que os outros têm.

Como o cloudberryman explicou: "Você pode listar todos os buckets ou nenhum", então temos que apresentar uma solução alternativa. Fundo:

É necessário conceder direitos de ListAllMyBuckets ao usuário para que o console do AWS S3 ou o S3Fox se conectem sem uma mensagem de erro. Mas ListAllMyBuckets lista todos os buckets, considerações dos recursos atribuídos (na verdade, apenas arn: ... ::: * funciona). Isso é um bug sério, se você me perguntar. Btw. negar ListBucket para todos os buckets não impede que eles sejam listados, pois o ListBucket concede direitos para listar o conteúdo do bucket.

Existem três possibilidades que eu considerei como solução alternativa. Eu escolhi o último.

(1) use nomes de buckets enigmáticos, por exemplo, GUIDs

Vantagem: fácil de configurar

Desvantagem: difícil de gerenciar, especialmente para o cliente. (imagine encontrar um GUID específico entre milhares de outros.) Também mostra o número de buckets = número de clientes que usam o serviço de backup.

(2) use um bucket com pastas específicas do cliente

É assim que a Amazon sugere, pelos exemplos do S3 / IAM, que forneça espaço para acesso somente por determinados usuários ou grupos de usuários. Consulte: Exemplo de políticas do IAM da AWS

Vantagem: bastante fácil de configurar, acompanha as idéias da AWS

Desvantagem: força a tornar pública a existência de todos os buckets, para que o cliente possa encontrar seu bucket "doméstico". A contabilidade da AWS fornece estatísticas do uso do bucket, mas não do uso da pasta, o que dificulta o cálculo do custo por cliente.

(3) não conceda acesso certo para ListAllMyBuckets

Vantagem: você consegue o que deseja: os clientes não podem ver os baldes de outros clientes

Desvantagem: o cliente não pode ver seu próprio balde. O S3Browser vem com uma boa mensagem "não posso fazer" e solicita a inserção do nome do bloco. O S3Fox lança uma mensagem de erro ao conectar-se à raiz, mas permite a navegação direta ao bucket do cliente se o nome do bucket for conhecido. O console do Amazon S3 não funciona de jeito nenhum.

Espero que isso tenha ajudado a lidar com o S3 IAM conforme necessário.

Andreas Stankewitz
fonte
1
Além disso, para a Solução (1), se você deseja usar a hospedagem na Web com um bucket, o nome do bucket deve corresponder ao nome do domínio.
Andy Fusniak
31

Não é possível fornecer acesso ao console S3 sem conceder a ListAllMyBucketspermissão.

No meu caso (e talvez o seu também, futuro leitor), uma alternativa aceitável é redirecionar os usuários ao entrar diretamente no bucket que você gostaria que eles vissem.

Para fazer isso, acrescente o seguinte ao seu URL de login do IAM: /s3/?bucket=bucket-name

URL de login completo (substitua seu alias e nome do bloco ):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

Política do IAM (substitua o nome do bloco ):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

Para obter mais informações sobre como criar permissões específicas de bucket para usuários, leia este blog: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /

BFar
fonte
1
Isso funciona bem. Seria ótimo se os usuários não pudessem explorar fora da exibição do bucket .... Mas eu aceito. Obrigado @BFar.
21717 Jamie Popkin
Esta é a resposta ÚNICA CORRETA, todos os outros listarão todos os intervalos - que devem ser ocultados conforme a solicitação original.
91319 Steve Horvath
Exatamente o que eu preciso. Obrigado.
21819 Di Zhang
20

Tente esta política. Também levamos em consideração que não há como deixar o usuário listar apenas o intervalo selecionado. Você pode listar todos os buckets ou nenhum.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}
cloudberryman
fonte
2
Isso funciona muito bem! Eu tive que mudar de ação s3:*para fazê-lo funcionar para mim. Eu também tinha "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], mas isso pode não ser necessário.
Michael Yagudaev
3
s3: * concede acesso para fazer qualquer coisa, incluindo excluir um intervalo. Você quer isso?
Dave Gregory
10

Estou interpretando esta pergunta como: "Posso permitir o acesso a um depósito em que outros depósitos não serão acessíveis e, portanto, invisíveis". Porque mostrar o nome do bucket ao qual nenhum acesso foi concedido ainda equivale a vazamento de informações.

E a resposta correta é não. A permissão necessária é ListAllMyBuckets, que permitirá ao usuário ver TODOS os buckets. Se você deixar esta permissão, o console não poderá ser usado.


fonte
6

Existe uma ótima maneira de permitir que os usuários acessem um depósito específico sem compreender o conhecimento de outros depósitos. Uma política de grupo semelhante à abaixo permitirá que os usuários vejam apenas o "bloco a". O único problema é que o usuário só poderá acessar o bucket se ele se conectar ao ponto de extremidade do bucket fornecido. Para o exemplo abaixo, seria bucket-a.s3.amazonaws.com. O intervalo também pode precisar ter "Usuários autenticados" permitidos para que isso ocorra.

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

Este método foi testado com o Cyberduck no Mac OS / X e usando o pacote s3cmd

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2
joevartuli
fonte
Ainda consigo ver a lista de todos os baldes. Não funciona :(
Rishikesh Chandra
5

Confuso sobre por que nenhuma resposta foi verificada?

Vamos detalhar cada declaração de política das soluções acima:

Esta declaração de política de aplica-se ao conteúdo do bucket, mas não ao próprio buck. Provavelmente não é isso que a pergunta foi feita, porque você não pode ver o que há no balde.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

Essa política de duas instruções derivada fornece acesso somente leitura ao bucket em ( arn:aws:s3:::your_bucket_here/) somente leitura , mas ainda permite operações CRUD no conteúdo do bucket ( arn:aws:s3:::your_bucket_here/*).

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

No entanto, a política inclui a declaração abaixo, que permite ao usuário ver todos os buckets no nó de extremidade. Provavelmente não é isso que a pergunta foi feita.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

No entanto, o acima exposto é muito útil se você usar um cliente que navegue em uma loja S3. Se o seu cliente acessa a loja e não o depósito diretamente, é necessário acessar a lista de depósitos na raiz.

Donal Lafferty
fonte
3

Provavelmente o caso de uso mais simples:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}
jjanczyszyn
fonte
1
AWS respondendo:This policy contains the following error: The policy must contain a valid version string
MaximeBernard
isso mesmo - corrigi minha resposta -> <br/> existem apenas dois valores possíveis aqui: <br/> * 2012-10-17 * e 2008-10-17 . <br/> Mais referências podem ser encontradas aqui: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn
Alguma idéia sobre o (listing included)significado de como listar apenas o intervalo no qual o usuário pode entrar? Até agora (e de acordo com todas as outras respostas), parece que a AWS não permitirá que você faça isso.
MaximeBernard
3

Existe uma maneira fácil ou alternativa de fazer isso usando o AWS Organizations. A organização da AWS permite que você tenha várias contas de usuário. Sua conta principal pode ter várias contas da AWS (Sub) e quaisquer serviços (s3 / EC2 / *) adicionados em qualquer conta da AWS, apenas esses recursos estarão visíveis.

Consulte https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/

Organização Na página Minha conta

Shaik Ismail
fonte
3

Encontrei esta solução:
AWS FLOW:
AWS FLOW

Política de bucket:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

Política do IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-user-user-name USER-NAME --profile = ExampleProfile

aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile

Fonte: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PS cuidado com a política de bucket, você pode ficar de fora sem permissões

Constantin Paigin
fonte
2

Como foi bem discutido acima, não é possível listar apenas um depósito no console. Mas se o acesso do bucket do S3 estiver anexado a um IAM, o IAM poderá acessar diretamente o bucket se o URL para o bucket estiver disponível. O URL do bucket S3 será como:

https://s3.console.aws.amazon.com/s3/buckets/BucketName

Onde BucketName é o nome do bucket que o IAM tem acesso

Ishan Tomar
fonte
1
Eu acho que essa é a única solução viável em 2018 também.
Saurabh
1

Consegui fazer o seguinte funcionar. Significava que a listagem de outros intervalos recebeu a mensagem Acesso negado. Mas ainda consegui ver o bloco que eu queria se me conectasse com o nome do bloco definido como caminho.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

Eu estava usando o Cyberduck para testar essa conexão.

codeplay
fonte
1

Embora não seja possível restringir a s3:ListAllMyBucketsação a intervalos específicos, como solução alternativa, você pode enviar o URL do console para um intervalo específico, por exemplo

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

Origem: lista restrita de buckets S3 do console S3

Para fazer isso, você precisará especificar o seguinte documento de política para determinado usuário ou grupo:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Onde my-bucket-1e onde my-bucket-2estão seus buckets para fornecer acesso de leitura e gravação.

Palavras-chave:

kenorb
fonte
1

Tente esta política. O usuário não pode listar nenhum depósito, ele deve usar o link direto para o depósito permitido.

Por exemplo: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}
Lam
fonte
1

Semelhante ao que outros descritos acima:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket/*"
      }
   ]
}

Aqui está, no entanto, a peça que faltava. Embora não seja possível acessar o balde através de S3-> Home, é possível acessar apenas o balde desejado através de um link direto.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

Você pode encontrar mais informações na seguinte postagem:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-fficient-bucket/

crandorf80s
fonte
0

A solução abaixo funcionou para mim. Eu queria uma política para conceder acesso a um usuário específico my_iam_user em um bucket específico my-s3-bucket .

Essa política permite ao meu usuário listar, excluir, obter e colocar arquivos em um intervalo s3 específico.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}
Carlos Coelho
fonte
0

Acabei de adicionar uma necessidade semelhante, resolvida por isso:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}
Xavinsky
fonte
0

Eu uso o seguinte para ocultar o conteúdo do bucket de outros usuários. Isso não apenas ajuda a ocultar outros depósitos (não use ListAllMyBuckets), mas também pastas no mesmo depósito, quando você cria um depósito, mas deseja ter subpastas atribuindo permissões apropriadas ao usuário / subpasta IAM.

A política a seguir é aplicada ao grupo IAM e todos os usuários estão nesse grupo. Você precisa pegar aws:useride criar uma subpasta com o mesmo nome no balde.

UserID pode ser utilizado: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}
Andrii Starikov
fonte
0

Uma solução simples e agradável que encontramos é bloquear o usuário para fazer login no diretório raiz. Portanto, eles devem fazer login com o caminho remoto definido para a pasta desejada.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}
PROSPERAR
fonte
0

Não, atualmente não é possível limitar os usuários a visualizar buckets seletivos na raiz ou em qualquer outro lugar. Você tem apenas essas três opções no momento.

Optei por pedir ao cliente para usar o nome do bucket explicitamente.

foggy_glasses
fonte
-1

Isso funcionou perfeito para mim. O usuário pode fazer upload, baixar e obter a lista de arquivos, mas não poderá ver os arquivos de outro bloco.

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      
s. tait
fonte
-2

Adicione uma Denycláusula para os buckets que você não deseja acessar. Lembre-se de que eles ainda podem estar listados, mas você não poderá acessar o conteúdo dentro deles.

{
    "Versão": "17/10/2012",
    "Declaração": [
        {
            "Efeito": "Permitir",
            "Ação": "s3: *",
            "Recurso": "*"
        }
        {
            "Efeito": "Negar",
            "Ação": "s3: *",
            "Recurso": [
                "arn: aws: s3 ::: bucket-name",
                "arn: aws: s3 ::: bucket-name / *"
            ]
        }
    ]
}
codificador de árvore
fonte
1
Você deve conceder explicitamente acesso aos recursos. Quando você concede acesso a todos os recursos por padrão, você pode omitir acidentalmente os recursos que deseja manter privados. A concessão de acesso a todas as ações do S3 significa que o usuário pode tornar públicos os recursos ou configurar a hospedagem estática ou fazer outras coisas prejudiciais.
Ondrej Galbavý 10/10