web-dev-qa-db-ja.com

EC2からのAWS S3バケットアクセス

EC2インスタンスがイメージファイルを保存するためにアクセスできるように、S3バケットを起動する必要があります。 EC2インスタンスには読み取り/書き込み権限が必要です。 S3バケットをパブリックに利用可能にしたくありません。EC2インスタンスにアクセスさせたいだけです。

もう1つの落とし穴は、EC2インスタンスがOpsWorksによって管理されていることです。負荷/使用状況に応じて、異なるインスタンスを起動できます。 IPで制限する場合、EC2インスタンスが持っているIPを常に知っているとは限りません。 VPCで制限できますか?

S3バケットを静的なWebサイトホスティングに対して有効にする必要がありますか?これが機能するためには、バケット内のすべてのファイルもパブリックにする必要がありますか?

11
hiddenicon

バケットをパブリックに読み取り可能にする必要も、ファイルをパブリックに読み取り可能にする必要もありません。バケットとその内容は非公開にできます。

IPアドレスに基づいてバケットへのアクセスを制限するのではなく、EC2インスタンスが使用しているIAMロールに基づいてバケットを制限します。

  1. EC2インスタンスのIAM EC2インスタンスロールを作成します。
  2. そのロールを使用してEC2インスタンスを実行します。
  3. このIAMロールに、S3バケットにアクセスするためのポリシーを付与します。

例えば:

{
  "Version": "2012-10-17",
  "Statement":[{
    "Effect": "Allow",
    "Action": "s3:*",
    "Resource": ["arn:aws:s3:::my_bucket",
                 "arn:aws:s3:::my_bucket/*"]
    }
  ]
} 
  1. バケット自体へのアクセスを制限する場合は、S3バケットポリシーを試してください。

例えば:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": ["arn:aws:iam::111122223333:role/my-ec2-role"]
      },
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::my_bucket",
                   "arn:aws:s3:::my_bucket/*"]
    }
  ]
}

追加情報: http://blogs.aws.Amazon.com/security/post/TxPOJBY6FE360K/IAM-policies-and-Bucket-Policies-and-ACLs-Oh-My-Controlling-Access-to-S3 -リソース

11
Matt Houser

IAMの役割はあなたのためのソリューションです。

S3アクセス許可でロールを作成する必要があります。ロールなしでec2インスタンスを開始した場合、そのロールを割り当てて再構築する必要があります。

enter image description here

参照: AWS OpsWorksに代わって行動することを許可する

1
BMW

これは非常に簡単に行うことができます。次の手順に従ってください:

  • コンソールでAWS EC2を開きます。
  • インスタンスを選択し、アクションに移動します。
  • インスタンス設定を選択し、[IAMロールのアタッチ/置換]を選択します
  • 新しいロールを作成し、そのロールにS3FullAccessポリシーを添付します。

これが完了したら、AWSインスタンスに接続し、残りは次のCLIコマンドを介して行われます。

  • aws s3 cp filelocation/filename s3:// bucketname

注意してください...ファイルの場所はローカルアドレスを指します。また、バケット名はバケットの名前です。注:これは、インスタンスとS3バケットが同じアカウントにある場合に可能です。乾杯。

0
DarkZeus