EC3 IAMロールにS3バケットへの読み取りアクセスを付与する


10

AWS Elastic Beanstalk Railsアプリがあり、S3バケットからいくつかのファイルをプルするようにconfigスクリプトで構成しています。アプリケーションを起動すると、ログに次のエラーが表示され続けます(セキュリティのためにバケット名が変更されています)。

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>

設定ファイル:

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

Elastic Beanstalk環境は、aws-elasticbeanstalk-ec2-roleインスタンスの役割としてIAMの役割で設定されています。この役割には次のポリシーがあります。

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

また、S3バケットには次のポリシーがあります。

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

EC2インスタンスにS3バケットへのアクセスを許可するには、何を変更する必要がありますか?

回答:


6

EC2インスタンスから、インスタンスメタデータの一時的な認証情報も取得する必要があります。

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

次に、提供されたアクセスと秘密鍵を使用してS3バケットにアクセスします。


1
アプリケーションの特定の言語に対してAWS SDKを使用してこれを行う場合、SDKは内部的に一時的な認証情報を取得し、特定の時間間隔に基づいてそれらを更新します。
whokares 14

2
アクセスと秘密鍵を使用してS3バケットにアクセスするにはどうすればよいですか?例はありますか?乾杯
セリーヌオズール

0

クロスアカウントアクセスの場合は、https//stackoverflow.com/a/34055538/1736679(この問題のスレッドの詳細:https : //github.com/aws/aws)のように、ACLヘッダーに関連していないことを確認してください。 -cli / issues / 1674

また、実行中の環境/ユーザーを再確認して、/etc/environmentまたはに上書きキー(1AWS_ACCESS_KEY1など)がないかどうかを確認します。~/.aws/credentials

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.