如何使用PowerShell指定Amazon S3对象的服务器端加密?

时间:2012-05-23 18:09:26

标签: encryption powershell amazon-s3 amazon-web-services server-side

有人会解释如何在PowerShell脚本中启用Amazon S3服务器端加密吗?我正在使用下面的示例代码,但是当我在AWS控制台或Cloudberry S3 Explorer Pro中检查加密时,加密类型仍设置为“无”。在上传文件后使用AWS / Cloudberry手动执行此操作是不可行的,因为该脚本将部署到200多台服务器,每台服务器在S3中都有自己的存储桶。这是脚本中的一段代码:

$TestFile="testfile.7z"
$S3ObjectKey = "mytestfile.7z"
#Create Amazon PutObjectRequest.
$AmazonS3 = [Amazon.AWSClientFactory]::CreateAmazonS3Client($S3AccessKeyID,$S3SecretKeyID)
$S3PutRequest = New-Object Amazon.S3.Model.PutObjectRequest 
$S3PutRequest.BucketName = $S3BucketName
$S3PutRequest.Key = $S3ObjectKey
$S3PutRequest.FilePath = $TestFile
$S3Response = $AmazonS3.PutObject($S3PutRequest)

我尝试插入以下内容但未成功(在$ S3Response行之前):

$S3PutRequest.ServerSideEncryption

当添加上述内容时,我在输出中收到此消息,但该文件在S3上仍未标记为已加密:

MemberType          : Method
OverloadDefinitions : {Amazon.S3.Model.PutObjectRequest WithServerSideEncryptionMethod(Amazon.S3.Model.ServerSideEncryptionMethod encryption)}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : Amazon.S3.Model.PutObjectRequest WithServerSideEncryptionMethod(Amazon.S3.Model.ServerSideEncryptionMethod encryption)
Name                : WithServerSideEncryptionMethod
IsInstance          : True

谁能告诉我我做错了什么?非常感谢提前。

2 个答案:

答案 0 :(得分:1)

你应该添加:

$S3PutRequest.WithServerSideEncryptionMethod([Amazon.S3.Model.ServerSideEncryptionMethod]::AES256)

或者:

$S3PutRequest.ServerSideEncryptionMethod = [Amazon.S3.Model.ServerSideEncryptionMethod]::AES256

答案 1 :(得分:0)

如果您使用的是CloudBerry,它有自己的PowerShell管理单元

Add-PSSnapin CloudBerryLab.Explorer.PSSnapin

$s3 = Get-CloudS3Connection -Key XXXXXXX -Secret YYYYYYY
$destFolder = $s3 | Select-CloudFolder -path "mybucket"
$local = Get-CloudFilesystemConnection
$srcFolder = $local | Select-CloudFolder -path "c:\myzips"
$srcFolder | Copy-CloudItem $destFolder -filter "testfile.7z" -SSE

注意 Copy-CloudItem 命令中的 -SSE 参数。 可以在他们的博客上找到一些有用的示例:http://blog.cloudberrylab.com/search?q=powershell