باکت پالیسی
نکتهی مهم: توجه داشته باشید که در صورت تنظیم پالیسی به حالت عمومی، دادههای شما از طریق اینترنت قابل دسترسی خواهند بود.
در این مستند با پالیسیهایی که میتوانید روی سرویس استوریج ستون اعمال کنید آشنا میشوید.
میتوان با دستور get-bucket-policy قاعدهی دسترسی یا policy که برای یک سبد تعریف شده را دریافت کرد. (برای آشنایی بیشتر با ابزار aws به راهنمای کار با cli مراجعه کنید.)
قاعدهی دسترسی در فرمت json تعریف میشود که در رابطه با آن در ادامه توضیح خواهیم داد. به صورت پیشفرض هیچ قاعدهی دسترسی برای سبدها تنظیم نشده است.
در صورتی که در هریک از مواردی که میخواهید پیکربندی کنید به شناسهی فضای کاری (Workspace ID) و یا شناسهی کاربر (User ID) نیاز داشتید به این صورت میتوانید آن را دریافت کنید:
شناسهی فضای كاری: برای دریافت شناسهی فضای کاری وارد قسمت پروفایل کاربری شوید. در بخش فضاهای کاری میتوانید شناسهی مربوط به فضای کاری مورد نظر خود را پیدا کنید.
شناسهی کاربر: برای دریافت شناسهی کاربر وارد سرویس IAM شوید. در بخش کاربرها ابتدا کاربر مورد نظر را جستجو کنید. با کلیک روی نام کاربر میتوانید شناسهی مربوط به آن را در صفحهی باز شده ببینید.
میتوان با دستور put-bucket-policy برای یک سبد یک قاعدهی دسترسی یا policy تعریف کرد.
نکته: تنظیم قاعدهی جدید، قواعد قبلی را از بین میبرد. بنابراین قبل از استفاده از دستور put-bucket-policy با استفاده از دستور get-bucket-policy، قواعد موجود را دریافت کرده و در صورت نیاز قواعد موجود را در فایل جدید وارد کنید.
تنظیمات قواعد دسترسی در قالب یک فایل json و به عنوان ورودی به دستور بالا داده میشوند. در ادامه چند مثال از قواعد پرکاربرد را مرور میکنیم.
ساختار کلی یک باکت پالیسی به این شکل است:
ساختار user میتواند به این صورت باشد برای مشخص کردن یک کاربر از یک فضای کاری:
همچنین میتوان برای مشخص کردن تمام کاربران یک فضای کاری از این ساختار استفاده کرد:
در قواعد دسترسی ستون میتوان از این عملیات استفاده کرد:
- دسترسی مربوط به اشیا:
s3:GetObject
s3:PutObject
s3:DeleteObject
s3:GetObjectVersion
s3:DeleteObjectVersion
- دسترسی لیست کردن اشیای باکت:
s3:ListBucket
- دسترسی به تنظیمات قواعد دسترسی:
s3:GetBucketPolicy
s3:PutBucketPolicy
s3:DeleteBucketPolicy
- دسترسی به تنظیمات ACL:
s3:GetBucketAcl
s3:PutBucketAcl
s3:GetObjectAcl
s3:PutObjectAcl
- دسترسی به تنظیمات چرخهی حیات اشیا:
s3:GetLifecycleConfiguration
s3:PutLifecycleConfiguration
- دسترسی به تنظیمات CORS:
s3:GetBucketCORS
s3:PutBucketCORS
- سایر:
s3:AbortMultipartUpload
s3:CreateBucket
s3:DeleteBucket
s3:DeleteBucketWebsite
s3:DeleteReplicationConfiguration
s3:GetAccelerateConfiguration
s3:GetBucketLocation
s3:GetBucketLogging
s3:GetBucketNotification
s3:GetBucketRequestPayment
s3:GetBucketTagging
s3:GetBucketWebsite
s3:GetObjectTorrent
s3:GetObjectVersionAcl
s3:GetObjectVersionTorrent
s3:GetReplicationConfiguration
s3:ListAllMyBuckets
s3:ListBucketMultipartUploads
s3:ListMultipartUploadParts
s3:PutAccelerateConfiguration
s3:PutBucketLogging
s3:PutBucketNotification
s3:PutBucketRequestPayment
s3:PutBucketTagging
s3:PutBucketVersioning
s3:PutBucketWebsite
s3:PutObjectVersionAcl
s3:PutReplicationConfiguration
s3:RestoreObject
برای تعریف کردن قسمتی از یک باکت باید با این عبارت شروع کنیم:
و در ادامه میتوانیم اسم باکت و prefix مورد نظر را قرار دهیم:
در هر قسمت از عبارت بالا میتوانیم عبارت را قطع کرده و از * استفاده کنیم که به معنای هر مقداری است که در ادامه عبارت میآید. به عنوان مثال عبارات زیر قابل قبول هستند:
مقادیر زیر برای condition type قابل استفاده است (غیر از قسمت Null به بقیه مقادیر میتوان پسوند IfExists نیز اضافه کرد):
- string:
StringEquals
StringNotEquals
StringEqualsIgnoreCase
StringNotEqualsIgnoreCase
StringLike قابلیت دریافت regx
StringNotLike
- Numeric
NumericEquals
NumericNotEquals
NumericLessThan
NumericLessThanEquals
NumericGreaterThan
NumericGreaterThanEquals
- Date
DateEquals
DateNotEquals
DateLessThan
DateLessThanEquals
DateGreaterThan
DateGreaterThanEquals
- Bool
Bool
- Binary
BinaryEquals
- Ip Address
IpAddress
NotIpAddress
- Null
Null
لیست مقادیری که میتوانیم برای condition key استفاده کنیم:
aws:CurrentTime
aws:EpochTime
aws:PrincipalType
aws:Referer
aws:SourceIp
aws:UserAgent
aws:username
ضمنا میتوان از این مقادیر در قسمت condition value نیز استفاده کرد. به این صورت که باید آن داخل {} قرار داد و قبل از آن علامت $ قرار گیرد. به عنوان مثال:
مثال زیر دسترسی خواندن را برای تمام سبد غیر از یک پوشهی خاص باز میکند. (آبجکتهای داخل پوشهی مورد نظر برای هیچ کاربری قابل خواندن نخواهد بود.)
اگر میخواهید به یک ip خاص دسترسیهای متفاوتی بدهید مثلا به دلایل امنیتی فقط به ipهای cdn دسترسی بدهید این قابلیت به شما کمک میکند.
به عتوان مثال، دستور زیر باعث میشود هیچ کاربری نتواند روی objectهای درون باکتهای مشخصشده عملیاتی را اجرا کند مگر اینکه درخواستها از بازهی ipهای مشخصشده ارسال شده باشند.