web-dev-qa-db-ja.com

IAMロール認証情報を使用してs3バケットからファイルを取得する

一部のファイルをプライベートs3バケットからファイルシステムのロケーションElastic beanstalk ec2インスタンスに取得しようとしていますが、成功しません。

dev-configという名前のファイルを含むlocal.propertiesという名前のバケットを作成しました。

IAMポリシーを作成しました

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::dev-config",
                "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

そして、そのポリシーをIAMロールに関連付け、それが今度はEC2インスタンスに関連付けられます。追加の認証情報を提供しなくても、aws-cliを使用してs3バケットからファイルをフェッチできることを確認しました。つまり、aws s3 ls s3://dev-config/local.properties

私のプロジェクトに次のファイルを追加しました:

。ebextensions/01_files.config

"/usr/share/Tomcat7/lib/local.properties" :
    mode: "000777"
    owner: ec2-user
    group: ec2-user
    source: http://s3.amazonaws.com/dev-config/local.properties

ソースURLのいくつかのバリエーションも試しました

    source: http://dev-config.s3.amazonaws.com/dev-config/local.properties
    source: http://dev-config.s3.amazonaws.com/local.properties
    source: s3://dev-config/local.properties

また、authentication属性を追加しようとしましたが、成功しませんでした(認証の可能な値に関するドキュメントがないようです)。認証:S3Access

これまでのところ、どのアプローチも機能していません。

場合によっては、ログにアクセス拒否メッセージが表示されます。

    <?xml version="1.0" encoding="UTF-8"?>
      <Error><Code>AccessDenied</Code><Message>Access Denied</Message>
      <RequestId>blahblah</RequestId>
      <HostId>blahblah</HostId>
    </Error>

その他の場合、local.propertiesファイル自体にエラーメッセージが表示されますPermanentRedirectアクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。今後のすべてのリクエストをこのエンドポイントに送信してください。 dev-config dev-config.s3.amazonaws.com
何とか何とか

なんとかこれを機能させることができましたか?

5
diffa

この回答を確認した後、 Elastic beanstalk構成ファイル内のファイルで環境プロパティを使用する.ebextensions/01_files.configに次のセクションを追加しました

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: dev-config

ホストにバケット名を含めるようにs3 urlを更新したため、最終的なファイルは次のようになります。

"/usr/share/Tomcat7/lib/local.properties" :
    mode: "000777"
    owner: ec2-user
    group: ec2-user
    source: https://dev-config.s3.amazonaws.com/local.properties

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: dev-config

これにより、elastic beanstalk ec2インスタンスは、それに関連付けられたIAMロールを使用して、ファイルを含むs3バケットにアクセスできるようになりました。

PS:この構成を機能させるには、問題のS3バケットへのアクセス権をaws-elasticbeanstalk-ec2-roleプリンシパルに付与していることを確認してください。 IAMコンソールからARNを取得できます。

4
diffa

このIAMで試してください。わたしにはできる。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::dev-config",
                "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

読み取り/書き込み/削除のアクセス許可が必要な場合は、次のようなものが必要です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                 "arn:aws:s3:::dev-config",
                 "arn:aws:s3:::dev-config/*"
            ]
        }
    ]
}

よろしく。

1
Peycho Dimitrov