我想使用Windows Powershell从AWS S3存储桶下载一个文件。我无法安装任何AWS软件,需要创建API才能访问AWS S3中的文件。我使用Postman测试文件是否可访问并且成功。
鉴于这一成功,我尝试遵循AWS指南,其中指出我需要创建以下内容:
我见过的最接近的例子是https://forums.aws.amazon.com/thread.jspa?threadID=251722 然而,阿卜哈亚也没有解决这一问题。(本例中的有效负载哈希是blank的有效负载哈希)。我已经阅读了几个AWS指南,但在尝试将它们应用于powershell时,这些指南非常混乱。https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
下面代码中的url生成了一个看起来正确的url:http://SAMPLEBUCKETNAME。s3-ap-southeast-1.amazonaws.com/test.xlsx?
$method = 'GET'
$service = 's3'
$host1 = 'SAMPLES3BUCKETNAME.s3-ap-southeast-1.amazonaws.com'
$region = 'ap-southeast-1'
$endpoint = 'http://SAMPLES3BUCKETNAME.s3-ap-southeast-1.amazonaws.com/test.xlsx'
function HmacSHA256($message, $secret){
<#$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::UTF8.GetBytes($secret)
#$hmacsha.key = $secret
$signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($message))
$signature = [Convert]::ToBase64String($signature)
#>
$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.Key = @($secret -split '(?<=\G..)(?=.)'|ForEach-Object {[byte]::Parse($_,'HexNumber')})
$sign = [BitConverter]::ToString($hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($message))).Replace('-','').ToLower()
return $sign
}
function getSignatureKey($key, $dateStamp, $regionName, $serviceName)
{
$kSecret = [Text.Encoding]::UTF8.GetBytes(("AWS4" + $key).toCharArray())
$kDate = HmacSHA256 $dateStamp $kSecret;
$kRegion = HmacSHA256 $regionName $kDate ;
$kService = HmacSHA256 $serviceName $kRegion ;
$kSigning = HmacSHA256 "aws4_request" $kService ;
return $kSigning;
}
$access_key = 'SAMPLEACCESSKEY'
$secret_key = 'SAMPLESECRETKEY'
$amz_date = [DateTime]::UtcNow.ToString('yyyyMMddTHHmmssfffffffZ')
$datestamp = [DateTime]::UtcNow.ToString('yyyyMMdd')
$canonical_uri = '/'
$canonical_headers = 'host:' + $host1 + "`n"
$signed_headers = 'host'
$algorithm = 'AWS4-HMAC-SHA256'
$credential_scope = $datestamp + '/' + $region + '/' + $service + '/' + 'aws4_request'
$canonical_querystring = ''
$canonical_querystring += '&X-Amz-Algorithm=AWS4-HMAC-SHA256'
$canonical_querystring += '&X-Amz-Credential=' + [uri]::EscapeDataString(($access_key + '/' + $credential_scope))
$canonical_querystring += '&X-Amz-Date=' + $amz_date
$canonical_querystring += '&X-Amz-Expires=86400'
$canonical_querystring += '&X-Amz-SignedHeaders=' + $signed_headers
$payload_hash = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
$canonical_request1 = $method + "`n" +$canonical_uri + "`n" + $canonical_querystring + "`n" + $canonical_headers + "`n" + $signed_headers + "`n" + $payload_hash
Write-Host $canonical_request1
function hash($request) {
$hasher = [System.Security.Cryptography.SHA256]::Create()
$content = [Text.Encoding]::UTF8.GetBytes($request)
$hash = [System.Convert]::ToBase64String($hasher.ComputeHash($content))
return $hash
}
$canonical_request = hash -request $canonical_request1
$string_to_sign = $algorithm + "`n" + $amz_date + "`n" + $credential_scope + "`n" + $canonical_request
$signing_key = getSignatureKey $secret_key $datestamp $region $service
$signature = HmacSHA256 -secret $signing_key -message $string_to_sign
$canonical_querystring += '&X-Amz-Signature=' + $signature
$request_url = $endpoint + "?" + $canonical_querystring
$request_url
有一些错误,特别是您如何计算签名、构建时间戳,您看到的错误是因为参数没有正确传递。
以下是纠正这些问题的版本:
$method = 'GET'
$service = 's3'
$bucket = "SAMPLES3BUCKETNAME"
$key = 'test.xlsx'
$region = 'ap-southeast-1'
$host1 = $bucket + '.s3-' + $region + '.amazonaws.com'
$access_key = 'SAMPLEACCESSKEY'
$secret_key = 'SAMPLESECRETKEY'
function HmacSHA256($message, $secret)
{
$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = $secret
$signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($message))
return $signature
}
function getSignatureKey($key, $dateStamp, $regionName, $serviceName)
{
$kSecret = [Text.Encoding]::UTF8.GetBytes(("AWS4" + $key).toCharArray())
$kDate = HmacSHA256 $dateStamp $kSecret;
$kRegion = HmacSHA256 $regionName $kDate;
$kService = HmacSHA256 $serviceName $kRegion;
$kSigning = HmacSHA256 "aws4_request" $kService;
return $kSigning
}
function hash($request)
{
$hasher = [System.Security.Cryptography.SHA256]::Create()
$content = [Text.Encoding]::UTF8.GetBytes($request)
$bytes = $hasher.ComputeHash($content)
return ($bytes|ForEach-Object ToString x2) -join ''
}
$now = [DateTime]::UtcNow
$amz_date = $now.ToString('yyyyMMddTHHmmssZ')
$datestamp = $now.ToString('yyyyMMdd')
$signed_headers = 'host'
$credential_scope = $datestamp + '/' + $region + '/' + $service + '/' + 'aws4_request'
$canonical_querystring = 'X-Amz-Algorithm=AWS4-HMAC-SHA256'
$canonical_querystring += '&X-Amz-Credential=' + [uri]::EscapeDataString(($access_key + '/' + $credential_scope))
$canonical_querystring += '&X-Amz-Date=' + $amz_date
$canonical_querystring += '&X-Amz-Expires=86400'
$canonical_querystring += '&X-Amz-SignedHeaders=' + $signed_headers
$canonical_headers = 'host:' + $host1 + "`n"
$canonical_request = $method + "`n"
$canonical_request += "/" + $key + "`n"
$canonical_request += $canonical_querystring + "`n"
$canonical_request += $canonical_headers + "`n"
$canonical_request += $signed_headers + "`n"
$canonical_request += "UNSIGNED-PAYLOAD"
$algorithm = 'AWS4-HMAC-SHA256'
$canonical_request_hash = hash -request $canonical_request
$string_to_sign = $algorithm + "`n"
$string_to_sign += $amz_date + "`n"
$string_to_sign += $credential_scope + "`n"
$string_to_sign += $canonical_request_hash
$signing_key = getSignatureKey $secret_key $datestamp $region $service
$signature = HmacSHA256 -secret $signing_key -message $string_to_sign
$signature = ($signature|ForEach-Object ToString x2) -join ''
$canonical_querystring += '&X-Amz-Signature=' + $signature
$request_url = "http://" + $host1 + "/" + $key + "?" + $canonical_querystring
Write-Host $request_url
我想参加一场比赛。Java一直是我编写游戏的工具,所以很自然我会想在这个游戏中使用它。问题是,它不能需要其他软件。我相信这包括Java。那么,有没有办法在某种exe文件中包含java?或者以其他方式包括它?资产不必包含在内,但总体大小必须小于1GB,因此我需要足够的空间来存放实际的游戏和资产。
到目前为止,我运行的是一台视窗8.1电脑,它没有像Android Studio或Eclipse这样的IDE的存储或内存。我想下载Android SDK工具,没有IDE。如何才能做到这一点?
问题内容: 我有和。 我的Linux Mint 12上有很多错误,我只是重新安装了它,所以我想再次从头开始安装所有内容。 这是我的错误之一。我在那里收到一个有趣的答案: 停止使用su和sudo运行virtualenv。 你需要以普通用户身份运行virtualenv。 你已经使用sudo创建了virtualenv,这就是为什么你会收到这些错误的原因。 那么如何不使用安装呢?我可以使用还是不使用?还是
我在Rails中有一个简单的应用程序,它允许我使用Carrierwave和fog将文件上传到AmazonS3。它很好用。我现在正在下载文件并在浏览器上显示它们。它起作用了。然而,来自S3的私有链接(我将其设置为临时链接)显示在浏览器上,如: https://xxx.s3-ap-southeast-1.amazonaws.com/uploads/resume/attachment/4/xxx.pdf
我们有一个包含一些VC++项目的Visual Studio解决方案,目前我们已经从VS2010升级到Visual Studio 2012。在此过程中,我们还将VC++项目提升到PlatformToolsetV110。 是否有任何其他SDK或安装包可以帮助解决此问题?
问题内容: 我想要以下内容。 我只需要一个可以从Maven存储库下载jar及其依赖项的实用程序,而对我的项目的构建方式没有任何限制。 我想要这样的东西: 它也应该能够下载依赖项。 更新: 我不知道应该构造pom.xml。 我唯一需要完成的任务是下载jar,我希望有一个工具可以完成此任务,而不会让我烦恼过多的信息。 有那样的东西吗? 问题答案: 如果要将maven依赖项下载到lib目录中,请使用带有