Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS S3在Java中无访问和密钥上传_Java_Amazon Web Services_Amazon S3_Aws Sdk - Fatal编程技术网

AWS S3在Java中无访问和密钥上传

AWS S3在Java中无访问和密钥上传,java,amazon-web-services,amazon-s3,aws-sdk,Java,Amazon Web Services,Amazon S3,Aws Sdk,我想上传一个文件到S3,而不使用AWS服务器的访问权限和密钥。AWS密钥应作为默认值。但是,在服务器上运行下面的命令时,我可以访问它,而不提供任何访问和密钥 aws s3 cp somefile.txt s3://somebucket/ 无法从java代码访问它,因为它无法加载凭据。 下面是我的代码 AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain()); 根据文档AWS凭据提供程序链,该

我想上传一个文件到S3,而不使用
AWS
服务器的访问权限和密钥。AWS密钥应作为默认值。但是,在服务器上运行下面的命令时,我可以访问它,而不提供任何访问和密钥

aws s3 cp somefile.txt s3://somebucket/

无法从java代码访问它,因为它无法加载凭据。 下面是我的代码

AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());

根据文档AWS凭据提供程序链,该链按以下顺序查找凭据:

  • 环境变量-AWS\u访问\u密钥\u ID和AWS\u机密\u访问\u密钥 (推荐使用,因为所有AWS SDK和CLI都能识别它们 除.NET外),或AWS_访问密钥和AWS_保密密钥(仅限 由Java SDK识别)
  • Java系统属性-aws.accessKeyId和aws.secretKey
  • 所有aws SDK和aws CLI共享的默认位置(~/.aws/credentials)处的凭据配置文件文件
  • 如果设置了AWS_container_Credentials_RELATIVE_URI“环境变量,并且安全管理器有权访问该变量,则通过Amazon EC2容器服务传递凭据
  • 通过AmazonEC2元数据服务提供的实例配置文件凭据
  • 检查您是否在上述任何一项中指定了有效凭据。

    Ref:

    当您试图从EC2实例连接到S3 bucket时,可以使用下面的Java代码来获取
    s3client
    实例

    AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                  .withCredentials(new InstanceProfileCredentialsProvider(false))
                  .build();
    
    这是推荐的方法,因为应用程序不需要在属性文件中维护访问密钥

    • 应创建IAM角色,并为此提供S3访问权限 角色。请参阅下面的示例策略
    • IAM角色应分配给EC2实例
    IAM角色的示例策略:-

    {
            "Action": ["s3:PutObject",
            "s3:ListBucket",
            "s3:GetObject",
            "s3:DeleteObject"],
            "Resource": ["arn:aws:s3:::yourBucketName",
            "arn:aws:s3:::yourBucketName/*"],
            "Effect": "Allow",
            "Sid": "AllowBucketLinux"
        }
    

    API v1.11.22版本没有针对S3的builder API。在这种情况下,我该怎么做?请看我的问题