Exemple #1
0
        public void PutObject_SigV4()
        {
            var oldS3SigV4 = AWSConfigsS3.UseSignatureVersion4;

            AWSConfigsS3.UseSignatureVersion4 = true;

            try
            {
                using (var client = new AmazonS3Client())
                {
                    RetryUtilities.ConfigureClient(client);

                    PutObjectRequest request = new PutObjectRequest()
                    {
                        BucketName  = bucketName,
                        Key         = "contentBodyPut" + random.Next(),
                        ContentBody = "This is the content body!",
                        CannedACL   = S3CannedACL.AuthenticatedRead
                    };
                    request.Metadata.Add("Subject", "Content-As-Object");
                    PutObjectResponse response = client.PutObject(request);

                    Console.WriteLine("S3 generated ETag: {0}", response.ETag);
                    Assert.IsTrue(response.ETag.Length > 0);
                }
            }
            finally
            {
                AWSConfigsS3.UseSignatureVersion4 = oldS3SigV4;
            }
        }
        public void Initialize()
        {
            kmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USEast1);
            s3Client  = new AmazonS3Client(RegionEndpoint.USEast1);

            // Create a bucket to store objects related to this test.
            bucketName = GetOrCreateBucket(s3Client);
            // Create a KMS key, and an S3 object with the KMSKeyID.
            kmsKeyID = GetOrCreateKMSKey(s3Client, kmsClient, bucketName);
            // Create an S3 object with a symmetric key used for testing.
            symmetricAlgorithm = GetOrCreateSymmetricAlgorithm(s3Client, bucketName);

            var encryptionMaterials    = new EncryptionMaterials(symmetricAlgorithm);
            var kmsEncryptionMaterials = new EncryptionMaterials(kmsKeyID);

            AmazonS3CryptoConfiguration config = new AmazonS3CryptoConfiguration()
            {
                StorageMode = CryptoStorageMode.InstructionFile
            };

            s3EncryptionClientMetadataMode = new AmazonS3EncryptionClient(encryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataMode);

            s3EncryptionClientFileMode = new AmazonS3EncryptionClient(config, encryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileMode);

            s3EncryptionClientMetadataModeKMS = new AmazonS3EncryptionClient(kmsEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeKMS);

            s3EncryptionClientFileModeKMS = new AmazonS3EncryptionClient(config, kmsEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeKMS);
        }
        public void DownloadDirectoryProgressTest()
        {
            // disable clock skew testing, this is a multithreaded test
            using (RetryUtilities.DisableClockSkewCorrection())
            {
                var progressValidator = new DirectoryProgressValidator <DownloadDirectoryProgressArgs>();
                ConfigureProgressValidator(progressValidator);

                DownloadDirectory(progressValidator);
                progressValidator.AssertOnCompletion();
            }
        }
Exemple #4
0
        public EncryptionTestsV2() : base(KmsKeyIdProvider.Instance)
        {
            kmsKeyID = _kmsKeyIdProvider.GetKmsId();

            var rsa = RSA.Create();
            var aes = Aes.Create();

            var asymmetricEncryptionMaterials = new EncryptionMaterialsV2(rsa, AsymmetricAlgorithmType.RsaOaepSha1);
            var symmetricEncryptionMaterials  = new EncryptionMaterialsV2(aes, SymmetricAlgorithmType.AesGcm);

            var kmsEncryptionMaterials =
                new EncryptionMaterialsV2(kmsKeyID, KmsType.KmsContext, new Dictionary <string, string>());

            var fileConfig = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2)
            {
                StorageMode = CryptoStorageMode.InstructionFile
            };

            var metadataConfig = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2)
            {
                StorageMode = CryptoStorageMode.ObjectMetadata
            };

            s3EncryptionClientMetadataModeSymmetricWrap =
                new AmazonS3EncryptionClientV2(metadataConfig, symmetricEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeSymmetricWrap);

            s3EncryptionClientFileModeSymmetricWrap =
                new AmazonS3EncryptionClientV2(fileConfig, symmetricEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeSymmetricWrap);

            s3EncryptionClientMetadataModeAsymmetricWrap =
                new AmazonS3EncryptionClientV2(metadataConfig, asymmetricEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeAsymmetricWrap);

            s3EncryptionClientFileModeAsymmetricWrap =
                new AmazonS3EncryptionClientV2(fileConfig, asymmetricEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeAsymmetricWrap);

            s3EncryptionClientMetadataModeKMS = new AmazonS3EncryptionClientV2(metadataConfig, kmsEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeKMS);

            s3EncryptionClientFileModeKMS = new AmazonS3EncryptionClientV2(fileConfig, kmsEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeKMS);

            using (var writer = File.CreateText(filePath))
            {
                writer.Write(SampleContent);
            }

            bucketName = S3TestUtils.CreateBucketWithWait(s3EncryptionClientFileModeSymmetricWrap);
        }
Exemple #5
0
        private void PutStream(string destKey, int length, Stream stream)
        {
            PutObjectRequest request = new PutObjectRequest
            {
                BucketName  = bucketName,
                Key         = destKey,
                InputStream = stream,
            };

            request.Headers.ContentLength = length;
            using (RetryUtilities.DisableClockSkewCorrection())
            {
                Client.PutObject(request);
            }
        }
Exemple #6
0
        public void TestSingleUploads()
        {
            // Test simple PutObject upload
            var key = "contentBodyPut" + random.Next();
            PutObjectRequest putObjectRequest = new PutObjectRequest()
            {
                BucketName  = bucketName,
                Key         = key,
                ContentBody = "This is the content body!",
            };

            SetMetadataAndHeaders(putObjectRequest);
            Client.PutObject(putObjectRequest);
            ValidateObjectMetadataAndHeaders(key);

            using (var tu = new TransferUtility(Client))
            {
                // Test small TransferUtility upload
                key = "transferUtilitySmall" + random.Next();
                UtilityMethods.GenerateFile(tempFile, smallFileSize);
                var smallRequest = new TransferUtilityUploadRequest
                {
                    BucketName = bucketName,
                    Key        = key,
                    FilePath   = tempFile
                };
                SetMetadataAndHeaders(smallRequest);
                tu.Upload(smallRequest);
                ValidateObjectMetadataAndHeaders(key);

                // Test large TransferUtility upload
                // disable clock skew testing, this is a multithreaded operation
                using (RetryUtilities.DisableClockSkewCorrection())
                {
                    key = "transferUtilityLarge" + random.Next();
                    UtilityMethods.GenerateFile(tempFile, largeFileSize);
                    var largeRequest = new TransferUtilityUploadRequest
                    {
                        BucketName = bucketName,
                        Key        = key,
                        FilePath   = tempFile
                    };
                    SetMetadataAndHeaders(largeRequest);
                    tu.Upload(largeRequest);
                    ValidateObjectMetadataAndHeaders(key);
                }
            }
        }
 public void MultipartUploadProgressTest()
 {
     // disable clock skew testing, this is a multithreaded test
     using (RetryUtilities.DisableClockSkewCorrection())
     {
         var fileName          = UtilityMethods.GenerateName(@"MultipartUploadTest\File");
         var progressValidator = new TransferProgressValidator <UploadProgressArgs>
         {
             ValidateProgressInterval = false,
             Validate = (p) =>
             {
                 Assert.AreEqual(p.FilePath, Path.Combine(basePath, fileName));
             }
         };
         Upload(fileName, 20 * MEG_SIZE, progressValidator);
         progressValidator.AssertOnCompletion();
     }
 }
Exemple #8
0
        public void PutObjectWithContentLength()
        {
            string sourceKey = "source";
            string destKey   = "dest";
            string contents  = "Sample contents";
            int    length    = contents.Length;

            Client.PutObject(new PutObjectRequest
            {
                BucketName  = bucketName,
                Key         = sourceKey,
                ContentBody = contents
            });

            // Disable clock skew testing when generating a presigned url
            using (RetryUtilities.DisableClockSkewCorrection())
            {
                string url = Client.GetPreSignedURL(new GetPreSignedUrlRequest
                {
                    BucketName = bucketName,
                    Key        = sourceKey,
                    Expires    = DateTime.Now + TimeSpan.FromHours(2)
                });

                HttpWebRequest httpRequest = HttpWebRequest.Create(url) as HttpWebRequest;
                using (HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse)
                    using (Stream stream = httpResponse.GetResponseStream())
                    {
                        PutStream(destKey, length, stream);
                    }
                string finalContents = GetContents(destKey);
                Assert.AreEqual(contents, finalContents);

                length     -= 2;
                httpRequest = HttpWebRequest.Create(url) as HttpWebRequest;
                using (HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse)
                    using (Stream stream = httpResponse.GetResponseStream())
                    {
                        PutStream(destKey, length, stream);
                    }
                finalContents = GetContents(destKey);
                Assert.AreEqual(contents.Substring(0, length), finalContents);
            }
        }
        public static void Initialize(TestContext a)
        {
            s3EncryptionClientMetadataMode = new AmazonS3EncryptionClient(encryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataMode);

            AmazonS3CryptoConfiguration config = new AmazonS3CryptoConfiguration()
            {
                StorageMode = CryptoStorageMode.InstructionFile
            };

            s3EncryptionClientFileMode = new AmazonS3EncryptionClient(config, encryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileMode);


            using (StreamWriter writer = File.CreateText(fileName))
            {
                writer.Write(sampleContent);
            }
            bucketName = S3TestUtils.CreateBucket(s3EncryptionClientFileMode);
        }
        public static void Initialize(TestContext a)
        {
            using (var kmsClient = new AmazonKeyManagementServiceClient())
            {
                var response = kmsClient.CreateKey(new CreateKeyRequest
                {
                    Description = "Key for .NET integration tests.",
                    Origin      = OriginType.AWS_KMS,
                    KeyUsage    = KeyUsageType.ENCRYPT_DECRYPT
                });
                kmsKeyID = response.KeyMetadata.KeyId;
            }

            var encryptionMaterials    = new EncryptionMaterials(RSA.Create());
            var kmsEncryptionMaterials = new EncryptionMaterials(kmsKeyID);

            AmazonS3CryptoConfiguration config = new AmazonS3CryptoConfiguration()
            {
                StorageMode = CryptoStorageMode.InstructionFile
            };

            s3EncryptionClientMetadataMode = new AmazonS3EncryptionClient(encryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataMode);

            s3EncryptionClientFileMode = new AmazonS3EncryptionClient(config, encryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileMode);

            s3EncryptionClientMetadataModeKMS = new AmazonS3EncryptionClient(kmsEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeKMS);

            s3EncryptionClientFileModeKMS = new AmazonS3EncryptionClient(config, kmsEncryptionMaterials);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeKMS);

            using (StreamWriter writer = File.CreateText(filePath))
            {
                writer.Write(sampleContent);
            }
            bucketName = S3TestUtils.CreateBucket(s3EncryptionClientFileMode);
        }
Exemple #11
0
#pragma warning restore 0618

        public EncryptionTestsV1InteropV1N() : base(KmsKeyIdProvider.Instance)
        {
            filePath = Path.Combine(Path.GetTempPath(), $"EncryptionPutObjectFile-{Guid.NewGuid()}.txt");

            kmsKeyID = _kmsKeyIdProvider.GetKmsId();

            var rsa = RSA.Create();
            var aes = Aes.Create();

            var asymmetricEncryptionMaterialsV1  = new Amazon.S3.Encryption.EncryptionMaterials(rsa);
            var asymmetricEncryptionMaterialsV1N = new EncryptionMaterials(rsa);

            var symmetricEncryptionMaterialsV1  = new Amazon.S3.Encryption.EncryptionMaterials(aes);
            var symmetricEncryptionMaterialsV1N = new EncryptionMaterials(aes);

            var kmsEncryptionMaterialsV1  = new Amazon.S3.Encryption.EncryptionMaterials(kmsKeyID);
            var kmsEncryptionMaterialsV1N = new EncryptionMaterials(kmsKeyID);

            var configV1 = new Amazon.S3.Encryption.AmazonS3CryptoConfiguration()
            {
                StorageMode = Amazon.S3.Encryption.CryptoStorageMode.InstructionFile
            };
            var configV1N = new AmazonS3CryptoConfiguration()
            {
                StorageMode = CryptoStorageMode.InstructionFile
            };

            s3EncryptionClientMetadataModeAsymmetricWrapV1 =
                new Amazon.S3.Encryption.AmazonS3EncryptionClient(asymmetricEncryptionMaterialsV1);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeAsymmetricWrapV1);

            s3EncryptionClientFileModeAsymmetricWrapV1 =
                new Amazon.S3.Encryption.AmazonS3EncryptionClient(configV1, asymmetricEncryptionMaterialsV1);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeAsymmetricWrapV1);

            s3EncryptionClientMetadataModeSymmetricWrapV1 =
                new Amazon.S3.Encryption.AmazonS3EncryptionClient(symmetricEncryptionMaterialsV1);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeSymmetricWrapV1);

            s3EncryptionClientFileModeSymmetricWrapV1 =
                new Amazon.S3.Encryption.AmazonS3EncryptionClient(configV1, symmetricEncryptionMaterialsV1);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeSymmetricWrapV1);

            s3EncryptionClientMetadataModeKMSV1 =
                new Amazon.S3.Encryption.AmazonS3EncryptionClient(kmsEncryptionMaterialsV1);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeKMSV1);

            s3EncryptionClientFileModeKMSV1 =
                new Amazon.S3.Encryption.AmazonS3EncryptionClient(configV1, kmsEncryptionMaterialsV1);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeKMSV1);

            s3EncryptionClientMetadataModeAsymmetricWrapV1N =
                new AmazonS3EncryptionClient(asymmetricEncryptionMaterialsV1N);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeAsymmetricWrapV1N);

            s3EncryptionClientFileModeAsymmetricWrapV1N =
                new AmazonS3EncryptionClient(configV1N, asymmetricEncryptionMaterialsV1N);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeAsymmetricWrapV1N);

            s3EncryptionClientMetadataModeSymmetricWrapV1N =
                new AmazonS3EncryptionClient(symmetricEncryptionMaterialsV1N);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeSymmetricWrapV1N);

            s3EncryptionClientFileModeSymmetricWrapV1N =
                new AmazonS3EncryptionClient(configV1N, symmetricEncryptionMaterialsV1N);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeSymmetricWrapV1N);

            s3EncryptionClientMetadataModeKMSV1N = new AmazonS3EncryptionClient(kmsEncryptionMaterialsV1N);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientMetadataModeKMSV1N);

            s3EncryptionClientFileModeKMSV1N = new AmazonS3EncryptionClient(configV1N, kmsEncryptionMaterialsV1N);
            RetryUtilities.ForceConfigureClient(s3EncryptionClientFileModeKMSV1N);

            using (var writer = File.CreateText(filePath))
            {
                writer.Write(SampleContent);
            }

            bucketName = S3TestUtils.CreateBucketWithWait(s3EncryptionClientFileModeAsymmetricWrapV1);
        }
Exemple #12
0
        public void TestSingleUploadWithSpacesInMetadata()
        {
            string metadataName  = "document";
            string metadataValue = " A  B  C  ";
            // Test simple PutObject upload
            var key = "contentBodyPut" + random.Next();
            PutObjectRequest putObjectRequest = new PutObjectRequest()
            {
                BucketName  = bucketName,
                Key         = key,
                ContentBody = "This is the content body!",
            };

            putObjectRequest.Metadata[metadataName] = metadataValue;

            Client.PutObject(putObjectRequest);
            using (var response = Client.GetObject(bucketName, key)) // Validate metadata
            {
                Assert.AreEqual(metadataValue.Trim(), response.Metadata[metadataName]);
            }

            using (var tu = new TransferUtility(Client))
            {
                // Test small TransferUtility upload
                key = "transferUtilitySmall" + random.Next();
                UtilityMethods.GenerateFile(tempFile, smallFileSize);
                var smallRequest = new TransferUtilityUploadRequest
                {
                    BucketName = bucketName,
                    Key        = key,
                    FilePath   = tempFile
                };

                smallRequest.Metadata[metadataName] = metadataValue;

                tu.Upload(smallRequest);
                using (var response = Client.GetObject(bucketName, key)) // Validate metadata
                {
                    Assert.AreEqual(metadataValue.Trim(), response.Metadata[metadataName]);
                }

                // Test large TransferUtility upload
                // disable clock skew testing, this is a multithreaded operation
                using (RetryUtilities.DisableClockSkewCorrection())
                {
                    key = "transferUtilityLarge" + random.Next();
                    UtilityMethods.GenerateFile(tempFile, largeFileSize);
                    var largeRequest = new TransferUtilityUploadRequest
                    {
                        BucketName = bucketName,
                        Key        = key,
                        FilePath   = tempFile
                    };
                    largeRequest.Metadata[metadataName] = metadataValue;

                    tu.Upload(largeRequest);
                    using (var response = Client.GetObject(bucketName, key)) // Validate metadata
                    {
                        Assert.AreEqual(metadataValue.Trim(), response.Metadata[metadataName]);
                    }
                }
            }
        }