Daj dostęp do odczytu roli EC2 IAM do segmentu S3

10

Mam aplikację AWS Elastic Beanstalk Rails, którą konfiguruję za pomocą skryptu konfiguracyjnego, aby pobrać niektóre pliki z segmentu S3. Po uruchomieniu aplikacji w dziennikach wciąż pojawia się następujący błąd ( nazwa segmentu została zmieniona dla bezpieczeństwa ):

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>

Plik konfiguracyjny:

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

Środowisko Elastic Beanstalk jest skonfigurowane z aws-elasticbeanstalk-ec2-rolerolą IAM, ponieważ jest to rola instancji. Ta rola ma następujące zasady:

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

Wiadro S3 ma następujące zasady:

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

Co muszę zmienić, aby zapewnić moim instancjom EC2 dostęp do mojego segmentu S3?

dignoe
źródło

Odpowiedzi:

6

Z poziomu EC2 konieczne będzie również odzyskanie tymczasowych referencji w metadanych instancji:

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

Następnie użyjesz dostarczonego dostępu i tajnego klucza, aby uzyskać dostęp do wiadra S3.

Alain CELESTE
źródło
1
Gdy robisz to za pomocą AWS SDK dla określonego języka z aplikacji, wewnętrznie zadbano o to przez SDK, aby uzyskać tymczasowe poświadczenia, a następnie odświeżyć je na podstawie określonych przedziałów czasowych.
whokares
2
Jak używasz klucza dostępu i tajnego, aby uzyskać dostęp do segmentu S3? Czy masz przykład? Na zdrowie
Céline Aussourd,
0

Jeśli jest to dostęp do wielu kont, sprawdź, czy nie jest on powiązany z nagłówkami ACL, jak wspomniano tutaj: https://stackoverflow.com/a/34055538/1736679 (więcej informacji w tym temacie: https://github.com/aws/aws -cli / Issues / 1674 )

Sprawdź także dwukrotnie środowisko / użytkownika, z którego korzystasz, aby sprawdzić, czy nie ma nadpisanych kluczy (1AWS_ACCESS_KEY1 itp.) W /etc/environmentlub~/.aws/credentials

Efren
źródło