2016-05-10 10 views
1

私はec2インスタンスにs3バケットへのアクセスを許可したいと考えています。S3バケットへのEC2インスタンスのアクセスを許可する

このec2インスタンスでは、自分のアプリケーションを持つコンテナが起動されます。今私はs3バケットの許可を得ていない。

これは私のバケットポリシー

{ 
"Version": "2012-10-17", 
"Id": "Policy1462808223348", 
"Statement": [ 
    { 
     "Sid": "Stmt1462808220978", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::714656454815:role/ecsInstanceRole" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::bucket-name/*", 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": "private-ip/32" 
      } 
     } 
    } 
] 
} 

あるしかし、私はバケツにそれにアクセスするすべての人のための許可を与えるまで、それは動作しません。

私はec2インスタンスの内側からs3バケット内のファイルをカールしようとしますが、これはどちらも動作しません。

答えて

1

"EC2"インスタンスへのAWSサーバーへの直接アクセスを許可する直接の方法はありませんが、次の方法を試すことができます。

  1. AWS IAMで新しいユーザーを作成し、資格情報ファイルをダウンロードします。
  2. このユーザーは、EC2サーバーを表します。
  3. S3バケットに対する権限をユーザーに与えます。
    EC2 - - Windowsのインスタンス::
  4. 次に、資格情報は次の場所にファイルを配置します。必要な場所に資格情報ファイルを置きます。 (例:C:/クレデンシャル)
    b。 AWS_CREDENTIAL_PROFILES_FILE変数環境を作成し、あなたの資格情報がファイルを置くパスとして値を置く(例えばC:/資格情報)
    EC2 - のLinuxインスタンス
    。 Windowsインスタンス
    から手順を実行します。アプリケーションサーバーのルートフォルダ内に.awsというフォルダを作成します(例:/usr/share/tomcat6)。
    c。今すぐあなたの資格情報ファイルが置かれていることをご使用の環境変数とあなたの.awsフォルダ sudo ln -s $AWS_CREDENTIAL_PROFILES_FILE /usr/share/tomcat6/.aws/credentials

  5. 間symmlinkを作成し、あなたはバケツにアクセスするためのJavaコードを使用することができます。
    :AWS-SDKライブラリは、あなたのバケット内でこの



    AWSCredentials credentials = null; 
      try { 
       credentials = new ProfileCredentialsProvider().getCredentials(); 
      } catch (Exception e) { 
       LOG.error("Unable to load credentials " + e); 
       failureMsg = "Cannot connect to file server."; 
       throw new AmazonClientException(
         "Cannot load the credentials from the credential profiles file. " + 
         "Please make sure that your credentials file is at the correct " + 
         "location (environment variable : AWS_CREDENTIAL_PROFILES_FILE), and is in valid format.", 
         e); 
      } 

      AmazonS3 s3 = new AmazonS3Client(credentials); 
      Region usWest2 = Region.getRegion(Regions.US_WEST_2); 
      s3.setRegion(usWest2); 
    ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix)); 

bucketName = [バケット名]
接頭 = [フォルダ構造のために必要とされますあなたのファイルが含まれています]

希望に役立ちます。 また、Javaを使用していない場合は、他のプログラミング言語でAWS-SDKをチェックアウトすることもできます。

0

はこれを試してみてください:

{ 
"Version": "2012-10-17", 
"Id": "Policy1462808223348", 
"Statement": [ 
    { 
     "Sid": "Stmt1462808220978", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::bucket-name/*", 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": "yourIp/24" 
      } 
     } 
    } 
] 
} 
+0

が機能しませんでした。これはとても混乱しています。私が言ったように、私は自分のファイルのec2インスタンスの中からカールを作ることさえできません。私が誰にも許可を設定したときにのみ、私はこれをやりたくない。 – DK1990

0

私はそれが唯一のEC2インスタンスからパブリックIPで動作します....

それを見つけました。

関連する問題