Usamos el depósito s3 para compartir archivos entre dos empresas. Creamos un depósito S3 privado y tenemos un usuario dedicado para la aplicación que usa este depósito (usando su aws_key y aws_secret). Descubrimos que no tenemos acceso a getObject, pero pusimos exitosamente Objeto en el depósito.
También creé un rol con permisos para este depósito y lo asigné a application_user, pero no resolvió el problema.
Por lo tanto, el objetivo principal es tener acceso de lectura, lista y colocación desde una cuenta externa y un usuario interno de IAM al mismo depósito de S3. Señalaré que la empresa externa tiene acceso a él, ahora mismo con esta política. No tengo acceso a una cuenta de AWS externa.
A continuación hay una 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/*"
]
}
]
}
Respuesta1
Los permisos de S3 son un poco complicados porque no solo tienes elPermisos de depósitode qué preocuparse pero también de cada unoObjetoque subes tiene sus propios permisos.
SuPolítica de depósitoLo anterior permite a ambas empresas cargar objetos y funciona como puede ver. Sin embargo, cuando la empresa externa carga un objeto, sus permisos predeterminadossólo permitir la lectura por parte del creador, es decir, por la empresa externa. Incluso si está ensucubo por defectotúNo puedo leerlo si fue subido por otra persona. Eso es algo contrario a la intuición.
La solución es asegurarse de que los Objetos cargados tengan ACL que permita la lectura en ambas cuentas.
También deberá agregar s3:PutObjectAcl
permisos a su lista de políticas de depósito para que esto funcione.
De manera similar, si está cargando desde la línea de comando, puede modificar el objeto acl después de cargarlo con aws s3api put-object-acl
.
Espero que ayude :)