您提供的AWS Access Key ID在我们的记录中不存在

时间:2017-02-08 12:02:28

标签: java php amazon-web-services amazon-s3

我使用AWS在PHP中编写了一个库,以便与ECS服务器进行通信。现在我将我的代码迁移到java。在java中,我使用的是与PHP中使用的相同的密钥和密钥。

在php中我使用了以下方法:

android:focusable="false"
android:focusableInTouchMode="false"

在java中我使用以下方法

$s3 = Aws\S3\S3Client::factory(array( 'base_url' => $this->base_url, 'command.params' => array('PathStyle' => true), 'key' => $this->key, 'secret' => $this->secret ));

我收到以下异常:

BasicAWSCredentials(String accessKey, String secretKey);

我是否需要Java的新密钥和秘密,或者可以使用之前的密钥和密码。

我的问题是: 1 - 在使用AWS的BasicAwsCredentials()方法之前,我们需要遵循的任何先决条件。 2 - 我们是否需要创建IAM角色。 3 - 如果我们这样做,那么如何知道在Aws \ S3 \ S3Client :: factory方法中使用PHP时要知道哪个IP,我指定了基本URL。

2 个答案:

答案 0 :(得分:4)

以下代码为我工作。

String accesskey = "objuser1";
String secret = "xxxxxxxxxxxxxxxx";
ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTP);
AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials(accesskey, secret), config);
S3ClientOptions options =  new S3ClientOptions();
options.setPathStyleAccess(true);
s3.setS3ClientOptions(options);
s3.setEndpoint("1.2.3.4:9020");  //ECS IP Address
System.out.println("Listing buckets");
for (Bucket bucket : s3.listBuckets()) {
    System.out.println(" - " + bucket.getName());
}
System.out.println();

答案 1 :(得分:3)

AWS访问密钥和秘密访问密钥独立于您使用的SDK(无论您使用的是PHP,Java还是Ruby等),它更多地是关于授予和访问您运行的服务/在AWS上使用。

错误的根本原因是我认为您没有设置AWS区域,尽管您已经获得了访问密钥和秘密访问密钥。请check this为Java设置AWS凭据。

回答你的问题。

  1. 据我所知,在您想要对Amazon服务执行任何操作之前,BasicAwsCredentials()本身就是先决条件步骤。只有BasicAwsCredentials()的先决条件是拥有身份验证密钥。

  2. 不,这不是强制性步骤。这是另一种选择。请从this链接检查IAM角色的定义。

  3. 您可以使用'端点'在Java中做同样的工作。检查'端点'来自this链接的详细信息。

  4. 请查看here中的示例。 使用相同的方法,我能够成功完成' BasicAwsCredentials()'。并交叉检查是否访问密钥'和秘密访问密钥'拥有根据您的需要访问Amazon服务的必要权限。检查IAM用户,组并确保他们具有必要的AWS权限。