跳至內容

如何授予 Amazon S3 儲存貯體中特定資料夾的使用者存取權?

3 分的閱讀內容
0

我想將 AWS Identity and Access Management (IAM) 使用者限制只能存取 Amazon Simple Storage Service (Amazon S3) 中的特定資料夾。

解決方法

如果 IAM 使用者和儲存貯體屬於同一個 AWS 帳戶,則使用 IAM 政策授與使用者對儲存貯體資料夾的存取權。當您在 IAM 政策中授與存取權時,無需更新儲存貯體政策。但是,如果儲存貯體政策明確拒絕 IAM 使用者存取該資料夾,則必須更新儲存貯體政策。

如果 IAM 使用者和 S3 儲存貯體屬於不同的帳戶,則在 IAM 政策和儲存貯體政策中授與存取權。如需詳細資訊,請參閱如何授與其他 AWS 帳戶中的使用者權限,使其能將物件上傳到我的 Amazon S3 儲存貯體?

您可以在 IAM 政策中向單一或多個使用者授與存取權。對於多個使用者,此政策可以包括群組或 AWS IAM Identity Center ID。

授與單一使用者存取權

若要授與單一使用者僅存取其資料夾的權限,請建立 IAM 政策

政策範例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowStatement1",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowStatement2A",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/",
            "home/David"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement3",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/David/*"
          ]
        }
      }
    },
    {
      "Sid": "AllowStatement4A",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/David/*"
      ]
    }
  ]
}

在您的政策中,可包含以下陳述式:

  • 使用 AllowStatement1 允許使用者列出屬於其帳戶的儲存貯體,並在主控台上導覽至該儲存貯體。
  • 使用 AllowStatement2A 允許使用者列出 DOC-EXAMPLE-BUCKET 中的資料夾,並在主控台上導覽到該資料夾。
  • 使用 AllowStatement3 允許使用者列出 DOC-EXAMPLE-BUCKET/home/Username 資料夾中的內容。
  • 使用 AllowStatement4A 僅在 DOC-EXAMPLE-BUCKET/home/Username 資料夾中允許所有動作,例如讀取、寫入和刪除權限。

使用群組政策授與多個使用者存取權

使用政策變數為多個使用者建立群組政策。

使用 ${aws:username} 政策變數的儲存貯體政策範例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${aws:username}/*",
            "home/${aws:username}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${aws:username}/*"
      ]
    }
  ]
}

上述政策使用 aws:username 金鑰並傳回使用者的易記名稱,例如「Adele」或「David」。 當 aws:username 值對於特定 IAM 角色可能無效時,您也可以使用唯一 ID。如需詳細資訊,請參閱主體鍵值

IAM 使用者可以在父層級列出所有首碼,例如 DOC-EXAMPLE-BUCKET/。使用者還可以在任何圖形使用者介面 (GUI) 用戶端中導覽到他們的主目錄。如果您沒有在父層級提供 List 動作,那麼您必須使用命令列介面來存取指定的資料夾。

使用 AWS IAM Identity Center 向多個使用者授與存取權

您可以根據 AWS IAM Identity Center 主體控制對 S3 儲存貯體資料夾的存取權。IAM 身分中心目錄中的每個使用者都有一個唯一的使用者 ID。對想要限制資料夾存取權的每個使用者使用 ${identitystore:UserId} 政策變數。

建立 S3 資料夾時,請使用與 IAM Identity Center 目錄中使用者 ID 相對應的資料夾名稱。例如,使用者 John 具有唯一使用者 ID 1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c。為了管理 John,請在 S3 儲存貯體中為 John 建立一個名為 /home/1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c 的資料夾。若要尋找使用者的使用者 ID,請在 IAM 身分中心主控台上導覽至每個使用者,或使用 DescribeUser API。

以下範例 IAM 政策使用 ${identitystore:UserId} 變數:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGroupToSeeBucketListInTheConsole",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "AllowRootAndHomeListingOfCompanyBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "home/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Sid": "AllowListingOfUserFolder",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
      ],
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "home/${identitystore:UserId}/*",
            "home/${identitystore:UserId}"
          ]
        }
      }
    },
    {
      "Sid": "AllowAllS3ActionsInUserFolder",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${identitystore:UserId}/*"
      ]
    }
  ]
}

相關資訊

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

範例: 儲存貯體作業的 Amazon S3 條件金鑰

使用 IAM 政策模擬器進行 IAM 政策測試

AWS 官方已更新 10 個月前