Política de contas cruzadas do bucket AWS S3 misturada com conta interna

Política de contas cruzadas do bucket AWS S3 misturada com conta interna

usamos o bucket s3 para compartilhar arquivos entre duas empresas. Criamos um bucket S3 privado e temos um usuário dedicado para o aplicativo que usa esse bucket (usando aws_key e aws_secret). Descobrimos que não temos acesso ao getObject, mas colocamos o PutObject no bucket com sucesso.

Também criei uma função com permissões para este bucket e atribuí-a a application_user, mas isso não resolveu o problema.

Portanto, o objetivo principal é ler, listar e colocar o acesso da conta externa e do usuário interno do IAM ao mesmo bucket S3. Aponto que empresa externa tem acesso a ele, neste momento com esta política. Não tenho acesso à conta externa do AWS.

Abaixo há uma política de recursos para s3.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SharedS3Bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::199999999999:root",    <--- external account 
                    "arn:aws:iam::111111111111:user/application_user" <-- our application user
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::shared-bucket",
                "arn:aws:s3:::shared-bucket/*"
            ]
        }
    ]
}

Responder1

As permissões S3 são um pouco complicadas porque você não tem apenas oPermissões de intervalocom que se preocupar, mas também cadaObjetoque você carrega tem suas próprias permissões.

SeuPolítica de intervaloacima permite que ambas as empresas carreguem objetos e funciona como você pode ver. No entanto, quando a empresa externa carrega um objeto, suas permissões padrãopermitir apenas a leitura do criador, ou seja, pela empresa externa. Mesmo que esteja emseubalde por padrãovocênão consigo lê-lo se tiver sido enviado por outra pessoa. Isso é um tanto contra-intuitivo.

A solução é garantir que os objetos carregados possuam ACL que permita a leitura por ambas as contas.

Caixa de diálogo de upload do S3

Você também precisará adicionar s3:PutObjectAclà sua lista de permissões da Política de Bucket para que isso funcione.

Da mesma forma, se você estiver fazendo upload a partir da linha de comando, poderá modificar o objeto acl após o upload com aws s3api put-object-acl.

Espero que ajude :)

informação relacionada