Accorder un accès en lecture au rôle IAM EC2 au compartiment S3


10

J'ai une application AWS Elastic Beanstalk Rails que je configure via le script de configuration pour extraire certains fichiers d'un compartiment S3. Lorsque je démarre l'application, je reçois toujours l'erreur suivante dans les journaux (le nom du compartiment a été modifié pour des raisons de sécurité ):

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>

Fichier de configuration:

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

L'environnement Elastic Beanstalk est configuré avec le aws-elasticbeanstalk-ec2-rolerôle IAM comme rôle d'instance. Ce rôle a la politique suivante:

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

Et le compartiment S3 a la stratégie suivante:

{
"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/*"
    }
]
}

Que dois-je changer pour permettre à mes instances EC2 d'accéder à mon compartiment S3?

Réponses:


6

À partir de votre instance EC2, vous devrez également récupérer les informations d'identification temporaires dans les métadonnées d'instance:

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

Vous devez ensuite utiliser l'accès fourni et la clé secrète pour accéder à votre compartiment S3.


1
Lorsque vous faites cela via les kits SDK AWS pour la langue spécifique d'une application, son SDK est pris en charge en interne par le kit SDK pour obtenir les informations d'identification temporaires, puis les actualiser en fonction d'intervalles de temps spécifiques.
whokares

2
Comment utilisez-vous l'accès et la clé secrète pour accéder au compartiment S3? Avez-vous un exemple? Vive
Céline AUSSOURD

0

S'il s'agit d'un accès multi-comptes, vérifiez qu'il n'est pas lié aux en-têtes ACL comme mentionné ici: /programming//a/34055538/1736679 (plus d'informations dans ce fil de discussion: https://github.com/aws/aws -cli / issues / 1674 )

Vérifiez également l'environnement / l'utilisateur à partir duquel vous exécutez pour voir s'il n'y a pas de clés prioritaires (1AWS_ACCESS_KEY1, etc.) dans /etc/environmentou~/.aws/credentials

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.