Política de bucket da AWS – quando usá-la

Política de bucket da AWS – quando usá-la

Estou tentando criar uma política de bucket que conceda acesso de uma instância ec2 ou ecs para concedê-los a putObject em um bucket específico.

Tenho algumas perguntas básicas:

1) Uma política de bucket é a coisa certa a ser usada se tudo o que você deseja fazer é conceder acesso do ec2 a um bucket na mesma conta? Os documentos parecem referir-se muito ao acesso entre contas.

2) Qual deve ser o princípio para conseguir isso? Por exemplo, existe um princípio que eu possa definir que diria simplesmente "conceder acesso de qualquer recurso nesta conta aws"?

3) Fiz isso funcionar especificando a função IAM da instância ec2 no princípio (veja abaixo). Mas será esta a forma preferida de o fazer?

{
"Version": "2012-10-17",
"Id": "Policy1563569774763",
"Statement": [
    {
        "Sid": "Stmt1563569772515",
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::XXXX:role/S3_Read_All"
            ]
        },
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::some-test-bucket-12345/*"
    }
]

}

Agradeço antecipadamente! Acho difícil entender isso.

Responder1

Sua intuição estava certa. Se tudo o que você deseja fazer é conceder acesso a um bucket na mesma conta, provavelmente será mais simples apenasusar uma política IAM. Você anexaria tal política a umpapel, que por sua vez será anexado à instância EC2.

Uma coisa a observar é que, considerando a política do primeiro link:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::bucket-name"]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": ["arn:aws:s3:::bucket-name/*"]
        }
    ]
}

A primeira instrução, "ListObjectsInBucket" tem o recurso definido para o bucket. O ARN está arn:aws:s3:::bucket-name(não *existe). A segunda instrução tem o arn definido como arn:aws:s3:::bucket-name/*. O /*lá significa "todos os objetos no bucket bucket-name". Algumas ações do IAM se aplicam a buckets, outras a objetos.

Você também pode usar um prefixo, como arn:aws:s3:::bucket-name/prefix*, que dará acesso a todos os objetos que possuem um nome começando com "prefixo". Tenha em mente que o nome de um objeto no S3 é o nome completo, incluindo marcadores de caminho ("/"), portanto "/caminho/para/objeto", não apenas "objeto". Não há diretórios no S3.

Outra coisa é que quando você atribui uma função a uma instância do EC2, você concede a qualquer pessoa que tenha acesso à instância as mesmas permissões que a função possui. Portanto, certifique-se de que qualquer usuário que possa fazer login na instância EC2 também tenha acesso ao bucket S3.

Tenha em mente que o nível de acesso que um objeto (usuário, instância ec2, função lambda, etc.) tem ao bucket é dado pelo conjunto de políticas resultante da combinação das políticas do IAM e das políticas do bucket. E as declarações Deny têm precedência. Você só precisa usar um deles quando o objeto e o bucket estiverem na mesma conta e as políticas do IAM forem provavelmente a escolha natural. No bucket de acesso entre contas, as políticas são usadas para dar acesso à outra conta do bucket, basicamente. Uma política IAM também é definida na outra conta.

informação relacionada