儲存貯體政策範例 - Amazon Simple Storage Service

儲存貯體政策範例

本節顯示儲存貯體政策之一般使用案例的一些範例。這些政策使用資源值中的 bucketexamplebucket 字串。若要測試這些政策,請使用您的儲存貯體名稱取代這些字串。如需儲存貯體政策的資訊,請參閱 使用儲存貯體政策。如需存取政策語言的詳細資訊,請參閱 Amazon S3 中的政策和許可

儲存貯體政策是以資源為基礎的政策,您可以使用這些政策來將存取許可授予儲存貯體及其中物件。只有儲存貯體擁有者可建立政策與儲存貯體的關聯。連接到儲存貯體的許可會套用至儲存貯體擁有者帳戶擁有的所有儲存貯體物件。這些許可不適用於其他 AWS 帳戶 擁有的物件。

預設情況下,當另一個 AWS 帳戶 會將物件上傳到您的 S3 儲存貯體時,該帳戶 (物件寫入者) 擁有物件、擁有其存取權,並且可以透過 ACL 授權其他使用者存取該物件。您可以使用「物件擁有權」變更此預設行為,以便停用 ACL,並且您身為儲存貯體擁有者,自動擁有儲存貯體中的每個物件。因此,資料的存取控制是以政策為基礎,例如 IAM 政策、S3 儲存貯體政策、Virtual Private Cloud (VPC) 端點政策和 AWS Organizations 服務控制政策 (SCP)。如需更多詳細資訊,請參閱 控制物件的擁有權並停用儲存貯體的 ACL

如需儲存貯體政策的詳細資訊,請參閱「使用儲存貯體政策」。

注意

儲存貯體政策的大小限制為 20 KB。

您可以使用 AWS 政策產生器,為 Amazon S3 儲存貯體建立儲存貯體政策。接著,您就可以透過 Amazon S3 主控台、幾個第三方工具或透過您的應用程式,利用產生的文件來設定儲存貯體政策。

重要

使用 Amazon S3 主控台來測試許可時,您需要授予主控台所需的其他許可:s3:ListAllMyBucketss3:GetBucketLocations3:ListBucket 許可。如需授予使用者許可並使用主控台測試的演練範例,請參閱「使用使用者政策來控制對儲存貯體的存取」。

使用新增的條件授予多個帳戶的許可

下列政策範例會將 s3:PutObjects3:PutObjectAcl 許可授予多個 AWS 帳戶,而且任何需要這些操作的請求都包含 public-read 固定存取控制清單 (ACL)。如需詳細資訊,請參閱「Amazon S3 動作」和「Amazon S3 條件索引鍵範例」。

警告

授予對 Amazon S3 bucket 儲存貯體的匿名存取,或停用封鎖公開存取設定時,請小心。當您授予匿名存取時,全球所有人皆可存取您的儲存貯體。我們建議您永遠不要授予匿名存取您的 Amazon S3 儲存貯體,除非您特別需要 (例如使用靜態網站託管時)。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": {"AWS": ["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]}, "Action":["s3:PutObject","s3:PutObjectAcl"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ] }

將唯讀許可授予匿名使用者

下列政策範例會將 s3:GetObject 許可授予任何公有匿名使用者。(如需許可與其允許之操作的清單,請參閱「Amazon S3 動作」)。此許可可讓每個人讀取物件資料,適用於當您設定儲存貯體作為網站而且想要每個人都可以讀取儲存貯體中的物件時。在您使用儲存貯體政策授予唯讀許可給匿名使用者之前,您必須為您的儲存貯體停用封鎖公有存取設定。如需詳細資訊,請參閱「設定網站存取許可」。

警告

授予對 Amazon S3 bucket 儲存貯體的匿名存取,或停用封鎖公開存取設定時,請小心。當您授予匿名存取時,全球所有人皆可存取您的儲存貯體。我們建議您永遠不要授予匿名存取您的 Amazon S3 儲存貯體,除非您特別需要 (例如使用靜態網站託管時)。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PublicRead", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"] } ] }

限制特定 IP 地址的存取權限

下列範例拒絕任何使用者對指定 S3 儲存貯體中的物件執行任何 Amazon S3 操作,除非該請求來自條件中指定的 IP 地址範圍。

此陳述式會將 54.240.143.0/24 識別為允許之網際網路通訊協定第 4 版 (IPv4) IP 地址的範圍。

Condition 會封鎖使用 NotIpAddress 條件和 aws:SourceIp 條件金鑰,其為 AWS 通用條件金鑰。如需這些條件鍵的詳細資訊,請參閱「Amazon S3 條件索引鍵範例」。aws:SourceIp IPv4 值會使用標準 CIDR 表示法。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM JSON 政策元素參考

重要

使用此政策之前,請以適當的使用案例值取代此範例中的 IP 地址範圍。否則,您將失去存取儲存貯體的能力。

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"} } } ] }

允許 IPv4 和 IPv6 地址

當您開始使用 IPv6 地址時,建議除了現有 IPv4 範圍之外,還使用 IPv6 地址範圍來更新組織的所有政策,以確保政策在您轉移至 IPv6 時持續運作。

下列儲存貯體政策範例示範如何混合使用 IPv4 與 IPv6 地址範圍,以涵蓋組織中所有的有效 IP 地址。政策範例將允許存取 IP 地址範例 54.240.143.12001:DB8:1234:5678::1,並且拒絕存取地址 54.240.143.1292001:DB8:1234:5678:ABCD::1

aws:SourceIp 的 IPv6 值必須為標準 CIDR 格式。針對 IPv6,我們支援使用 :: 代表 0 的範圍 (例如,2032001:DB8:1234:5678::/64)。如需詳細資訊,請參閱《IAM 使用者指南》中的 IP 位址條件運算子

重要

使用此政策之前,請以適當的使用案例值取代此範例中的 IP 地址範圍。否則,您可能會失去存取儲存貯體的能力。

{ "Id":"PolicyId2", "Version":"2012-10-17", "Statement":[ { "Sid":"AllowIPmix", "Effect":"Allow", "Principal":"*", "Action":"s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "54.240.143.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "54.240.143.128/30", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

限制對特定 HTTP 參照的存取

假設您的網站有網域名稱 (www.example.comexample.com),而連結的相片和影片存放在 Amazon S3 儲存貯體 DOC-EXAMPLE-BUCKET 中。根據預設,所有 Amazon S3 資源都是私有,因此只有建立資源的 AWS 帳戶 才能存取資源。若要允許網站中這些物件的讀取存取,您可以使用 s3:GetObject 金鑰新增可允許具有條件之 aws:Referer 許可的儲存貯體政策,而且 get 要求必須源自於特定網頁。下列政策指定含 StringLike 條件鍵的 aws:Referer 條件。

{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

請確定您使用的瀏覽器在請求中包含 HTTP referer 標頭。

重要

應該小心使用此金鑰。包含公開已知推薦者標頭值相當危險。未授權方可以使用修改的或自訂瀏覽器來提供他們選擇的任何 aws:referer 值。因此,不應該使用 aws:referer 來防止未經授權方提出直接 AWS 請求。它僅用於允許客戶保護其數位內容 (例如存放在 Amazon S3 中的內容),使其不被未經授權的第三方網站參考。如需詳細資訊,請參閱《IAM 使用者指南》中的 aws:referer

對 Amazon CloudFront OAI 授予許可

下列儲存貯體政策範例對 CloudFront 原始存取身分 (OAI) 授予許可,以允許取得 (讀取) Amazon S3 儲存貯體中的所有物件。您可以使用 CloudFront OAI 來允許使用者透過 CloudFront 存取儲存貯體中的物件,而不是直接透過 Amazon S3 存取。如需詳細資訊,請參閱《Amazon CloudFront 開發人員指南》中的使用原始存取身分限制對 Amazon S3 內容的存取

下列政策使用 OAI 的 ID 做為政策的 Principal。如需有關使用 S3 儲存貯體政策授予對 CloudFront OAI 的存取的詳細資訊,請參閱《Amazon CloudFront 開發人員指南》中的使用 Amazon S3 儲存貯體政策

若要使用此範例:

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

新增儲存貯體政策以需要 MFA

Amazon S3 支援 MFA 保護的 API 存取,在存取 Amazon S3 資源時,此功能可以強制執行 Multi-Factor Authentication (MFA)。多重要素驗證可以提供多一層的安全,讓您可以套用到您的 AWS 環境。此安全功能需要使用者提供有效的 MFA 代碼來證明 MFA 裝置的實體擁有。如需詳細資訊,請參閱 AWS 多重要素驗證。只要是請求存取 Amazon S3 資源,您都可以要求 MFA。

您可以在儲存貯體政策中使用 aws:MultiFactorAuthAge 金鑰,以強制執行 MFA 要求。AWS Identity and Access Management(IAM) 使用者可以使用 AWS Security Token Service (AWS STS) 發出的臨時登入資料,以存取 Amazon S3 資源。您可以在 AWS STS 請求時提供 MFA 代碼。

當 Amazon S3 收到實施多重因素驗證的請求時,aws:MultiFactorAuthAge 金鑰會提供數值,指出暫時登入資料是在多久之前建立 (秒)。如果要求中所提供的暫時性登入資料不是使用 MFA 裝置所建立,則此金鑰值為 null (不存在)。在儲存貯體政策中,您可以新增可檢查此值的條件,如下列儲存貯體政策範例所示。如果要求並未經過 MFA 驗證,此政策會拒絕對 /taxdocuments 儲存貯體中的 DOC-EXAMPLE-BUCKET 資料夾進行任何 Amazon S3 操作。若要進一步了解 MFA,請參閱《IAM 使用者指南》中的在 AWS 中使用多重要素驗證 (MFA)

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

如果 Null 金鑰值為 null,則 Condition 區塊中的 aws:MultiFactorAuthAge 條件會評估為 True,表示未使用 MFA 金鑰建立要求中的暫時性安全登入資料。

下列儲存貯體政策是先前儲存貯體政策的延伸。它包含兩個政策陳述式。一個陳述式會允許任何人在儲存貯體 (s3:GetObject) 上的 DOC-EXAMPLE-BUCKET 許可。另一個陳述式則會透過要求 MFA,進一步限制對儲存貯體中 DOC-EXAMPLE-BUCKET/taxdocuments 資料夾的存取。

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

您可以選擇性使用數值條件來限制 aws:MultiFactorAuthAge 金鑰有效的使用期限,與驗證要求時所使用之暫時性安全登入資料的生命週期無關。例如,除了需要 MFA 身份驗證之外,下列儲存貯體政策也會檢查在多久之前建立暫時性工作階段。如果 aws:MultiFactorAuthAge 金鑰值指出已在一小時 (3,600 秒) 之前建立暫時性工作階段,則此政策會拒絕任何操作。

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

確保儲存貯體擁有者具有完全控制時,授予跨帳戶許可來上傳物件

下列範例顯示如何允許另一個 AWS 帳戶 將物件上傳到儲存貯體,同時完全控制上傳的物件。此政策強制規定,只有當特定的 AWS 帳戶 (123456789012) 在上傳時包含儲存貯體擁有者完全控制標準的 ACL 時,才會授予該帳戶上傳物件的能力。政策中的 StringEquals 條件指定 s3:x-amz-acl 條件金鑰來表示需求 (請參閱 Amazon S3 條件索引鍵範例)。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"123456789012"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }

對 Amazon S3 庫存和 Amazon S3 分析授予許可

Amazon S3 庫存針對 Amazon S3 儲存貯體中的物件建立清單,而 Amazon S3 分析匯出針對分析中使用的資料建立輸出檔。清查列出其物件的儲存貯體稱為來源儲存貯體。撰寫清查檔案的儲存貯體以及撰寫分析匯出檔案的儲存貯體稱為目標儲存貯體。設定 Amazon S3 儲存貯體的清查及設定分析匯出時,您必須為目的地儲存貯體建立儲存貯體政策。如需詳細資訊,請參閱「 Amazon S3 清查」和「Amazon S3 分析 – 儲存類別分析」。

下列儲存貯體政策範例授予 Amazon S3 許可,允許從來源儲存貯體的帳戶將物件寫入 (PUT) 目的地儲存貯體。設定 Amazon S3 庫存和 Amazon S3 分析匯出時,您可以在目的地儲存貯體上使用這樣的儲存貯體政策。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"InventoryAndAnalyticsExamplePolicy", "Effect":"Allow", "Principal": {"Service": "s3.amazonaws.com"}, "Action":"s3:PutObject", "Resource":["arn:aws:s3:::destinationbucket/*"], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" }, "StringEquals": { "aws:SourceAccount": "123456789012", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

授予 Amazon S3 Storage Lens 許可

Amazon S3 Storage Lens 會彙總您的用量和活動指標,並在 Amazon S3 主控台首頁 (儲存貯體) 頁面、互動式儀表板或透過以 CSV 或 Parquet 格式下載的指標顯示帳戶快照中的資訊。您可以使用儀表板,以視覺化方式呈現洞見與趨勢、標記異常值,並接收最佳化儲存成本及運用資料保護最佳實務的建議。您可以透過 AWS Management Console、AWS CLI、AWS 開發套件或 REST API 使用 S3 Storage Lens。

S3 Storage Lens 可將您的儲存使用量彙總到 Amazon S3 儲存貯體中匯出的指標,以供進一步分析。S3 Storage Lens 存放其匯出指標的位置稱為目的地儲存貯體。設定 S3 Storage Lens 指標匯出時,必須設定目的地儲存貯體政策。如需詳細資訊,請參閱「使用 Amazon S3 Storage Lens 評估儲存活動和使用量」。

下列範例儲存貯體政策授予 Amazon S3 許可,將物件 (PUT) 寫入目的地儲存貯體。設定 S3 Storage Lens 指標匯出時,您可以對目的地儲存貯體使用類似這樣的儲存貯體政策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3StorageLensExamplePolicy", "Effect": "Allow", "Principal": { "Service": [ "storage-lens.s3.amazonaws.com" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/111122223333/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" }, "StringEquals": { "aws:SourceAccount": "111122223333" }, "StringEquals": { "aws:SourceArn": "arn:aws:s3:your-region:111122223333:storage-lens/your-dashboard-configuration-id" } } } ] }

設定 S3 Storage Lens 組織層級指標匯出時,對上一個儲存貯體政策 "Action": "s3:PutObject" 資源進行下列修改。

{ "Action": "s3:PutObject", "Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/your-organization-id/*",