首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚马逊web服务S3访问被拒绝

亚马逊web服务S3访问被拒绝
EN

Stack Overflow用户
提问于 2017-03-09 19:53:25
回答 2查看 2.9K关注 0票数 0

我在从我的应用程序访问我的aws S3服务器桶时遇到了问题。我在桶日志文件中得到一个请求,但是访问被拒绝。我有和内联策略和托管策略允许完全访问服务器,以及设置服务器权限允许每个人,但它仍然说访问被拒绝。还创建了一个正确池的标识。在应用程序的末尾,我收到一条消息,即没有找到水桶。服务器区域是伦敦。

我读过很多关于这个问题的其他问题,但都没有解决我的问题。

谢谢

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

代码语言:javascript
复制
{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt1488834891000",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::ascentserver/*"
        ]
    }
]

}

由于某些原因,这在策略模拟器上不起作用,我尝试添加用于桶和服务的资源,但没有帮助。

托管策略是默认的S3完全访问,并模拟为工作。

代码语言:javascript
复制
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

寻址服务器的代码段:

代码语言:javascript
复制
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);
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-10 20:39:57

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

例如:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-03-09 22:40:16

因此,我们一直使用的代码如下:注意,这些只是片段,而不是整个代码

总体上

代码语言:javascript
复制
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");
        }

    });
}
}

依赖关系

代码语言:javascript
复制
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'

清单

代码语言:javascript
复制
<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" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42704268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档