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?

dignoe
la source

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.

Alain CELESTE
la source
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

Efren
la source