Otorgue acceso de lectura de rol EC2 IAM al depósito S3


10

Tengo una aplicación AWS Elastic Beanstalk Rails que estoy configurando a través del script de configuración para extraer algunos archivos de un bucket de S3. Cuando inicio la aplicación, sigo recibiendo el siguiente error en los registros (el nombre del depósito se ha cambiado por seguridad ):

Failed to retrieve https://s3.amazonaws.com/my.bucket/bootstrap.sh: HTTP Error 403 : <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message>

Archivo de configuración:

packages:
  yum:
    git: []

files:
  /opt/elasticbeanstalk/hooks/appdeploy/pre/01a_bootstrap.sh:
    mode: "00755"
    owner: root
    group: root
    source: https://s3.amazonaws.com/my.bucket/bootstrap.sh

El entorno de Elastic Beanstalk se configura con el aws-elasticbeanstalk-ec2-rolerol de IAM como su rol de instancia. Este rol tiene la siguiente política:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "arn:aws:s3:::my.bucket/*"
    }
  ]
}

Y el cubo S3 tiene la siguiente política:

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "Stmt1371012493903",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<account #>:role/aws-elasticbeanstalk-ec2-role"
        },
        "Action": [
            "s3:List*",
            "s3:Get*"
        ],
        "Resource": "arn:aws:s3:::my.bucket/*"
    }
]
}

¿Qué necesito cambiar para dar acceso a mis instancias EC2 a mi depósito S3?

Respuestas:


6

Desde su certificación EC2, también tendrá que recuperar las credenciales temporales en los metadatos de la instancia:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<your-iam-role-name>

Luego deberá utilizar el acceso proporcionado y la clave secreta para acceder a su depósito S3.


1
Cuando hace esto a través de los SDK de AWS para el idioma específico de una aplicación, el SDK se encarga internamente de obtener las credenciales temporales y luego actualizarlas en función de intervalos de tiempo específicos.
whokares

2
¿Cómo utiliza la clave de acceso y secreta para acceder al bucket de S3? ¿Tienes un ejemplo? Saludos
Céline Aussourd

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.