توجه داشته باشید که در صورت تنظیم پالیسی به حالت عمومی، دادههای شما از طریق اینترنت قابل دسترسی خواهند بود.
نکته
امکان Public کردن باکت از طریق پنل وجود ندارد؛ اما همچنان میتوانید باکتهای Public قدیمی را در صورت نیاز Private کنید. در حال حاضر مدیریت کامل دسترسیها از طریق Bucket Policy انجام میشود.
توجه کنید که تغییر دسترسی باکت به تنهایی باعث private شدن آبجکتها نمیشود و اگر آبجکتهایی بهصورت public آپلود شدهاند، باید آنها را private کنید یا با استفاده از Bucket Policy، بهصورت صریح (explicit deny) دسترسی آنها را مسدود کنید.
در مثال زیر، به تمام کاربران احراز هویتشده (authenticated users) اجازه GetObject و PutObject داده شده است، اما بهصورت صریح (explicit deny) دسترسی به یک مسیر خاص از آبجکتها مسدود شده است:
در این مستند با پالیسیهایی که میتوانید روی سرویس استوریج ستون اعمال کنید آشنا میشوید.
مشاهدهی تنظیمات موجود
میتوان با دستور get-bucket-policy قاعدهی دسترسی یا policy که برای یک سبد تعریف شده را دریافت کرد. (برای آشنایی بیشتر با ابزار aws به راهنمای کار با cli مراجعه کنید.)
قاعدهی دسترسی در فرمت json تعریف میشود که در رابطه با آن در ادامه توضیح خواهیم داد. به صورت پیشفرض هیچ قاعدهی دسترسی برای سبدها تنظیم نشده است.
در صورتی که در هریک از مواردی که میخواهید پیکربندی کنید به شناسهی فضای کاری (Workspace ID) و یا شناسهی کاربر (User ID) نیاز داشتید به این صورت میتوانید آن را دریافت کنید:
شناسهی فضای كاری: برای دریافت شناسهی فضای کاری وارد قسمت پروفایل کاربری شوید. در بخش فضاهای کاری میتوانید شناسهی مربوط به فضای کاری مورد نظر خود را پیدا کنید.
شناسهی کاربر: برای دریافت شناسهی کاربر وارد سرویس IAM شوید. در بخش کاربرها ابتدا کاربر مورد نظر را جستجو کنید. با کلیک روی نام کاربر میتوانید شناسهی مربوط به آن را در صفحهی باز شده ببینید.
تغییر تنظیمات
میتوان با دستور put-bucket-policy برای یک سبد یک قاعدهی دسترسی یا policy تعریف کرد.
نکته: تنظیم قاعدهی جدید، قواعد قبلی را از بین میبرد. بنابراین قبل از استفاده از دستور put-bucket-policy با استفاده از دستور get-bucket-policy، قواعد موجود را دریافت کرده و در صورت نیاز قواعد موجود را در فایل جدید وارد کنید.
تنظیمات قواعد دسترسی در قالب یک فایل json و به عنوان ورودی به دستور بالا داده میشوند. در ادامه چند مثال از قواعد پرکاربرد را مرور میکنیم.
ساختار پالیسی
ساختار کلی یک باکت پالیسی به این شکل است:
{"Version" : "2008-10-17" | "2012-10-17",اختیاری. نسخه تنظیمات باکت پالیسی که میتواند یکی از دو مقدار بالا باشد."id": "string",اختیاری. شناسه پالیسی"Statement": [ <statement>, <statement>, ... ]قواعد مربوط به دسترسی. ساختار هر statement در ادامه توضیح داده شده است.}
ساختار قاعده یا Statement
{"Sid": "string",اختیاری. شناسه این عبارت"Effect": "Allow" | "Deny",مجاز یا غیر مجاز بودن عملیات تعریف شده در این قاعده"Principal"|"NotPrincipal": "*" | <principal map>,در این قسمت مشخص میکنیم که چه کسانی مشمول این عبارت میشوند (Principal) یا چه کسانی استثناء هستند و مشمول این قاعده نمیشوند (NotPrincial).مقدار آن یا * به معنی همه است یا با ساختار princial map که در پایین میآید مشخص میشود.توجه: کاربرانی که میتوانند این قسمت تعریف شوند محدود به کاربران فضای کاری شما نیستند. به عنوان مثال * یعنی تمام کاربران در تمام فضاهای کاری."Action": "*" | [<action>, <action>, ... ],عملیاتی که در این قاعده تعریف میشوند. مقدار میتواند * به معنی همه باشد یا یک یا چند عملیات ذکر شود که لیست عملیاتی که میتوان در این قسمت استفاده کرد در ادامه میآید."Resource"|"NotResource": "*" | <resource> | [<resource>, <resource>, ...],این قسمت تعیین میکند که چه مجموعهای از آبجکتها مشمول این قاعده یا از آن مستثنی هستند.مقدار آن یا * به معنی همه است یا با ساختار resource که در پایین میآید مشخص میشود."Condition": "*" | { <condition map> }اختیاری. در این قسمت میتوانیم شرایطی را تعیین کنیم که تنها تحت آن شرایط این قاعده فعال باشد. ساختار condition map و شرایطی که میتوان استفاده کرد در ادامه توضیح داده خواهد شد.}
ساختار principal map
{"AWS": "*" | <user> | [<user>, <user>, ...]ساختار user در پایین توضیح داده شده است.}
ساختار user میتواند به این صورت باشد برای مشخص کردن یک کاربر از یک فضای کاری:
"arn:aws:iam:::user/WORKSPACE_ID:USER_ID"شناسه فضای کاری مورد نظر بهجای WORKSPACE_ID و شناسه کاربر مورد نظر در آن فضای کاری بهجای USER_ID قرار میگیرد.
همچنین میتوان برای مشخص کردن تمام کاربران یک فضای کاری از این ساختار استفاده کرد:
"arn:aws:iam:::user/WORKSPACE_ID"
لیست عملیات قابل استفاده در قواعد
در قواعد دسترسی ستون میتوان از این عملیات استفاده کرد:
برای تعریف کردن قسمتی از یک باکت باید با این عبارت شروع کنیم:
arn:aws:s3:::
و در ادامه میتوانیم اسم باکت و prefix مورد نظر را قرار دهیم:
arn:aws:s3:::BUCKET_NAME/PREFIX/*
در هر قسمت از عبارت بالا میتوانیم عبارت را قطع کرده و از * استفاده کنیم که به معنای هر مقداری است که در ادامه عبارت میآید. به عنوان مثال عبارات زیر قابل قبول هستند:
لیست مقادیری که میتوانیم برای condition key استفاده کنیم:
condition key
aws:CurrentTime
aws:EpochTime
aws:PrincipalType
aws:Referer
aws:SourceIp
aws:UserAgent
aws:username
ضمنا میتوان از این مقادیر در قسمت condition value نیز استفاده کرد. به این صورت که باید آن داخل {} قرار داد و قبل از آن علامت $ قرار گیرد. به عنوان مثال:
"${aws:username}"مثال از قسمت condition:"Condition": { "NotIpAddress": { "aws:SourceIp": ["10.0.2.90"] }}
اگر میخواهید به یک ip خاص دسترسیهای متفاوتی بدهید مثلا به دلایل امنیتی فقط به ipهای cdn دسترسی بدهید این قابلیت به شما کمک میکند.
به عتوان مثال، دستور زیر باعث میشود هیچ کاربری نتواند روی objectهای درون باکتهای مشخصشده عملیاتی را اجرا کند مگر اینکه درخواستها از بازهی ipهای مشخصشده ارسال شده باشند.