首页 文章

亚马逊网络服务S3访问被拒绝

提问于
浏览
0

我从我的应用程序访问我的aws S3服务器存储桶时遇到问题 . 我在存储桶日志文件中收到请求,但访问被拒绝 . 我有内联策略和托管策略允许完全访问服务器,以及设置服务器权限以允许每个人,但它仍然说访问被拒绝 . 也创建了右池的标识 . 在应用程序结束时,我收到一条消息,表明找不到存储桶 . 服务器区域是伦敦 .

我已经阅读了很多关于这个问题的其他问题,但没有一个能解决我的问题 .

谢谢

内联未经身份验证的IAM策略

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

}

由于某种原因,这在策略模拟器上不起作用,我尝试为存储桶和服务添加资源,没有帮助 .

托管策略是默认的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);
    }

2 回答

  • 0

    您需要为 transferUtility.upload() 方法提供桶名称 ascentserver 而不是 http://ascentserver.s3.eu-west-2.amazonaws.com ,并确保 AmazonS3Client 使用正确的区域而不是默认区域,方法是将 endpoints 显式设置为 s3.setEndpoint("s3.eu-west-2.amazonaws.com") .

    例如:

    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

    所以我们使用的代码如下:注意这些只是片段,而不是整个代码

    [主要]

    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" />
    

相关问题