نعم ، أعتقد أن هذه ستكون ميزة رائعة. أعتقد أن هذا سيكون أمرًا فرعيًا جديدًا لـ s3؟ لقد كنت أعمل على بعض التغييرات الداخلية في كود الأمر s3 لتسهيل إضافة الأوامر الفرعية. لقد كنت أستخدم هذا لبدء إعادة بناء الأمر ls
لإصلاح العديد من المشكلات التي تم الإبلاغ عنها مع ls
.
لم يتم الانتهاء منه بالكامل بعد ، ولكن إليكم ما لدي حتى الآن:
https://github.com/jamesls/aws-cli/compare/s3-ls-permissions#diff -b88a66f4bd148577a9390cb980d7eeb9R321
نعم ، هذا ما كنت أبحث عنه. من فضلك ، اسمح بتحديد انتهاء الصلاحية ليس فقط بالمدة ، ولكن أيضًا بالوقت المحدد. تتطلب المنطقة الزمنية UTC ، تنسيق ISO ، الثواني الكاملة ، السلسلة التي تنتهي بـ "Z" تبدو لي جيدة الاستخدام (على سبيل المثال ، "2014-05-30T00: 00: 00Z").
في حالة احتياجك حقًا إلى إنشاء tmpurl من سطر الأوامر ، يمكنني أن أوصي بأداة سطر الأوامر الخاصة بي s3tmpgen
على أي حال ، أود أن أدعو حقًا هذه الوظيفة إلى AWS CLI ، والتي أصبحت أداة قيمة لعملي اليومي مع AWS S3.
+1
+1
أتطلع إلى استخدام S3 لاستضافة حزم التعليمات البرمجية لنشرها في Heroku وستكون هذه ميزة رائعة :)
https://blog.heroku.com/archives/2014/5/22/introducing_the_app_json_application_manifest
+1
سيكون +1 أمرًا رائعًا للحصول عليه في AWS CLI
مجرد ملاحظة لأي شخص ينتهي به الأمر هنا ، يمكنك القيام بذلك بنفسك بشكل تافه من خلال الوصول إلى مكتبة boto
: https://boto.readthedocs.org/en/latest/ref/s3.html#boto .s3.key.Key.generate_url
شكرا على ملاحظاتك. سألقي نظرة على هذا ، أوافق على أن هذه ستكون ميزة رائعة لإضافتها إلى AWS CLI.
شكرا @ johnboxall. يعد Boto خيارًا بالتأكيد ، على الرغم من أنه بالنسبة للأشخاص الذين ينشرون ثنائي cli دون عمليات نشر Python الأصلية (اعتقد مستخدمي Windows) ، فإن السير في هذا المسار هو نفس القدر من العمل مثل سحب PowerShell SDK والقيام بالأشياء عبر .NET SDK. ما زلت ترغب في رؤية هذا المواطن في CLI. :ابتسامة:
فقط لأي شخص يتطلع إلى استخدام boto مباشرةً في الوقت الحالي حتى تتم إضافته إلى aws-cli ، فقد اكتشفت أنني سأضيف تعليمة عينة سريعة. لقد ذهبت الآن للبحث عن هذا عدة مرات وأفضل الحصول عليه مع هذه التذكرة وتعليق
على صندوق تم تثبيت بيثون عليه بالفعل
$ python --version
Python 2.7.6
$ sudo pip install boto
$ python
>>> import boto
>>> s3 = boto.connect_s3()
>>> bucket = s3.get_bucket('your-bucket-name')
>>> key = bucket.get_key('the-prefix/the-name-of-the-object.mp4')
>>> key.generate_url(3600)
'https://your-bucket-name.s3.amazonaws.com/the-prefix/the-name-of-the-object.mp4?Signature=CgDfFa45DBXFiMfASxSTpiSuHKM%3D&Expires=1415913273&AWSAccessKeyId=ABCDEDKSY344ACVDG'
بناءً على مثال @ isleshocky77 ... إضافة الوسائط والتحقق من الأخطاء الطفيفة:
$ cat boto-get-signed-url.py
#!/usr/bin/python
import boto
import argparse
parser = argparse.ArgumentParser(description='Generate an S3 signed URL')
parser.add_argument('-b', '--bucket', help='bucket name')
parser.add_argument('-k', '--key', help='prefix/key')
parser.add_argument('-s', '--seconds', type=int, help='time in seconds until the URL will expire')
args = parser.parse_args()
s3 = boto.connect_s3()
bucket = s3.get_bucket(args.bucket)
key = bucket.get_key(args.key)
if bucket.get_key(args.key):
print key.generate_url(args.seconds)
else:
print 's3://' + args.bucket + '/' + args.key + ' does not exist'
$ ./boto-get-signed-url.py -b superbucket -k "test" -s 60
https://superbucket.s3.amazonaws.com/test?Signature=n6cO8RH%2FbNwQhuZVNNazo3q04x0%3D&Expires=1416695021&AWSAccessKeyId=AKIEXAMPLEKEYNOTREAL
$ boto-get-signed-url.py --help
usage: boto-get-signed-url.py [-h] [-b BUCKET] [-k KEY] [-s SECONDS]
Generate an S3 signed URL
optional arguments:
-h, --help show this help message and exit
-b BUCKET, --bucket BUCKET
bucket name
-k KEY, --key KEY prefix/key
-s SECONDS, --seconds SECONDS
time in seconds until the URL will expire
تحية للجميع
بعد إجراء فحص آخر حول حالة هذه المشكلة ، قمت بإجراء تحديث لحزمة Python ttr.aws.utils.s3 لتوفير الأداة s3tmpgen . يسمح التحديث بإنشاء عنوان url ليس فقط باستخدام https ، ولكن (مع الخيار -http
) أيضًا http.
ما زلت أتطلع إلى استبدال هذا بحل awscli.
: +1:
+1 لعنوان URL الموقع s3 ليكون جزءًا من cli
: +1:
+1
أعتقد ، وأنا أفهم ، لماذا يستغرق الأمر وقتًا طويلاً: يجب أن تحدث الأشياء بالترتيب والشيء الجيد ، يبدو أنه على خريطة الطريق.
نظرًا لأن AWS CLI يعتمد على botocore
، فسيتم حلها هناك أولاً. يطلب boto / botocore # 291 ذلك.
تم دمج طلب السحب boto / botocore # 504 بالفعل في الفرع clients-only
وخريطة الطريق (المذكورة في README على https://github.com/boto/botocore) ، botocore حاليًا خطوة واحدة فقط قبل دمج الفرع clients-only
قيد التطوير (ثم يكون لدى الإصدار التجريبي ، GA و AWS CLI أداة "أصلية" لتوفير وظائف لنا).
تضمين التغريدة
نعم بمجرد دمج فرع العملاء فقط في botocore ، سنتمكن من التقاط إنشاء عناوين url الموقعة في CLI. بعد ذلك ، فإن مقدار العمل الرئيسي الذي يجب القيام به على جانب CLI هو إنشاء واجهة برمجة تطبيقات جيدة تعرض الميزة.
https://github.com/boto/botocore/issues/291 كان مغلقًا بالفعل في 23 يونيو: "الميزة متاحة حاليًا في botocore."
: +1: ستكون ميزة مفيدة بالفعل
+1
كما لاحظ kyleknap ، فإن أحد الأشياء التي يجب القيام بها هو تصميم واجهة برمجة تطبيقات جيدة لهذه الميزة.
أرى حالات الاستخدام التالية:
يعد "tmpGET" أمرًا سهلاً حقًا حيث أن المخرج الوحيد هو عنوان url والمدخل الوحيد هو الحاوية / المفتاح وانتهاء الصلاحية
تاريخ (وقت انتهاء الصلاحية).
يعتبر "tmpPOST" أكثر تعقيدًا حيث يتعين على المرء تحديد سياسة للنشر.
أحد الأسئلة التي يجب حلها هو ، أين يتم وضع هذه الإجراءات ، يبدو أن هناك بديلين:
aws s3
aws s3api
لن أتعامل اليوم مع "tmpPOST" الأكثر تعقيدًا وسأركز على "tmpGET" الأبسط
aws s3 tmpurl
سيكون مثل هذا الحل سهل التنفيذ إلى حد ما ، سيساعد في 80 ٪ من الواقع
حالات الاستخدام (انشر عنصرًا إلى AWS S3 وقدم عنوان url مؤقتًا للمشاركة
مع شخص ما).
يعتمد المفهوم على aws s3 ls
مع الاختلافات التالية:
--expires
لتحديد التاريخ والوقت اللذين تنتهي فيهما صلاحية عنوان url أو --expires-in
toأخشى أنه لا توجد حاليًا طريقة سهلة لإنشاء عنوان url tmp للحظة من الزمن ، لذا فهي أولية
سيقدم الإصدار الخيار --expires-in
مع القيمة الافتراضية 3600 ثانية.
من السهل جدًا إنشاء مجموعة من عناوين url الخاصة بـ tmp لعدد من العناصر الموجودة على AWS S3. يحفظ ملف
عقبة مع الحصول على القيم الدقيقة للحاوية / اسم المفتاح.
عيب هذا النهج القائم على aws s3 ls
هو أنه لا يمكن للمرء إنشاء عنوان url tmp لكائن ، والذي
غير موجود بعد.
على أي حال ، يمكن حل هذا لاحقًا عن طريق حل aws s3api
.
وضع لطيف جدا هناك. في حين أن المنشور هو شيء من شبه المؤكد أنه سيتم بناؤه حول معالجة جانب الخادم للبيانات المنشورة ، فإن حالات استخدام طريقة get عادة ما تكون أسهل كثيرًا. عندما تقول إن ذلك سيغطي معظم حالات الاستخدام ، فأنا أوافق بشدة.
قصدت الإضافة رغم ذلك ، لا أعتقد أن عنوان URL المؤقت يجب أن يكون له أي علاقة بتحديد موقع الملفات على s3. إذا أراد شخص ما إنشاء مجموعات كاملة من عناوين URL الموقعة ، فهذا منطق لا يحتاج cli إلى بذل المزيد من الجهد للالتفاف. البدائية tmpurl هي الحد الأدنى من المنتجات القابلة للتطبيق في ذهني.
لقد قمت بتنفيذ (ليس بالكامل) عنوان URL محدد مسبقًا لكائنات s3 في الفرع المحلي.
https://github.com/quiver/aws-cli/tree/s3-presigned-url
هذا غلاف رقيق مقابل botocore.generate_presigned_url
، وهو ليس جاهزًا للإنتاج بعد. كما لاحظ vlcinsky ، نحتاج إلى تصميم واجهة برمجة تطبيقات جيد مثل AWSCLI
. بمجرد إصلاح ذلك يمكنني تنفيذ ذلك.
شيء واحد ألاحظه هو أن generate_presigned_url
يتطلب معلمة client_method
، والتي تحدد واجهة برمجة تطبيقات S3 (على سبيل المثال get_object
) للتسجيل. في تطبيقي الحالي ، يتم عرضه للمستخدم ، ولكن سيكون من الأفضل أن يكون سهل الاستخدام ، مثل توفير أوامر فرعية مختلفة ( aws s3 geturl
، aws s3 uploadurl
) أو تبديل الخيارات ( --type upload
)
$ echo hello world > test.txt
$ aws s3 url s3://BUCKET/test.txt --client-method put_object --expires-in 180
https://BUCKET.s3.amazonaws.com/test.txt?AWSAccessKeyId=AKIAIXXXXXXXXXXXXXXX&Expires=1451449621&Signature=KgwO9lBx942fFvln0JW0NX7mKS0%3D
$ URL=`aws s3 url s3://BUCKET/test.txt --client-method put_object --expires-in 180`
$ curl -D - -X PUT --upload-file test.txt $URL
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
x-amz-id-2: /90B1axPysBg3P8kv8BlR8RoqdO1JfajCN5BM5/TxIT3VjGphKmyGX8EgCQEtCXYhuNkVne5+GM=
x-amz-request-id: 685F03CA6C84FAC0
Date: Wed, 30 Dec 2015 05:18:38 GMT
ETag: "6f5902ac237024bdd0c176cb93063dc4"
Content-Length: 0
Server: AmazonS3
$ aws s3 cp s3://BUCKET/test.txt -
hello world
$ URL=`aws s3 url s3://BUCKET/test.txt --client-method get_object --expires-in 180`
$ curl -D - -X GET $URL
HTTP/1.1 200 OK
x-amz-id-2: WuRokcBm9wnDMaRkD8kNeGijuKEzVp3eagi7JbpPXmmchEljsiP4wZX5w1TaeuK94n2526FGKMI=
x-amz-request-id: 1EBCAA7A691A577D
Date: Wed, 30 Dec 2015 05:20:14 GMT
Last-Modified: Wed, 30 Dec 2015 05:19:15 GMT
ETag: "6f5902ac237024bdd0c176cb93063dc4"
Accept-Ranges: bytes
Content-Type: binary/octet-stream
Content-Length: 12
Server: AmazonS3
hello world
ينشئ Python أعلاه عنوان url مثل: 'https: //
عندما أحاول تجعيد الملف ، أحصل على مشكلة في شهادة SSL: سلسلة شهادات غير صالحة
إذا قمت بالتجعيد باستخدام الخيار -k ، فيمكنني تجاوز ذلك ، لكنني أعرف أيضًا أنه إذا كان عنوان url يبدو مثل: ' https: // s3-
الشهادة صالحة ، هل هناك طريقة لتغيير عنوان url أو إصلاح آخر؟
شكرا،
جاري
على سبيل المثال: " https://s3-us-west-1.amazonaws.com/bucket/dir/dir/file "
التحديث ، باستخدام boto3 كان قادرًا على إنشاء عنوان url موقع بشكل صحيح.
+1
مثير للإعجاب - خلال 3 سنوات لم تحصل أداة CLI الرسمية على دعم لعنوان url الموقع ، على الرغم من وجودها في boto و
1+
+1
+1
أي تحديث على هذا؟ مندهش من أن هذا غير متوفر حتى الآن.
+1
لقد كتبت واحدًا كحل بديل ويعمل كما هو متوقع: https://github.com/gdbtek/aws-tools
مرحبا بالجميع ، شكرا على ردود الفعل. هذا شيء موجود على عملنا المتراكم. ليس لدي تواريخ محددة حتى الآن ، لكنني سأربط هذه المشكلة بمجرد أن يكون لدينا طلب سحب.
رائعة! شكرا!
هل من الممكن الحصول على عنوان url مخصص لمجلد s3 بأكمله؟ بما في ذلك واجهة ويب للتنقل عبر المجلد؟
tommeda غير ممكن. يرتبط عنوان url الموقع مسبقًا دائمًا بكائن واحد مخزن. ما تتحدث عنه مشابه لموقع الويب الثابت ولكن للتحكم في الوصول إليه (إذا كان يعتمد على AWS S3) ، يتعين على المرء كتابة بعض الوكيل. توجد محاولات قليلة بالفعل ، ولم يبد لي أي منها (أجريت بحثًا منذ حوالي عام) أمرًا سهلاً.
يمكنك دائمًا إنشاء صفحة ويب توفر واجهة لعناوين url الموقعة مسبقًا لكل كائن وتضمينها ، ثم وضع الواجهة في s3 وإرجاع عنوان url موقّع مسبقًا إلى الواجهة. ليس الأمر سهلًا تمامًا ، وستريد الواجهة أن تكون محددة الاستخدام
التعليق الأكثر فائدة
مثير للإعجاب - خلال 3 سنوات لم تحصل أداة CLI الرسمية على دعم لعنوان url الموقع ، على الرغم من وجودها في boto و