次のコマンドを使用して、ファイルをprivateS3バケットに正常にアップロードできました。
aws s3 cp "myfile.txt" "s3://myfolder/myfile.txt" --region=us-east-1 --output=json
Myfile.txtの一時的なURLダウンロードを返すためにAWS CLIコマンドを発行したいのですが、誰もがその方法を知っていますか?
私はグーグルで、次のような一時的なURLを取得するためにいくつかの署名をする必要があるように見えます: http://docs.aws.Amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
私はグーグルで調べて、S3のsinged-urlを生成するのに役立つこのスクリプトを書くことにしました。
aws cliはpresign
コマンドをサポートするようになりました。走れます
$ aws s3 presign s3://test-bucket/test-file.txt
https://test-bucket/test-file.txt?Expires=1499152189&Signature=some-sha
これにより、3600秒でそのファイルをダウンロードするために誰とでも共有できるURLが生成されます。
期間は--expires-in
で変更できます
$ aws s3 presign s3://test-bucket/test-file.txt --expires-in 600
生成されたURLは10分で期限切れになります。
aws cli docsのpresign について詳しく読むことができます。
次のURL形式を使用できます。
https://<bucket-name>.s3.amazonaws.com/<object or key name>
または古いスタイル:
https://s3.amazonaws.com/<bucket-name>/<object or key name>
アクセスできるようにするには、オブジェクトへのパブリックアクセスを許可するか、適切なバケットポリシーを添付する必要があります。
たとえば、次のバケットポリシーは、バケットzzzyyy
オブジェクト 'yyyeee'へのパブリックアクセスを示しています
$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee
{
"Owner": {
"DisplayName": "owner",
"ID": "Some hash of owner"
},
"Grants": [
{
"Grantee": {
"DisplayName": "owner",
"ID": "Some hash of owner"
},
"Permission": "READ"
},
{
"Grantee": {
"DisplayName": "owner",
"ID": "Some hash of owner"
},
"Permission": "WRITE"
},
{
"Grantee": {
"DisplayName": "owner",
"ID": "Some hash of owner"
},
"Permission": "READ_ACP"
},
{
"Grantee": {
"DisplayName": "owner",
"ID": "Some hash of owner"
},
"Permission": "WRITE_ACP"
},
{
"Grantee": {
"URI": "http://acs.amazonaws.com/groups/global/AllUsers"
},
"Permission": "READ"
},
{
"Grantee": {
"URI": "http://acs.amazonaws.com/groups/global/AllUsers"
},
"Permission": "READ_ACP"
}
]
}
バケットポリシーの例をここで見ることができます:
http://docs.aws.Amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html
以下に示すように、S3コンソールを使用することもできます。
コマンドが間違っています。の代わりに:
$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee
そのはず:
$ aws s3api get-object-acl --bucket zzzyyy --key yyyeee
または、 https://github.com/minio/mc をご覧になり、フィードバックをお寄せください。もちろん、GUIとしてではなく、スクリプト化可能で、自動化されるCLIドロップボックスインターフェイスが必要でした。そのため、2つのユースケースに対処するために、mc
の便利なコマンドを実装することになりました。
curl
フォームを共有する場合(事前定義済みPOSTポリシー)次の例は、両方のユースケースに対応しています。
$ mc share
NAME:
mc share - Download and upload documents.
USAGE:
mc share command [arguments...]
COMMANDS:
download Generate URL to download documents.
upload Generate ‘curl’ command to upload files.
list List the shared URLs
これらのコマンドは、通常の意味で使用することも、スクリプト内で使用することもできます。スクリプトの目的で、mc
はすべてのコマンドに対して--json
出力を提供します。
mc share download
の例$ mc share download https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3
https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVA5BMMU2RHO6IOQ%2F20151109%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151109T060251Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=Host&X-Amz-Signature=3c69928bee38b7b465547f9fa97146ff606480bbead8042c0351840c578a2ceb
$ mc --json share download https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3 | jq .
{
"expiry": {
"days": 7
},
"downloadUrl": "https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVA5BMMU2RHO6IOQ%2F20151109%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151109T060618Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=Host&X-Amz-Signature=48f7a521396ac8e36443cc86ce16c2619f9fa81371aad9a309375c933ea48d99",
"keyName": "https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3"
}
mc share upload
の例$ mc share upload --expire=2h --content-type=image/png https://s3.amazonaws.com/backup/2007-Mar-2/...
curl https://s3.amazonaws.com/backup -F x-amz-credential=AKIAJVA5BMMU2RHO6IOQ/20151109/us-east-1/s3/aws4_request -F x-amz-date=20151109T061202Z -F x-amz-signature=61c234dd17fc9e5888417ac4546b37d61755e551674a9617f33f5232ec53c8b6 -F Content-Type=image/png -F bucket=backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wOVQwODoxMjowMi40MDZaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkQ29udGVudC1UeXBlIiwiaW1hZ2UvcG5nIl0sWyJlcSIsIiRidWNrZXQiLCJiYWNrdXAiXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIjIwMDctTWFyLTIvIl0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNTExMDlUMDYxMjAyWiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIkFLSUFKVkE1Qk1NVTJSSE82SU9RLzIwMTUxMTA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F key=2007-Mar-2/<FILE> -F file=@<FILE>
$ mc --json share upload --expire=2h --content-type=image/png https://s3.amazonaws.com/backup/2007-Mar-2/... | jq .
{
"expiry": {
"hours": 2
},
"uploadCommand": "curl https://s3.amazonaws.com/backup -F x-amz-signature=4b349a15e76ab403424ec6b1e289336f67c02c427ccc98522d6f654eee5b7de6 -F Content-Type=image/png -F bucket=backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wOVQwODoxMzoyMS4zODFaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkQ29udGVudC1UeXBlIiwiaW1hZ2UvcG5nIl0sWyJlcSIsIiRidWNrZXQiLCJiYWNrdXAiXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIjIwMDctTWFyLTIvIl0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNTExMDlUMDYxMzIxWiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIkFLSUFKVkE1Qk1NVTJSSE82SU9RLzIwMTUxMTA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=AKIAJVA5BMMU2RHO6IOQ/20151109/us-east-1/s3/aws4_request -F x-amz-date=20151109T061321Z -F key=2007-Mar-2/<FILE> -F file=@<FILE> ",
"keyName": "https://s3.amazonaws.com/backup/2007-Mar-2/..."
}
いくつかのフィードバックを楽しみにしています。ありがとう
プライベートバケットURLを取得するための事前作成されたcliコマンド\ subコマンドはないと思います。事前署名については presign を参照できます。プライベートバケットにパブリックURLが必要な場合、オブジェクトの読み取りはバケットではなくパブリックです。パブリックawsのURLには、何かを使用できます。これをpowershellで記述しました。これは$profile
Function getAwsUrl{
[CmdletBinding(DefaultParameterSetName="S3Path")]
param(
[parameter (ParameterSetName="S3Path",mandatory=$true)]$s3path,
[parameter (ParameterSetName="BucketKey")]$bucket,
[parameter (ParameterSetName="BucketKey",mandatory=$true)]$key
)
if($s3path)
{
$splits = $s3path.Split('//')
$bucket =$splits[2]
$key = $splits[3]
}
else
{
#user input bucket and key
$bucket =$bucket
$key = $key
}
#using standard aws region "us-west-2"
Write-Output "https://$bucket.s3.us-west-2.amazonaws.com/$key"
}
使用例:--acl
一般公開として
aws s3 cp C:\temp\dumy.txt s3://fpd-uploads/ --acl public-read
getAwsUrl -s3path s3://fpd-uploads/dumy.txt
get-help getAwsUrl
NAME
getAwsUrl
SYNTAX
getAwsUrl -s3path <Object> [<CommonParameters>]
getAwsUrl -key <Object> [-bucket <Object>] [<CommonParameters>]
ALIASES
None
REMARKS
None
これは8か月遅れていることを知っていますが、Eclipse for AWS Toolkit for Eclipse( http://aws.Amazon.com/Eclipse/ )を使用して事前署名済みURLを生成できることがわかりましたターゲットファイルを右クリックすると、有効期限を設定することもできます。