2016-08-02 4 views
0

Quelqu'un peut-il s'il vous plaît m'aider dans le cryptage/décryptage du contenu des fichiers dans le dossier en utilisant AWS KMS. Je veux que le script PowerShell fasse de même. Chose est que je veux crypter le dossier avant de télécharger sur seau amazon s3 et que vous voulez le décrypter après le téléchargement de s3 seau.crypter/décrypter le contenu du dossier entier dans powershell en utilisant AWS KMS

P.S: Je ne connais pas le langage PowerShell.

Merci d'avance!

Répondre

0

Vous pouvez trouver un bon tutoriel here de steven.

Je viens de copier coller son code qui a fonctionné parfaitement pour moi.

Pour chiffrer:

function Invoke-KMSEncryptText 
(
    [Parameter(Mandatory=$true,Position=1,HelpMessage='PlainText to Encrypt')] 
    [string]$plainText, 
    [Parameter(Mandatory=$true,Position=2,HelpMessage='GUID of Encryption Key in KMS')] 
    [string]$keyID, 
    [Parameter(Mandatory=$true,Position=3)] 
    [string]$region, 
    [Parameter(Position=4)] 
    [string]$AccessKey, 
    [Parameter(Position=5)] 
    [string]$SecretKey 
) 
{ 
    # memory stream 
    [byte[]]$byteArray = [System.Text.Encoding]::UTF8.GetBytes($plainText) 
    $memoryStream = New-Object System.IO.MemoryStream($byteArray,0,$byteArray.Length) 
    # splat 
    $splat = @{Plaintext=$memoryStream; KeyId=$keyID; Region=$Region;} 
    if(![string]::IsNullOrEmpty($AccessKey)){$splat += @{AccessKey=$AccessKey;}} 
    if(![string]::IsNullOrEmpty($SecretKey)){$splat += @{SecretKey=$SecretKey;}} 
    # encrypt 
    $encryptedMemoryStream = Invoke-KMSEncrypt @splat 
    $base64encrypted = [System.Convert]::ToBase64String($encryptedMemoryStream.CiphertextBlob.ToArray()) 
    return $base64encrypted 
} 

Pour déchiffrer:

function Invoke-KMSDecryptText 
(
    [Parameter(Mandatory=$true,Position=1,HelpMessage='CipherText base64 string to decrypt')] 
    [string]$cipherText, 
    [Parameter(Mandatory=$true,Position=2)] 
    [string]$region, 
    [Parameter(Position=3)] 
    [string]$AccessKey, 
    [Parameter(Position=4)] 
    [string]$SecretKey 
) 
{ 
    # memory stream 
    $encryptedBytes = [System.Convert]::FromBase64String($cipherText) 
    $encryptedMemoryStreamToDecrypt = New-Object System.IO.MemoryStream($encryptedBytes,0,$encryptedBytes.Length) 
    # splat 
    $splat = @{CiphertextBlob=$encryptedMemoryStreamToDecrypt; Region=$Region;} 
    if(![string]::IsNullOrEmpty($AccessKey)){$splat += @{AccessKey=$AccessKey;}} 
    if(![string]::IsNullOrEmpty($SecretKey)){$splat += @{SecretKey=$SecretKey;}} 
    # decrypt 
    $decryptedMemoryStream = Invoke-KMSDecrypt @splat 
    $plainText = [System.Text.Encoding]::UTF8.GetString($decryptedMemoryStream.Plaintext.ToArray()) 
    return $plainText 
} 

Et il donne un exemple:

Import-Module awspowershell 
# set your credentials to access AWS, key you want to encrypt with, and the region the key is stored 
$AccessKey = '' 
$SecretKey = '' 
$Region = 'eu-west-1' 
$keyID = '' 
$plainText = 'Secret' 

# Encrypt some plain text and write to host 
$cipherText = Invoke-KMSEncryptText -plainText $plainText -keyID $keyID -Region $Region -AccessKey $AccessKey -SecretKey $SecretKey 
Write-host $cipherText 

# Decrypt the cipher text and write to host 
$plainText = Invoke-KMSDecryptText -cipherText $cipherText -Region $Region -AccessKey $AccessKey -SecretKey $SecretKey 
Write-host $plainText