2017-03-09 25 views
0

私のアプリケーションからaws S3サーバーバケットにアクセスする際に問題が発生しています。バケットのログファイルにリクエストがありますが、アクセスは拒否されます。 私はインラインポリシーと管理されたポリシーを持っていて、サーバーへのフルアクセスを許可しているだけでなく、すべてのユーザーを許可するサーバーアクセス許可を設定していますが、それでもアクセスは拒否されています。 正しいプールの識別情報も作成されました。 アプリケーションの最後に、バケットが見つからなかったというメッセージが表示されます。 サーバー領域はロンドンです。Amazon WebサービスS3アクセスが拒否されました

私はこの問題に関する他の多くの質問を読んでいますが、誰も私の問題を解決していません。

インライン認証されていないIAMポリシー

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

}これはポリシーシミュレータ上で動作しませんでした何らかの理由で

ありがとう、私はバケツやサービス、のdidnのためのリソースを追加してみました助けてください。

管理ポリシーはデフォルトのS3完全アクセスであり、動作しているものとしてシミュレーションします。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": "s3:*", 
     "Resource": "*" 
    } 
    ] 
} 

コードは、サーバーへの対処スニペット: ノートこれらは単なるスニペット全体ではなく、コード

[である:

public void setFileToUpload(){ 

     TransferObserver transferObserver = transferUtility.upload(
       "http://ascentserver.s3.eu-west-2.amazonaws.com",  /* The bucket to upload to */ 
       "TEST.png", /* The key for the uploaded object */ 
       fileToUpload  /* The file where the data to upload exists */ 
     ); 

     transferObserverListener(transferObserver); 
    } 
+1

おそらくそれが良いだろうS3リクエストを行っているコードスニペット、使用しているIAMポリシー、接続しているエンティティ、S3にアクセスする際に使用しているURLパターンなど、 –

答えて

0

あなたがtransferUtility.upload()方法のためascentserverの代わりhttp://ascentserver.s3.eu-west-2.amazonaws.comとしてバケット名を提供し、AmazonS3Clientデフォルトを正しい領域を使用するといないことを確認する必要があります1つは明示的にエンドポイントをs3.setEndpoint("s3.eu-west-2.amazonaws.com")と設定します。例えば

:あなたは、このような、それがホストされている場所を/どのようにあなたのアプリケーションの種類、AWS SDKとして、他の人があなたを助けるためにできるようになるより多くの情報を提供することができれば

CognitoCachingCredentialsProvider credProvider = new CognitoCachingCredentialsProvider(
    getApplicationContext(),  
    "YOUR_COGNITO_POOL_ID",  
    Regions.EU_WEST_2   
); 

AmazonS3 s3 = new AmazonS3Client(credProvider); 
s3.setEndpoint("s3.eu-west-2.amazonaws.com"); 

TransferUtility transferUtility = new TransferUtility(s3, getApplicationContext()); 

TransferObserver transferObserver = transferUtility.upload(
    "ascentserver", 
    "TEST.png", 
    fileToUpload 
); 

. 
. 
. 
+0

これを行うと、「バケットは指定されたエンドポイントにアドレスする必要があります」というエラーが表示され、それでもサーバーにアクセスできません。 –

+0

エンドポイントを 's3.setEndpoint(" s3.eu-west-2.amazonaws.com ")'として明示的に設定することで、AmazonS3Clientが正しい領域を使用し、デフォルト領域ではなく正しい領域を使用するようにする必要があります。私の更新された答えを見てください。 –

0

だから、我々が使用しているコードは以下のとおりです。メイン]

import com.amazonaws.auth.CognitoCachingCredentialsProvider; 
import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener; 
import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver; 
import com.amazonaws.mobileconnectors.s3.transferutility.TransferState; 
import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility; 
import com.amazonaws.regions.Region; 
import com.amazonaws.regions.Regions; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3Client; 

import java.io.File; 

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

File fileToUpload = new  File("/storage/emulated/0/Pictures/Screenshots/TEST.png"); 
File fileToDownload = new File("/storage/emulated/0/Download/TEST"); 
AmazonS3 s3; 
TransferUtility transferUtility; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    // callback method to call credentialsProvider method 
    credentialsProvider(); 

    // callback method to call the setTransferUtility method 
    setTransferUtility(); 
} 

public void credentialsProvider(){ 

    // Initialize the Amazon Cognito credentials provider 
    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
      getApplicationContext(), 
      "eu-west-1:0e33dea3-6075-4ea5-a268-b0c1364f5107", // Identity Pool ID 
      Regions.EU_WEST_1 // Region 
    ); 

    setAmazonS3Client(credentialsProvider); 
} 

public void setAmazonS3Client(CognitoCachingCredentialsProvider credentialsProvider){ 

    // Create an S3 client 
    s3 = new AmazonS3Client(credentialsProvider); 

    // Set the region of your S3 bucket 
    s3.setRegion(Region.getRegion(Regions.EU_WEST_1)); 

} 

public void setTransferUtility(){ 

    transferUtility = new TransferUtility(s3, getApplicationContext()); 
} 

public void setFileToUpload(){ 

    TransferObserver transferObserver = transferUtility.upload(
      "http://ascentserver.s3.eu-west-2.amazonaws.com",  /* The bucket to upload to */ 
      "TEST.png", /* The key for the uploaded object */ 
      fileToUpload  /* The file where the data to upload exists */ 
    ); 

    transferObserverListener(transferObserver); 
} 

public void setFileToDownload(){ 

    TransferObserver transferObserver = transferUtility.download(
      "http://ascentserver.s3.eu-west-2.amazonaws.com",  /* The bucket to download from */ 
      "TEST.png", /* The key for the object to download */ 
      fileToDownload  /* The file to download the object to */ 
    ); 

    transferObserverListener(transferObserver); 

} 

public void transferObserverListener(TransferObserver transferObserver){ 

    // listener that provides status of download 
    transferObserver.setTransferListener(new TransferListener(){ 

     @Override 
     public void onStateChanged(int id, TransferState state) { 
      Log.e("statechange", state+""); 
     } 

     @Override 
     public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { 
      int percentage = (int) (bytesCurrent/bytesTotal * 100); 
      Log.e("percentage",percentage +""); 
     } 

     @Override 
     public void onError(int id, Exception ex) { 
      Log.e("error","error"); 
     } 

    }); 
} 
} 

[依存関係]

compile 'com.amazonaws:aws-android-sdk-core:2.2.13' 
compile 'com.amazonaws:aws-android-sdk-cognito:2.2.13' 
compile 'com.amazonaws:aws-android-sdk-s3:2.2.13' 
compile 'com.amazonaws:aws-android-sdk-ddb:2.2.13' 

[マニフェスト]

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<service 
     android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService" 
     android:enabled="true" /> 
関連する問題