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?

dignoe
fuente

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.

Alain CELESTE
fuente
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
0

Si se trata de acceso a cuentas cruzadas, verifique que no esté relacionado con los encabezados de ACL como se menciona aquí: /programming//a/34055538/1736679 (más información en este tema: https://github.com/aws/aws -cli / issues / 1674 )

También verifique dos veces el entorno / usuario desde el que se está ejecutando para ver si no hay claves anuladas (1AWS_ACCESS_KEY1, etc.) en /etc/environmento~/.aws/credentials

Efrén
fuente