
Estoy intentando crear una política de depósito que otorgue acceso desde una instancia ec2 o ecs para otorgarles putObject en un depósito específico.
Tengo algunas preguntas básicas:
1) ¿Es una política de depósito lo correcto si todo lo que desea hacer es otorgar acceso desde ec2 a un depósito dentro de la misma cuenta? Los documentos parecen referirse mucho al acceso entre cuentas.
2) ¿Cuál debería ser el principio para lograrlo? Por ejemplo, ¿hay algún principio que pueda establecer que simplemente diga "conceder acceso desde cualquier recurso en esta cuenta de AWS"?
3) Logré que esto funcionara especificando la función IAM de la instancia ec2 en el principio (ver más abajo). ¿Pero es esta la forma preferida de hacerlo?
{
"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/*"
}
]
}
¡Gracias de antemano! Me resulta difícil entender esto.
Respuesta1
Tu intuición era correcta. Si todo lo que desea hacer es otorgar acceso a un depósito en la misma cuenta, probablemente sea más sencillo simplementeutilizar una política de IAM. Adjuntaría dicha política a unrole, que a su vez se adjuntará a la instancia EC2.
Una cosa a tener en cuenta es que, considerando la política en el primer enlace:
{
"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/*"]
}
]
}
La primera declaración, "ListObjectsInBucket", tiene el recurso configurado en el depósito. El ARN está arn:aws:s3:::bucket-name
(no *
allí). La segunda declaración tiene el arn establecido en arn:aws:s3:::bucket-name/*
. Allí /*
significa "todos los objetos en el depósito nombre del depósito". Algunas acciones de IAM se aplican a depósitos, otras a objetos.
También puedes usar un prefijo, como arn:aws:s3:::bucket-name/prefix*
, que dará acceso a todos los objetos que tengan un nombre que comience con "prefijo". Tenga en cuenta que el nombre de un objeto en S3 es el nombre completo, incluidos los marcadores de ruta ("/"), por lo que "/ruta/al/objeto", no solo "objeto". No hay directorios en S3.
Otra cosa es que cuando asignas un rol a una instancia EC2, le otorgas a cualquiera que tenga acceso a la instancia los mismos permisos que tiene el rol. Por lo tanto, asegúrese de que cualquier usuario que pueda iniciar sesión en la instancia EC2 también tenga acceso al depósito S3.
Tenga en cuenta que el nivel de acceso que tiene un objeto (usuario, instancia ec2, función lambda, etc.) al depósito viene dado por el conjunto de políticas resultante de combinar las políticas de IAM y las políticas del depósito. Y las declaraciones Deny tienen prioridad. Solo necesita usar uno de ellos cuando tanto el objeto como el depósito están en la misma cuenta y las políticas de IAM son probablemente la opción natural. En el acceso entre cuentas, las políticas de depósito se utilizan para dar acceso a la otra cuenta al depósito, básicamente. También se establece una política de IAM en la otra cuenta.