使用使用者政策來控制對儲存貯體的存取 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用使用者政策來控制對儲存貯體的存取

此演練說明使用者許可與 Amazon S3 搭配運作的方式。在此範例中,您建立含有資料夾的儲存貯體。然後,您可以在 中建立 AWS Identity and Access Management IAM 使用者, AWS 帳戶 並對 Amazon S3 儲存貯體及其中的資料夾授予這些使用者增量許可。

儲存貯體與資料夾的基本概念

Amazon S3 資料模型是單層式結構:您建立儲存貯體,儲存貯體存放物件。子儲存貯體或子資料夾沒有階層,但您可以模擬資料夾階層。Amazon S3 主控台之類工具可以在儲存貯體中顯示這些邏輯資料夾和子資料夾。

此主控台會顯示名為 companybucket 的儲存貯體有三個資料夾:PrivateDevelopmentFinance 以及物件 s3-dg.pdf。此主控台使用物件名稱 (金鑰) 建立內含資料夾與子資料夾的邏輯階層。請考量下列範例:

  • 當您建立 Development 資料夾時,主控台會使用 Development/ 索引鍵建立物件。請注意結尾斜線的 (/) 分隔符號。

  • Projects1.xls 資料夾上傳名為 Development 的物件,此主控台會上傳該物件並為該物件提供 Development/Projects1.xls 索引鍵。

    在索引鍵中,Development字首/ 為分隔符號。Amazon S3 API 允許在其操作中使用字首與分隔符號。例如,您可以取得儲存貯體中所有包含特定字首與分隔符號之物件的清單。在主控台中,當您開啟 Development 資料夾時,主控台便會列出該資料夾中的物件。在以下範例中,Development 資料夾包含一個物件。

    主控台在 Development 儲存貯體中列出 companybucket 資料夾時會向 Amazon S3 傳送請求,並在請求中指定字首 Development 和分隔符號 /。此主控台的回應就像是電腦檔案系統中的資料夾清單。先前的範例顯示儲存貯體 companybucket 包含一個具有金鑰 Development/Projects1.xls 的物件。

主控台使用物件金鑰來推論邏輯階層。Amazon S3 沒有實體階層。Amazon S3 只具有以單層式檔案結構包含物件的儲存貯體。當您使用 Amazon S3 API 建立物件時,可以使用暗指邏輯階層的物件金鑰。如此演練所示範,您可以在建立物件的邏輯階層時,管理對個別資料夾的存取權。

在您開始前,確保您熟悉根層級儲存貯體內容的概念。假設您的 companybucket 儲存貯體包含下列物件:

  • Private/privDoc1.txt

  • Private/privDoc2.zip

  • Development/project1.xls

  • Development/project2.xls

  • Finance/Tax2011/document1.pdf

  • Finance/Tax2011/document2.pdf

  • s3-dg.pdf

這些物件金鑰會建立以 PrivateDevelopmentFinance 作為根層級資料夾,並以 s3-dg.pdf 作為根層級物件的邏輯階層。當您在 Amazon S3 主控台上選擇儲存貯體名稱時,根層級項目會出現。此主控台會將最上層的字首 (Private/Development/Finance/) 顯示為根層級資料夾。因為物件金鑰 s3-dg.pdf 沒有字首,所以會顯示為根層級項目。

演練摘要

您會在此演練中,建立其中含有三個資料夾 (PrivateDevelopmentFinance) 的儲存貯體。

您有兩名使用者:Alice 與 Bob。您希望 Alice 僅能夠存取 Development 資料夾,而您希望 Bob 僅能夠存取 Finance 資料夾。您希望讓 Private 資料夾內容保持未對外開放。在此逐步解說中,您會建立 IAM 使用者 (範例中的使用者名稱是 Alice 與 Bob) 並授予必要許可,以此來管理存取權。

IAM 也支援建立使用者群組和授予群組層級的許可,以套用至群組中的所有使用者。這可讓許可管理得更好。在此練習中,Alice 與 Bob 都需要一些一般許可。因此,您也會建立名為 Consultants 的群組,然後再於此群組中新增 Alice 與 Bob。您先將群組政策連接至該群組來授予許可。接著再將政策連接至特定的使用者,新增使用者專用的許可。

注意

此演練使用 companybucket 作為儲存貯體名稱、使用 Alice 與 Bob 作為 IAM 使用者,並使用 Consultants 作為群組名稱。因為 Amazon S3 要求全域唯一的儲存貯體名稱,所以您必須將儲存貯體名稱換成您建立的名稱。

準備演練

在此範例中,您會使用 AWS 帳戶 登入資料來建立 IAM 使用者。這些使用者在一開始都不具備任何許可。您對這些使用者遞增授予許可來執行特定的 Amazon S3 動作。為測試這些許可,您將使用每位使用者的憑證登入主控台。當您以 AWS 帳戶 擁有者身分遞增授予許可,並以 IAM 使用者身分測試許可時,每次都需要使用不同的登入資料登入和登出。您可以使用瀏覽器來執行此測試,但如果您能夠使用兩個不同的瀏覽器,便能加快此程序的速度。使用一個瀏覽器 AWS Management Console 使用您的 AWS 帳戶 登入資料連線至 ,並使用另一個瀏覽器與 IAM 使用者登入資料連線。

若要 AWS Management Console 使用您的 AWS 帳戶 登入資料登入 ,請前往 https://https://console.aws.amazon.com/IAM 使用者無法使用相同的連結登入。IAM 使用者必須使用已啟用 IAM 功能的登入頁面。帳戶擁有者可以將此連結提供給其使用者。

如需 IAM 的詳細資訊,請參閱《IAM 使用者指南》中的 AWS Management Console 登入頁面

為 IAM 使用者提供登入連結

  1. 登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  2. Navigation (導覽) 窗格中,選擇 IAM Dashboard (IAM 儀表板)

  3. 記下 IAM users sign in link: (IAM 使用者登入連結:) 下的 URL。將此連結提供給 IAM 使用者,讓他們使用 IAM 使用者名稱與密碼來登入主控台。

步驟 1:建立儲存貯體

在此步驟中,您會使用 AWS 帳戶 憑證來登入 Amazon S3 主控台、建立儲存貯體、將資料夾新增至儲存貯體,然後在每個資料夾中上傳一到兩份範例文件。

  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/:// 開啟 Amazon S3 主控台。

  2. 建立儲存貯體。

    如需逐步說明,請參閱 建立一般用途儲存貯體

  3. 將一份文件上傳到儲存貯體。

    此練習假設您在此儲存貯體的根層級中已有 s3-dg.pdf 文件。若要上傳不同的文件,請將其檔案名稱替換為 s3-dg.pdf

  4. 將名為 PrivateFinanceDevelopment 的三個資料夾新增至儲存貯體。

    如需建立資料夾的逐步說明,請參閱《Amazon Simple Storage Service 使用者指南》中的 在 Amazon S3 主控台中使用資料夾整理物件

  5. 在每個資料夾中上傳一到兩份文件。

    此練習假設您已在每個資料夾中上傳了一些文件,而且儲存貯體已有具有下列金鑰的物件:

    • Private/privDoc1.txt

    • Private/privDoc2.zip

    • Development/project1.xls

    • Development/project2.xls

    • Finance/Tax2011/document1.pdf

    • Finance/Tax2011/document2.pdf

    • s3-dg.pdf

    如需逐步說明,請參閱 上傳物件

步驟 2:建立 IAM 使用者與群組

現在,請使用 IAM 主控台,將 Alice 與 Bob 這兩位 IAM 使用者新增至 AWS 帳戶。如需逐步說明,請參閱《IAM 使用者指南》中的在 AWS 帳戶中建立 IAM 使用者

另外建立一個名為 Consultants 的管理群組。然後將這兩名使用者新增至群組。如需逐步說明,請參閱建立 IAM 使用者群組

警告

當您新增使用者與群組時,請勿指派任何會將許可授予這些使用者的政策。這些使用者在一開始不具有任何許可。您將在下列區段中授予額外的許可。您必須先確定已為這些 IAM 使用者指派密碼。您將使用這些使用者憑證來測試 Amazon S3 動作,並確認許可是否如預期般運作。

如需建立新 IAM 使用者的逐步說明,請參閱《IAM 使用者指南》中的在 AWS 帳戶中建立 IAM 使用者。為此演練建立使用者時,請選取 AWS Management Console 存取,並清除程式化存取

如需建立管理群組的逐步說明,請參閱《IAM 使用者指南》中的建立您的第一個 IAM 管理員使用者和群組

步驟 3:確認 IAM 使用者沒有許可

如果您使用兩個瀏覽器,您現在可以使用第二個瀏覽器,以其中一個 IAM 使用者憑證來登入主控台。

  1. 使用 IAM 使用者登入連結 (請參閱「為 IAM 使用者提供登入連結」),使用任一組 IAM 使用者憑證登入 AWS Management Console 。

  2. 開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

    確認主控台訊息會通知您存取被拒。

您現在可以將額外的許可授予使用者。首先,您要連接群組政策,授予兩位使用者一些必要的許可。

步驟 4:授予群組層級的許可

您希望使用者都能執行下列動作:

  • 列出父帳戶擁有的所有儲存貯體。要做到這一點,Bob 與 Alice 必須具備 s3:ListAllMyBuckets 動作的許可。

  • 列出 companybucket 儲存貯體中的根層級項目、資料夾與物件。要做到這一點,Bob 與 Alice 必須具備可以對 s3:ListBucket 儲存貯體執行 companybucket 動作的許可。

首先,您建立會授予這些許可的政策,然後將該政策連接至 Consultants 群組。

步驟 4.1:授予列出所有儲存貯體的許可

在此步驟中,您將建立受管政策 (可將使用者基本許可授予使用者,以便其能列出父帳戶擁有的所有儲存貯體)。接著,您將政策連接至 Consultants 群組。當您將受管政策連接至使用者或群組時,即表示您授予該使用者或群組許可,讓他們可取得父 AWS 帳戶擁有之儲存貯體的清單。

  1. 登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

    注意

    由於您要授予使用者許可,請使用您的 AWS 帳戶 憑證來登入,不要以 IAM 使用者身分登入。

  2. 建立受管政策。

    1. 在左邊的導覽窗格中,選擇 Policies (政策),然後選擇 Create policy (建立政策)

    2. 請選擇 JSON 索引標籤。

    3. 複製下列存取政策,並貼入政策的文字欄位中。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": ["s3:ListAllMyBuckets"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] } ] }

      政策是 JSON 文件。在此文件中,Statement 是物件陣列,每一個物件均使用一組名稱值對來描述許可。前面的政策在描述一項特定的許可。Action 會指定存取類型。在政策中,s3:ListAllMyBuckets 是預先定義的 Amazon S3 動作。此動作涵蓋 Amazon S3 GET Service 操作,此操作會傳回已驗證的傳送者擁有的所有儲存貯體清單。Effect 元素值決定要允許或拒絕特定許可。

    4. 選擇 Review Policy (檢閱政策)。在下一個頁面中,於 Name (名稱) 欄位輸入 AllowGroupToSeeBucketListInTheConsole,接著選擇 Create policy (建立政策)

      注意

      Summary (摘要) 項目會顯示訊息,指出該政策未授予任何許可。就本演練為例,您可放心地忽略此訊息。

  3. 將您建立的 AllowGroupToSeeBucketListInTheConsole 受管政策連接至 Consultants 群組。

    如需連接受管政策的逐步說明,請參閱《IAM 使用者指南》中的新增和移除 IAM 身分許可

    您在 IAM 主控台中將政策文件連接至 IAM 使用者和群組。您希望這兩個使用者都能夠列出儲存貯體,因此將該政策連接至該群組。

  4. 測試許可。

    1. 使用 IAM 使用者登入連結 (請參閱 為 IAM 使用者提供登入連結),利用任一組 IAM 使用者憑證來登入主控台。

    2. 開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

      主控台現在應會列出所有儲存貯體,但不會列出任何儲存貯體中的物件。

步驟 4.2:允許使用者列出儲存貯體的根層級內容

接下來,我們允許所有使用者在 Consultants 群組內列出根層級的 companybucket 儲存貯體項目。當使用者在 Amazon S3 主控台上選擇公司儲存貯體時,使用者可以看到儲存貯體中的根層級項目。

注意

此範例使用 companybucket 進行說明。您必須使用您建立的儲存貯體名稱。

若要了解您選擇儲存貯體名稱時主控台傳送給 Amazon S3 的請求、Amazon S3 傳回的回應,以及主控台如何解譯回應,請更仔細地查看流程。

當您選擇儲存貯體名稱時,主控台會將 GET 儲存貯體 (列出物件) 請求傳送給 Amazon S3。此要求包含下列參數:

  • 其值為空字串的 prefix 參數。

  • 其值為 delimiter/ 參數。

下列是範例要求。

GET ?prefix=&delimiter=/ HTTP/1.1 Host: companybucket.s3.amazonaws.com Date: Wed, 01 Aug 2012 12:00:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=

Amazon S3 傳回包含下列 <ListBucketResult/> 元素的回應。

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix></Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>s3-dg.pdf</Key> ... </Contents> <CommonPrefixes> <Prefix>Development/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Finance/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Private/</Prefix> </CommonPrefixes> </ListBucketResult>

金鑰 s3-dg.pdf 物件不含斜線 (/) 分隔符號,而 <Contents> 會在 Amazon S3 元素中傳回金鑰。不過,範例儲存貯體中的所有其他金鑰都包含 / 分隔符號。Amazon S3 將這些金鑰分組,並針對每個不同的字首值 <CommonPrefixes>Development/Finance/,傳回一個 Private/ 元素,這是從這些金鑰開頭到第一次出現指定的 / 分隔符號為止的子字串。

此主控台會解譯此結果,並將根層級項目顯示為三個資料夾與一個物件金鑰。

如果 Bob 或 Alice 開啟 Development 資料夾,主控台會將 GET 儲存貯體 (列出物件) 請求傳送給 Amazon S3,其中 prefixdelimiter 參數會設為下列值:

  • prefix 參數,值為 Development/

  • delimiter 參數,值為「/」。

Amazon S3 在回應中會傳回開頭為指定字首的物件金鑰。

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix>Development</Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>Project1.xls</Key> ... </Contents> <Contents> <Key>Project2.xls</Key> ... </Contents> </ListBucketResult>

此主控台會顯示物件金鑰。

現在重新授予使用者許可,以列出根層級的儲存貯體項目。若要列出儲存貯體內容,使用者需要呼叫 s3:ListBucket 動作的許可,如下列政策陳述式所示。為了確保使用者只會看到根層級內容,您新增條件來要求使用者必須在請求中指定空的 prefix,亦即不允許使用者按兩下任何根層級資料夾。最後,您會再新增一項條件,要求使用者要求中必須包含值為「delimiter」的 / 參數,才能要求資料夾的存取權。

{ "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }

當您在 Amazon S3 主控台上選擇儲存貯體時,主控台會先傳送 GET 儲存貯體位置請求,以尋找部署儲存貯體 AWS 區域 的 。接著,主控台會使用儲存貯體的區域專用端點,傳送 GET 儲存貯體 (列出物件) 請求。因此,使用者若要使用主控台,您必須授予 s3:GetBucketLocation 動作的許可,如下列政策陳述式所示。

{ "Sid": "RequiredByS3Console", "Action": ["s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }
允許使用者列出根層級儲存貯體內容
  1. 登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

    使用您的 AWS 帳戶 登入資料,而不是 IAM 使用者的登入資料來登入 主控台。

  2. 以下列政策取代連接至 Consultants 群組的現有 AllowGroupToSeeBucketListInTheConsole 受管政策。此政策同樣也會允許 s3:ListBucket 動作。記得將政策 Resource 中的 companybucket 取代為您的儲存貯體名稱。

    如需逐步說明,請參閱《IAM 使用者指南》中的編輯 IAM 政策。執行逐步說明時,請務必遵循這些步驟,將您的變更套用到連接該政策的所有主體實體。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } } ] }
  3. 測試更新後的許可。

    1. 使用 IAM 使用者登入連結 (請參閱為 IAM 使用者提供登入連結) 登入 AWS Management Console。

      開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

    2. 選擇您建立的儲存貯體,且主控台會顯示根層級儲存貯體項目。因為您尚未獲得指派這些許可,所以當您在儲存貯體中選擇任何資料夾時,會看不到資料夾內容。

當使用者使用 Amazon S3 主控台時,此測試會成功。在主控台上選擇儲存貯體時,主控台實作會傳送請求,該請求會包含值為空字串的 prefix 參數,以及其值為「delimiter」的 / 參數。

步驟 4.3:群組政策摘要

您新增的群組政策最終目的是將下列最低許可授予 IAM 使用者 Alice 與 Bob:

  • 列出父帳戶擁有的所有儲存貯體。

  • 查看 companybucket 儲存貯體中的根層級項目。

即使如此,使用者能執行的操作仍然有限。接下來我們要授予使用者專用的許可,如下所示:

  • 允許 Alice 在 Development 資料夾中取得物件與將物件放置到其中。

  • 允許 Bob 在 Finance 資料夾中取得物件與將物件放置到其中。

對於使用者專用的許可,您應將政策指派給特定使用者而非群組。在下列區段中,您將授予 Alice 在 Development 資料夾中工作的許可。您可以重複這些步驟,將類似的許可授予 Bob,以便在 Finance 資料夾中工作。

步驟 5:將特定許可授予 IAM 使用者 Alice

您現在要將額外的許可授予 Alice,讓她可以看到 Development 資料夾的內容,並從該資料夾取得物件與將物件放置到其中。

步驟 5.1:對 IAM 使用者 Alice 授予許可來列出 Development 資料夾內容

Alice 若要能夠列出 Development 資料夾內容,您必須對使用者 Alice 套用可以授予 companybucket 儲存貯體之 s3:ListBucket 動作的政策,但前提是請求中必須包含字首 Development/。您只想將此政策套用到使用者 Alice,因此會使用內嵌政策。如需內嵌政策的詳細資訊,請參閱《IAM 使用者指南》中的受管政策和內嵌政策

  1. 登入 AWS Management Console 並開啟位於 https://https://console.aws.amazon.com/iam/ 的 IAM 主控台。

    使用您的 AWS 帳戶 登入資料,而不是 IAM 使用者的登入資料來登入 主控台。

  2. 建立內嵌政策,將列出 Development 資料夾內容的許可授予使用者 Alice。

    1. 在左側導覽窗格中,選擇 Users (使用者)。

    2. 選擇使用者名稱 Alice

    3. 在使用者詳細資訊頁面上,選擇 Permissions (許可) 索引標籤,然後選擇 Add inline policy (新增內嵌政策)

    4. 請選擇 JSON 索引標籤。

    5. 複製下列政策,並將其貼入政策的文字欄位中。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } } ] }
    6. 選擇 Review Policy (檢閱政策)。在下一個頁面中,於 Name (名稱) 欄位輸入一個名稱,接著選擇 Create policy (建立政策)

  3. 測試 Alice 的許可變更:

    1. 使用 IAM 使用者登入連結 (請參閱為 IAM 使用者提供登入連結) 登入 AWS Management Console。

    2. 開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

    3. 在 Amazon S3 主控台上,確認 Alice 可以看到儲存貯體中 Development/ 資料夾中的物件清單。

      當使用者選擇 /Development 資料夾來查看其中的物件清單時,Amazon S3 主控台會將含有字首 ListObjects/Development 請求傳送給 Amazon S3。因為使用者獲許可查看字首為 Development 和分隔符號為 / 的物件清單,所以 Amazon S3 會傳回金鑰前綴為 Development/ 的物件清單,而主控台會顯示該清單。

步驟 5.2:對 IAM 使用者 Alice 授予許可在 Development 資料夾中取得和放置物件

Alice 若要能從 Development 資料夾取得物件與將物件放置到其中,就需要呼叫 s3:GetObjects3:PutObject 動作的許可。下列政策陳述式可以授予這些許可,但前提是要求中必須包含值為 prefixDevelopment/ 參數。

{ "Sid":"AllowUserToReadWriteObjectData", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }

  1. 登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/s3/ 開啟 Amazon S3 主控台。

    使用您的 AWS 帳戶 登入資料,而不是 IAM 使用者的登入資料來登入 主控台。

  2. 編輯您在前一個步驟中建立的內嵌政策。

    1. 在左側導覽窗格中,選擇 Users (使用者)。

    2. 選擇使用者名稱 Alice。

    3. 在使用者詳細資訊頁面上,選擇 Permissions (許可) 標籤,然後展開 ​Inline Policies (內嵌政策) 區段。

    4. 在前一個步驟中建立的政策名稱旁,選擇 Edit Policy (編輯政策)

    5. 複製下列政策並貼到政策文字欄位,以取代現有政策。

      { "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] } ] }
  3. 測試更新後的政策:

    1. 使用 IAM 使用者登入連結 (請參閱為 IAM 使用者提供登入連結) 登入 AWS Management Console。

    2. 開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

    3. 在 Amazon S3 主控台上,確認 Alice 現在已可以在 Development 資料夾中新增和下載物件。

步驟 5.3:對 IAM 使用者 Alice 明確拒絕儲存貯體中任何其他資料夾的許可

使用者 Alice 現在可以列出 companybucket 儲存貯體的根層級內容,也可以從 Development 資料夾取得物件與將物件放置到其中。若您確實想要限縮存取許可,可以明確拒絕 Alice 存取儲存貯體中的任何其他資料夾。如有任何其他政策 (儲存貯體政策或 ACL) 授予 Alice 存取儲存貯體中的任何其他資料夾,則這項明確拒絕將會覆寫這些許可。

您可以將下列陳述式新增至使用者 Alice 政策,以要求 Alice 傳送給 Amazon S3 的所有請求都包含 prefix 參數,值可以是 Development/* 或空字串。

{ "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } }

Condition 區塊中有兩個條件式表達式。這些條件式表達式的結果使用了邏輯 AND 加以合併。當這兩項條件皆為 true 時,合併後條件的結果也會是 true。因為在此政策中的 EffectDeny,當 Condition 評估結果為 true 時,使用者將無法執行指定的 Action

  • Null 條件式表達式會確定來自 Alice 的要求包含了 prefix 參數。

    prefix 參數必須能夠存取資料夾。如果您傳送的請求不含 prefix 參數,Amazon S3 會傳回所有物件金鑰。

    若要求中包含了 null 值的 prefix 參數,表達式會評估為 true,因此整個 Condition 也會評估為 true。您必須允許 prefix 參數使用空字串作為值。從前面的討論,回想那允許 null 字串讓 Alice 可以像先前討論主控台時執行的操作一樣,擷取根層級儲存貯體項目。如需詳細資訊,請參閱步驟 4.2:允許使用者列出儲存貯體的根層級內容

  • StringNotLike 條件式表達式可確保若指定 prefix 參數的值,而非指定 Development/*,要求會失敗。

遵循以上區段中的步驟,並再次更新您為使用者 Alice 建立的內嵌政策。

複製下列政策並貼到政策文字欄位,以取代現有政策。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }, { "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } } ] }

步驟 6:將特定許可授予 IAM 使用者 Bob

現在,您要授予 Bob 對 Finance 資料夾的許可。請遵循您稍早用來為 Alice 授予許可的步驟,但將 Development 資料夾置換成 Finance 資料夾。如需逐步說明,請參閱 步驟 5:將特定許可授予 IAM 使用者 Alice

步驟 7:保護 Private 資料夾

在此範例中,您只有兩名使用者。您授予了群組層級所有必要的基本許可,並只有在您確實需要授予個別使用者層級的許可時,才授予使用者層級許可。此方法可將管理許可的工作降至最低。隨著使用者人數增加,管理許可可能會愈來愈麻煩。例如,我們不希望讓此範例中的任何使用者存取 Private 資料夾內容。如何確定未意外地授予使用者 Private 資料夾的許可? 您新增政策明確拒絕存取該資料夾。明確拒絕會覆寫其他任何許可。

若要確定 Private 資料夾未對外開放,可以在群組政策中新增下列兩個拒絕陳述式:

  • 新增下列陳述式,明確拒絕任何對 Private 資料夾資源執行的動作 (companybucket/Private/*)。

    { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }
  • 要求中如有指定 Private/ 字首,您也可以拒絕列出物件動作的許可。在主控台上,如果 Bob 或 Alice 開啟 Private 資料夾,此政策會導致 Amazon S3 傳回錯誤回應。

    { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } }

以更新後包含前述拒絕陳述式的政策取代 Consultants 群組政策。套用更新後的政策後,群組中將無任何使用者可以存取儲存貯體中的 Private 資料夾。

  1. 登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/:// 開啟 Amazon S3 主控台。

    使用您的 AWS 帳戶 登入資料,而不是 IAM 使用者的登入資料來登入 主控台。

  2. 以下列政策取代連接至 Consultants 群組的現有 AllowGroupToSeeBucketListInTheConsole 受管政策。請務必將政策中的 companybucket 取代為您的儲存貯體名稱。

    如需說明,請參閱《IAM 使用者指南》中的編輯客戶管理政策。執行逐步說明時,請務必遵循指示,將您的變更套用到獲指派該政策的所有主體實體。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{"s3:prefix":[""]} } }, { "Sid": "RequireFolderStyleList", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringNotEquals":{"s3:delimiter":"/"} } }, { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }, { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } } ] }

步驟 8:清理

若要清除,請開啟 IAM 主控台並移除使用者 Alice 和 Bob。如需逐步說明,請參閱《IAM 使用者指南》中的刪除 IAM 使用者

為確保您未因儲存而被收費,您也應刪除您為此練習建立的物件與儲存貯體。

相關資源