AWS S3存储桶问题

时间:2016-11-25 11:11:09

标签: ios objective-c amazon-web-services amazon-s3 aws-sdk

有人可以帮我找到如何使用客户端Access key IDSecret access key访问AWS S3 Bucket资源吗? 或者这个被弃用的AWS API?我找到了许多解决方案,但所有使用identityPoolId都是我不想使用的。

1 个答案:

答案 0 :(得分:1)

您可以使用2种方式登录。

  1. 在代码中使用凭据。
  2. 将您的凭据保存在文件中。
  3. 在代码中使用凭据。

    // credentials object identifying user for authentication
    // user must have AWSConnector and AmazonS3FullAccess for 
    // this example to work
     AWSCredentials credentials = new BasicAWSCredentials("YourAccessKeyID", "YourSecretAccessKey");
    
    // create a client connection based on credentials
    AmazonS3 s3client = new AmazonS3Client(credentials);
    

    将您的凭据保存在文件中:

    /*
     * Create your credentials file at ~/.aws/credentials (C:\Users\USER_NAME\.aws\credentials for Windows users) 
     * and save the following lines after replacing the underlined values with your own.
     *
     * [default]
     * aws_access_key_id = YOUR_ACCESS_KEY_ID
     * aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
     */
    
    AWSCredentials credentials = new ProfileCredentialsProvider().getCredentials();
    AmazonS3 s3 = new AmazonS3Client(credentials);
    

    对于crud操作,您可以阅读本教程:https://github.com/aws/aws-sdk-java/blob/master/src/samples/AmazonS3/S3Sample.java

        // Create a bucket
        System.out.println("Creating bucket " + bucketName + "\n");
        s3.createBucket(bucketName);
    
        /*
         * List the buckets in your account
         */
        System.out.println("Listing buckets");
        for (Bucket bucket : s3.listBuckets()) {
            System.out.println(" - " + bucket.getName());
        }
        /*
         * Delete an object - Unless versioning has been turned on for your bucket,
         * there is no way to undelete an object, so use caution when deleting objects.
         */
        System.out.println("Deleting an object\n");
        s3.deleteObject(bucketName, key);
    
        /*
         * Delete a bucket - A bucket must be completely empty before it can be
         * deleted, so remember to delete any objects from your buckets before
         * you try to delete them.
         */
        System.out.println("Deleting bucket " + bucketName + "\n");
        s3.deleteBucket(bucketName);
    

    要获得特定存储桶的权限,请查看图片:

    enter image description here

    添加权限:

    {
        "Version": "2008-10-17",
        "Statement": [
            {
                "Sid": "AllowPublicRead",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "*"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::riz-bucket001/*"
            }
        ]
    }
    

    N.B:此存储桶策略使存储桶中的所有内容都可公开读取。所以要小心使用它。如果您使用学习目的,那么确定。但出于商业目的,请勿使用它。

    非常感谢Michael - sqlbot

    您可以根据需要在此处查看更多政策:Specifying Permissions in a Policy