diff --git a/plugins/repository-s3/src/main/java/org/elasticsearch/repositories/s3/InternalAwsS3Service.java b/plugins/repository-s3/src/main/java/org/elasticsearch/repositories/s3/InternalAwsS3Service.java index 2b21a81d91fa7..e950cc8e92c56 100644 --- a/plugins/repository-s3/src/main/java/org/elasticsearch/repositories/s3/InternalAwsS3Service.java +++ b/plugins/repository-s3/src/main/java/org/elasticsearch/repositories/s3/InternalAwsS3Service.java @@ -23,7 +23,7 @@ import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.auth.InstanceProfileCredentialsProvider; +import com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper; import com.amazonaws.http.IdleConnectionReaper; import com.amazonaws.internal.StaticCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; @@ -132,7 +132,7 @@ static AWSCredentialsProvider buildCredentials(Logger logger, DeprecationLogger } if (credentials == null) { logger.debug("Using instance profile credentials"); - return new PrivilegedInstanceProfileCredentialsProvider(); + return new PrivilegedEC2ContainerCredentialsProviderWrapper(); } else { logger.debug("Using basic key/secret credentials"); return new StaticCredentialsProvider(credentials); @@ -157,11 +157,11 @@ protected void doClose() throws ElasticsearchException { IdleConnectionReaper.shutdown(); } - static class PrivilegedInstanceProfileCredentialsProvider implements AWSCredentialsProvider { - private final InstanceProfileCredentialsProvider credentials; + static class PrivilegedEC2ContainerCredentialsProviderWrapper implements AWSCredentialsProvider { + private final EC2ContainerCredentialsProviderWrapper credentials; - private PrivilegedInstanceProfileCredentialsProvider() { - this.credentials = new InstanceProfileCredentialsProvider(); + private PrivilegedEC2ContainerCredentialsProviderWrapper() { + this.credentials = new EC2ContainerCredentialsProviderWrapper(); } @Override diff --git a/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AmazonS3Wrapper.java b/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AmazonS3Wrapper.java index bcab130e7d531..9941a2965970b 100644 --- a/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AmazonS3Wrapper.java +++ b/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AmazonS3Wrapper.java @@ -23,6 +23,7 @@ import com.amazonaws.AmazonServiceException; import com.amazonaws.AmazonWebServiceRequest; import com.amazonaws.HttpMethod; +import com.amazonaws.SdkClientException; import com.amazonaws.regions.Region; import com.amazonaws.services.s3.AbstractAmazonS3; import com.amazonaws.services.s3.AmazonS3; @@ -31,6 +32,7 @@ import com.amazonaws.services.s3.model.AbortMultipartUploadRequest; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.Bucket; +import com.amazonaws.services.s3.model.BucketAccelerateConfiguration; import com.amazonaws.services.s3.model.BucketCrossOriginConfiguration; import com.amazonaws.services.s3.model.BucketLifecycleConfiguration; import com.amazonaws.services.s3.model.BucketLoggingConfiguration; @@ -48,23 +50,38 @@ import com.amazonaws.services.s3.model.CopyPartRequest; import com.amazonaws.services.s3.model.CopyPartResult; import com.amazonaws.services.s3.model.CreateBucketRequest; +import com.amazonaws.services.s3.model.DeleteBucketAnalyticsConfigurationRequest; +import com.amazonaws.services.s3.model.DeleteBucketAnalyticsConfigurationResult; import com.amazonaws.services.s3.model.DeleteBucketCrossOriginConfigurationRequest; +import com.amazonaws.services.s3.model.DeleteBucketInventoryConfigurationRequest; +import com.amazonaws.services.s3.model.DeleteBucketInventoryConfigurationResult; import com.amazonaws.services.s3.model.DeleteBucketLifecycleConfigurationRequest; +import com.amazonaws.services.s3.model.DeleteBucketMetricsConfigurationRequest; +import com.amazonaws.services.s3.model.DeleteBucketMetricsConfigurationResult; import com.amazonaws.services.s3.model.DeleteBucketPolicyRequest; import com.amazonaws.services.s3.model.DeleteBucketReplicationConfigurationRequest; import com.amazonaws.services.s3.model.DeleteBucketRequest; import com.amazonaws.services.s3.model.DeleteBucketTaggingConfigurationRequest; import com.amazonaws.services.s3.model.DeleteBucketWebsiteConfigurationRequest; import com.amazonaws.services.s3.model.DeleteObjectRequest; +import com.amazonaws.services.s3.model.DeleteObjectTaggingRequest; +import com.amazonaws.services.s3.model.DeleteObjectTaggingResult; import com.amazonaws.services.s3.model.DeleteObjectsRequest; import com.amazonaws.services.s3.model.DeleteObjectsResult; import com.amazonaws.services.s3.model.DeleteVersionRequest; import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; +import com.amazonaws.services.s3.model.GetBucketAccelerateConfigurationRequest; import com.amazonaws.services.s3.model.GetBucketAclRequest; +import com.amazonaws.services.s3.model.GetBucketAnalyticsConfigurationRequest; +import com.amazonaws.services.s3.model.GetBucketAnalyticsConfigurationResult; import com.amazonaws.services.s3.model.GetBucketCrossOriginConfigurationRequest; +import com.amazonaws.services.s3.model.GetBucketInventoryConfigurationRequest; +import com.amazonaws.services.s3.model.GetBucketInventoryConfigurationResult; import com.amazonaws.services.s3.model.GetBucketLifecycleConfigurationRequest; import com.amazonaws.services.s3.model.GetBucketLocationRequest; import com.amazonaws.services.s3.model.GetBucketLoggingConfigurationRequest; +import com.amazonaws.services.s3.model.GetBucketMetricsConfigurationRequest; +import com.amazonaws.services.s3.model.GetBucketMetricsConfigurationResult; import com.amazonaws.services.s3.model.GetBucketNotificationConfigurationRequest; import com.amazonaws.services.s3.model.GetBucketPolicyRequest; import com.amazonaws.services.s3.model.GetBucketReplicationConfigurationRequest; @@ -74,16 +91,26 @@ import com.amazonaws.services.s3.model.GetObjectAclRequest; import com.amazonaws.services.s3.model.GetObjectMetadataRequest; import com.amazonaws.services.s3.model.GetObjectRequest; +import com.amazonaws.services.s3.model.GetObjectTaggingRequest; +import com.amazonaws.services.s3.model.GetObjectTaggingResult; import com.amazonaws.services.s3.model.GetS3AccountOwnerRequest; import com.amazonaws.services.s3.model.HeadBucketRequest; import com.amazonaws.services.s3.model.HeadBucketResult; import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest; import com.amazonaws.services.s3.model.InitiateMultipartUploadResult; +import com.amazonaws.services.s3.model.ListBucketAnalyticsConfigurationsRequest; +import com.amazonaws.services.s3.model.ListBucketAnalyticsConfigurationsResult; +import com.amazonaws.services.s3.model.ListBucketInventoryConfigurationsRequest; +import com.amazonaws.services.s3.model.ListBucketInventoryConfigurationsResult; +import com.amazonaws.services.s3.model.ListBucketMetricsConfigurationsRequest; +import com.amazonaws.services.s3.model.ListBucketMetricsConfigurationsResult; import com.amazonaws.services.s3.model.ListBucketsRequest; import com.amazonaws.services.s3.model.ListMultipartUploadsRequest; import com.amazonaws.services.s3.model.ListNextBatchOfObjectsRequest; import com.amazonaws.services.s3.model.ListNextBatchOfVersionsRequest; import com.amazonaws.services.s3.model.ListObjectsRequest; +import com.amazonaws.services.s3.model.ListObjectsV2Request; +import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.ListPartsRequest; import com.amazonaws.services.s3.model.ListVersionsRequest; import com.amazonaws.services.s3.model.MultipartUploadListing; @@ -95,10 +122,17 @@ import com.amazonaws.services.s3.model.PutObjectResult; import com.amazonaws.services.s3.model.RestoreObjectRequest; import com.amazonaws.services.s3.model.S3Object; +import com.amazonaws.services.s3.model.SetBucketAccelerateConfigurationRequest; import com.amazonaws.services.s3.model.SetBucketAclRequest; +import com.amazonaws.services.s3.model.SetBucketAnalyticsConfigurationRequest; +import com.amazonaws.services.s3.model.SetBucketAnalyticsConfigurationResult; import com.amazonaws.services.s3.model.SetBucketCrossOriginConfigurationRequest; +import com.amazonaws.services.s3.model.SetBucketInventoryConfigurationRequest; +import com.amazonaws.services.s3.model.SetBucketInventoryConfigurationResult; import com.amazonaws.services.s3.model.SetBucketLifecycleConfigurationRequest; import com.amazonaws.services.s3.model.SetBucketLoggingConfigurationRequest; +import com.amazonaws.services.s3.model.SetBucketMetricsConfigurationRequest; +import com.amazonaws.services.s3.model.SetBucketMetricsConfigurationResult; import com.amazonaws.services.s3.model.SetBucketNotificationConfigurationRequest; import com.amazonaws.services.s3.model.SetBucketPolicyRequest; import com.amazonaws.services.s3.model.SetBucketReplicationConfigurationRequest; @@ -106,10 +140,16 @@ import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest; import com.amazonaws.services.s3.model.SetBucketWebsiteConfigurationRequest; import com.amazonaws.services.s3.model.SetObjectAclRequest; +import com.amazonaws.services.s3.model.SetObjectTaggingRequest; +import com.amazonaws.services.s3.model.SetObjectTaggingResult; import com.amazonaws.services.s3.model.StorageClass; import com.amazonaws.services.s3.model.UploadPartRequest; import com.amazonaws.services.s3.model.UploadPartResult; import com.amazonaws.services.s3.model.VersionListing; +import com.amazonaws.services.s3.model.analytics.AnalyticsConfiguration; +import com.amazonaws.services.s3.model.inventory.InventoryConfiguration; +import com.amazonaws.services.s3.model.metrics.MetricsConfiguration; +import com.amazonaws.services.s3.waiters.AmazonS3Waiters; import org.elasticsearch.common.SuppressForbidden; import java.io.File; @@ -167,6 +207,21 @@ public ObjectListing listObjects(ListObjectsRequest listObjectsRequest) throws A return delegate.listObjects(listObjectsRequest); } + @Override + public ListObjectsV2Result listObjectsV2(final String bucketName) throws AmazonClientException, AmazonServiceException { + return delegate.listObjectsV2(bucketName); + } + + @Override + public ListObjectsV2Result listObjectsV2(final String bucketName, final String prefix) throws AmazonClientException, AmazonServiceException { + return delegate.listObjectsV2(bucketName, prefix); + } + + @Override + public ListObjectsV2Result listObjectsV2(final ListObjectsV2Request listObjectsV2Request) throws AmazonClientException, AmazonServiceException { + return delegate.listObjectsV2(listObjectsV2Request); + } + @Override public ObjectListing listNextBatchOfObjects(ObjectListing previousObjectListing) throws AmazonClientException, AmazonServiceException { return delegate.listNextBatchOfObjects(previousObjectListing); @@ -332,6 +387,26 @@ public ObjectMetadata getObject(GetObjectRequest getObjectRequest, File destinat return delegate.getObject(getObjectRequest, destinationFile); } + @Override + public String getObjectAsString(final String bucketName, final String key) throws AmazonServiceException, AmazonClientException { + return delegate.getObjectAsString(bucketName, key); + } + + @Override + public GetObjectTaggingResult getObjectTagging(final GetObjectTaggingRequest getObjectTaggingRequest) { + return delegate.getObjectTagging(getObjectTaggingRequest); + } + + @Override + public SetObjectTaggingResult setObjectTagging(final SetObjectTaggingRequest setObjectTaggingRequest) { + return delegate.setObjectTagging(setObjectTaggingRequest); + } + + @Override + public DeleteObjectTaggingResult deleteObjectTagging(final DeleteObjectTaggingRequest deleteObjectTaggingRequest) { + return delegate.deleteObjectTagging(deleteObjectTaggingRequest); + } + @Override public void deleteBucket(DeleteBucketRequest deleteBucketRequest) throws AmazonClientException, AmazonServiceException { delegate.deleteBucket(deleteBucketRequest); @@ -373,6 +448,156 @@ public boolean doesObjectExist(String bucketName, String objectName) throws Amaz return delegate.doesObjectExist(bucketName, objectName); } + @Override + public BucketAccelerateConfiguration getBucketAccelerateConfiguration(final String bucket) throws AmazonServiceException, AmazonClientException { + return delegate.getBucketAccelerateConfiguration(bucket); + } + + @Override + public BucketAccelerateConfiguration getBucketAccelerateConfiguration(final GetBucketAccelerateConfigurationRequest getBucketAccelerateConfigurationRequest) throws AmazonServiceException, AmazonClientException { + return delegate.getBucketAccelerateConfiguration(getBucketAccelerateConfigurationRequest); + } + + @Override + public void setBucketAccelerateConfiguration(final String bucketName, final BucketAccelerateConfiguration accelerateConfiguration) throws AmazonServiceException, AmazonClientException { + delegate.setBucketAccelerateConfiguration(bucketName, accelerateConfiguration); + } + + @Override + public void setBucketAccelerateConfiguration(final SetBucketAccelerateConfigurationRequest setBucketAccelerateConfigurationRequest) throws AmazonServiceException, AmazonClientException { + delegate.setBucketAccelerateConfiguration(setBucketAccelerateConfigurationRequest); + } + + @Override + public DeleteBucketMetricsConfigurationResult deleteBucketMetricsConfiguration(final String bucketName, final String id) throws AmazonServiceException, SdkClientException { + return delegate.deleteBucketMetricsConfiguration(bucketName, id); + } + + @Override + public DeleteBucketMetricsConfigurationResult deleteBucketMetricsConfiguration(final DeleteBucketMetricsConfigurationRequest deleteBucketMetricsConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.deleteBucketMetricsConfiguration(deleteBucketMetricsConfigurationRequest); + } + + @Override + public GetBucketMetricsConfigurationResult getBucketMetricsConfiguration(final String bucketName, final String id) throws AmazonServiceException, SdkClientException { + return delegate.getBucketMetricsConfiguration(bucketName, id); + } + + @Override + public GetBucketMetricsConfigurationResult getBucketMetricsConfiguration(final GetBucketMetricsConfigurationRequest getBucketMetricsConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.getBucketMetricsConfiguration(getBucketMetricsConfigurationRequest); + } + + @Override + public SetBucketMetricsConfigurationResult setBucketMetricsConfiguration(final String bucketName, final MetricsConfiguration metricsConfiguration) throws AmazonServiceException, SdkClientException { + return delegate.setBucketMetricsConfiguration(bucketName, metricsConfiguration); + } + + @Override + public SetBucketMetricsConfigurationResult setBucketMetricsConfiguration(final SetBucketMetricsConfigurationRequest setBucketMetricsConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.setBucketMetricsConfiguration(setBucketMetricsConfigurationRequest); + } + + @Override + public ListBucketMetricsConfigurationsResult listBucketMetricsConfigurations(final ListBucketMetricsConfigurationsRequest listBucketMetricsConfigurationsRequest) throws AmazonServiceException, SdkClientException { + return delegate.listBucketMetricsConfigurations(listBucketMetricsConfigurationsRequest); + } + + @Override + public DeleteBucketAnalyticsConfigurationResult deleteBucketAnalyticsConfiguration(final String bucketName, final String id) throws AmazonServiceException, SdkClientException { + return delegate.deleteBucketAnalyticsConfiguration(bucketName, id); + } + + @Override + public DeleteBucketAnalyticsConfigurationResult deleteBucketAnalyticsConfiguration(final DeleteBucketAnalyticsConfigurationRequest deleteBucketAnalyticsConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.deleteBucketAnalyticsConfiguration(deleteBucketAnalyticsConfigurationRequest); + } + + @Override + public GetBucketAnalyticsConfigurationResult getBucketAnalyticsConfiguration(final String bucketName, final String id) throws AmazonServiceException, SdkClientException { + return delegate.getBucketAnalyticsConfiguration(bucketName, id); + } + + @Override + public GetBucketAnalyticsConfigurationResult getBucketAnalyticsConfiguration(final GetBucketAnalyticsConfigurationRequest getBucketAnalyticsConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.getBucketAnalyticsConfiguration(getBucketAnalyticsConfigurationRequest); + } + + @Override + public SetBucketAnalyticsConfigurationResult setBucketAnalyticsConfiguration(final String bucketName, final AnalyticsConfiguration analyticsConfiguration) throws AmazonServiceException, SdkClientException { + return delegate.setBucketAnalyticsConfiguration(bucketName, analyticsConfiguration); + } + + @Override + public SetBucketAnalyticsConfigurationResult setBucketAnalyticsConfiguration(final SetBucketAnalyticsConfigurationRequest setBucketAnalyticsConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.setBucketAnalyticsConfiguration(setBucketAnalyticsConfigurationRequest); + } + + @Override + public ListBucketAnalyticsConfigurationsResult listBucketAnalyticsConfigurations(final ListBucketAnalyticsConfigurationsRequest listBucketAnalyticsConfigurationsRequest) throws AmazonServiceException, SdkClientException { + return delegate.listBucketAnalyticsConfigurations(listBucketAnalyticsConfigurationsRequest); + } + + @Override + public DeleteBucketInventoryConfigurationResult deleteBucketInventoryConfiguration(final String bucketName, final String id) throws AmazonServiceException, SdkClientException { + return delegate.deleteBucketInventoryConfiguration(bucketName, id); + } + + @Override + public DeleteBucketInventoryConfigurationResult deleteBucketInventoryConfiguration(final DeleteBucketInventoryConfigurationRequest deleteBucketInventoryConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.deleteBucketInventoryConfiguration(deleteBucketInventoryConfigurationRequest); + } + + @Override + public GetBucketInventoryConfigurationResult getBucketInventoryConfiguration(final String bucketName, final String id) throws AmazonServiceException, SdkClientException { + return delegate.getBucketInventoryConfiguration(bucketName, id); + } + + @Override + public GetBucketInventoryConfigurationResult getBucketInventoryConfiguration(final GetBucketInventoryConfigurationRequest getBucketInventoryConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.getBucketInventoryConfiguration(getBucketInventoryConfigurationRequest); + } + + @Override + public SetBucketInventoryConfigurationResult setBucketInventoryConfiguration(final String bucketName, final InventoryConfiguration inventoryConfiguration) throws AmazonServiceException, SdkClientException { + return delegate.setBucketInventoryConfiguration(bucketName, inventoryConfiguration); + } + + @Override + public SetBucketInventoryConfigurationResult setBucketInventoryConfiguration(final SetBucketInventoryConfigurationRequest setBucketInventoryConfigurationRequest) throws AmazonServiceException, SdkClientException { + return delegate.setBucketInventoryConfiguration(setBucketInventoryConfigurationRequest); + } + + @Override + public ListBucketInventoryConfigurationsResult listBucketInventoryConfigurations(final ListBucketInventoryConfigurationsRequest listBucketInventoryConfigurationsRequest) throws AmazonServiceException, SdkClientException { + return delegate.listBucketInventoryConfigurations(listBucketInventoryConfigurationsRequest); + } + + @Override + public void shutdown() { + delegate.shutdown(); + } + + @Override + public com.amazonaws.services.s3.model.Region getRegion() { + return delegate.getRegion(); + } + + @Override + public String getRegionName() { + return delegate.getRegionName(); + } + + @Override + public URL getUrl(final String bucketName, final String key) { + return delegate.getUrl(bucketName,key); + } + + @Override + public AmazonS3Waiters waiters() { + return delegate.waiters(); + } + @Override public PutObjectResult putObject(PutObjectRequest putObjectRequest) throws AmazonClientException, AmazonServiceException { return delegate.putObject(putObjectRequest); @@ -388,6 +613,11 @@ public PutObjectResult putObject(String bucketName, String key, InputStream inpu return delegate.putObject(bucketName, key, input, metadata); } + @Override + public PutObjectResult putObject(final String bucketName, final String key, final String content) throws AmazonServiceException, AmazonClientException { + return delegate.putObject(bucketName, key, content); + } + @Override public CopyObjectResult copyObject(String sourceBucketName, String sourceKey, String destinationBucketName, String destinationKey) throws AmazonClientException, AmazonServiceException { return delegate.copyObject(sourceBucketName, sourceKey, destinationBucketName, destinationKey); diff --git a/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AwsS3ServiceImplTests.java b/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AwsS3ServiceImplTests.java index f85f2eb6f322f..7893499d249de 100644 --- a/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AwsS3ServiceImplTests.java +++ b/plugins/repository-s3/src/test/java/org/elasticsearch/repositories/s3/AwsS3ServiceImplTests.java @@ -24,8 +24,6 @@ import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSCredentialsProvider; import org.elasticsearch.common.settings.MockSecureSettings; -import org.elasticsearch.common.settings.SecureSetting; -import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.test.ESTestCase; @@ -39,7 +37,7 @@ public void testAWSCredentialsWithSystemProviders() { S3ClientSettings clientSettings = S3ClientSettings.getClientSettings(Settings.EMPTY, "default"); AWSCredentialsProvider credentialsProvider = InternalAwsS3Service.buildCredentials(logger, deprecationLogger, clientSettings, Settings.EMPTY); - assertThat(credentialsProvider, instanceOf(InternalAwsS3Service.PrivilegedInstanceProfileCredentialsProvider.class)); + assertThat(credentialsProvider, instanceOf(InternalAwsS3Service.PrivilegedEC2ContainerCredentialsProviderWrapper.class)); } public void testAwsCredsDefaultSettings() {