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

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

Amazon S3 儲存貯體政策的範例

使用 Amazon S3 儲存貯體政策,您可以安全地存取儲存貯體中的物件,以便只有具有適當許可的使用者才能存取它們。您甚至可以防止已驗證但沒有適當許可的使用者存取 Amazon S3 資源。

本節顯示儲存貯體政策之一般使用案例的範例。這些範例策略會使用 amzn-s3-demo-bucket 作為資源值。若要測試這些政策,請將 user input placeholders 取代為您自己的資訊 (例如儲存貯體名稱)。

若要授予或拒絕一組物件的許可,您可以在 Amazon Resource Names (ARNs*) 和其他值中使用萬用字元 ()。例如,您可以控制對物件群組的存取,這些物件以通用字首開頭或特定延伸結尾,例如 .html

如需 AWS Identity and Access Management (IAM) 政策語言的詳細資訊,請參閱 Amazon S3 中的政策和許可

如需 S3 資源類型對 S3 API 操作的許可的詳細資訊,請參閱 Amazon S3 API 操作的必要許可

注意

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

建立儲存貯體政策的其他資源包括:

授予公有匿名使用者的唯讀許可

您可以使用您的政策設定,將存取權授予公有匿名使用者,如果您將儲存貯體設定為靜態網站,這會很有用。授予公有匿名使用者的存取權時,您必須停用儲存貯體的封鎖公有存取設定。如需如何執行此操作以及所需政策的詳細資訊,請參閱 設定網站存取許可。若要了解如何為相同目的設定更嚴格的政策,請參閱 AWS 知識中心中的如何授予 Amazon S3 儲存貯體中某些物件的公有讀取存取權?

根據預設,Amazon S3 會封鎖對帳戶和儲存貯體的公開存取。如想要使用儲存貯體託管靜態網站,您可使用這些步驟編輯封鎖公有存取設定:

警告

在完成這些步驟之前,請檢閱 封鎖對 Amazon S3 儲存體的公開存取權 以確保您了解並接受允許公開存取所涉及的風險。當您關閉封鎖公開存取設定以公開儲存貯體時,網際網路上的任何人都可以存取您的儲存貯體。我們建議您封鎖對儲存貯體的所有公用存取權。

  1. 在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

  2. 選擇已設定為靜態網站的儲存貯體名稱。

  3. 選擇 Permissions (許可)。

  4. Block public access (bucket settings) (封鎖公開存取 (儲存貯體設定)) (封鎖公開存取 (儲存貯體設定)) 下,選擇 Edit (編輯)。

  5. 清除 Block all public access (封鎖所有公開存取),然後選擇 Save changes (儲存變更)。

    Amazon S3 主控台,顯示區塊公有存取儲存貯體設定。

    Amazon S3 關閉儲存貯體的封鎖公開存取設定。若要建立公有靜態網站,您可能也必須編輯帳戶的封鎖公有存取設定,才能新增儲存貯體政策。如果您的帳戶的封鎖公開存取設定目前已開啟,您會在封鎖公開存取 (儲存貯體設定) 下看到備註。

需要加密

您可以使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 要求伺服器端加密,如下列範例所示。

寫入儲存貯體的所有物件都需要 SSE-KMS

下列範例政策要求寫入儲存貯體的每個物件都必須使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 進行伺服器端加密。如果物件未使用 SSE-KMS 加密,請求會遭到拒絕。

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMS", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "true" } } }] }

對於寫入儲存貯體的所有物件,需要具有特定 AWS KMS key 的 SSE-KMS

下列範例政策會拒絕使用KMS特定 SSE KMS金鑰 ID 來加密任何物件,使其不會寫入儲存貯體。即使物件使用按請求標頭或儲存貯體預設加密使用 SSE-KMS 加密,如果物件尚未使用指定的 KMS 金鑰加密,則無法寫入儲存貯體。請務必使用您自己的 KMS 金鑰 ARN 取代此範例中使用的 KMS 金鑰 ARN。

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "ArnNotEqualsIfExists": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-2:111122223333:key/01234567-89ab-cdef-0123-456789abcdef" } } }] }

使用固定 ACLs 管理儲存貯體

授予許可給多個帳戶以上傳物件或設定物件 ACLs 供公開存取

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

警告

public-read 固定 ACL 允許世界上的任何人檢視儲存貯體中的物件。授予對 Amazon S3 bucket 儲存貯體的匿名存取,或停用封鎖公開存取設定時,請小心。當您授予匿名存取時,全球所有人皆可存取您的儲存貯體。我們建議您永遠不要授予匿名存取您的 Amazon S3 儲存貯體,除非您特別需要 (例如使用靜態網站託管時)。如果您想要針對靜態網站託管啟用封鎖公開存取設定,請參閱教學課程:在 Amazon S3 上設定靜態網站

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

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

下列範例顯示如何允許另一個 AWS 帳戶 將物件上傳到儲存貯體,同時確保您完全控制上傳的物件。此政策會授予特定 AWS 帳戶 (111122223333) 只有在該帳戶包含上傳時bucket-owner-full-control定義的 ACL 時,才能夠上傳物件。政策中的StringEquals條件會指定s3:x-amz-acl條件索引鍵,以表達固定的 ACL 需求。如需詳細資訊,請參閱Amazon S3 的政策條件金鑰

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

使用物件標記來管理物件存取

允許使用者只讀取具有特定索引標籤金鑰和值的物件

下列許可政策會限制使用者只能讀取具有 environment: production 索引標籤金鑰和值的物件。此政策會使用 s3:ExistingObjectTag 條件金鑰來指定索引標籤金鑰和值。

{ "Version":"2012-10-17", "Statement":[ { "Principal":{ "AWS":"arn:aws:iam::111122223333:role/JohnDoe" }, "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition":{ "StringEquals":{ "s3:ExistingObjectTag/environment":"production" } } } ] }

限制使用者可以新增哪些物件索引標籤金鑰

下列範例政策授予使用者執行 s3:PutObjectTagging 動作的許可,允許使用者將索引標籤新增至現有的物件。此條件使用 s3:RequestObjectTagKeys 條件金鑰指定允許的索引標籤金鑰,例如 OwnerCreationDate。如需詳細資訊,請參閱 IAM 使用者指南中的建立測試多個金鑰值的條件

此政策可確保請求中指定的每個索引標籤金鑰都是授權的標籤金鑰。條件中的 ForAnyValue 限定詞可確保請求中至少會出現其中一個指定的金鑰。

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:role/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

允許使用者新增物件標籤時,需要特定索引標籤金鑰和值

下列範例政策授予使用者執行 s3:PutObjectTagging 動作的許可,允許使用者將標籤新增至現有的物件。此條件需要使用者包括值設為 X 的特定索引標籤 (例如 Project)。

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X" } } } ] }

允許使用者只新增具有特定物件索引標籤金鑰和值的物件

下列範例政策會授與使用者執行 s3:PutObject 動作的許可,讓他們可將物件新增至儲存貯體。不過,Condition 陳述式會限制所上載物件上允許的索引標籤金鑰和值。在此範例中,使用者只能將具有值設為 Finance 的特定索引標籤金鑰 (Department) 的物件新增至儲存貯體。

{ "Version": "2012-10-17", "Statement": [{ "Principal":{ "AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Department": "Finance" } } }] }

使用全域條件金鑰管理物件存取

全域條件索引鍵是具有aws字首的條件內容索引鍵。 AWS 服務 可以支援全域條件索引鍵或包含服務字首的服務特定索引鍵。您可以使用 JSON 政策的 Condition元素,將請求中的金鑰與您在政策中指定的金鑰值進行比較。

限制只能存取 Amazon S3 伺服器存取日誌交付

在下列範例儲存貯體政策中, aws:SourceArn 全域條件索引鍵用於比較資源的 Amazon Resource Name (ARN),使用政策中指定的 ARN 提出 a service-to-service 請求。aws:SourceArn 全域條件金鑰用來防止 Amazon S3 服務在服務之間用作交易期間的混淆代理人。只允許 Amazon S3 服務將物件新增至 Amazon S3 儲存貯體。

此範例儲存貯體政策只向日誌記錄服務主體 (logging.s3.amazonaws.com) 授予 s3:PutObject 許可。

注意

NotPrincipal 元素無法與 AWS 服務 Amazon S3 資源型政策中的主體搭配使用,例如儲存貯體政策。反之,我們建議使用aws:PrincipalServiceName條件索引鍵,如下列政策所示。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjectS3ServerAccessLogsPolicy", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-logs/*", "Condition": { "StringEquals": { "aws:SourceAccount": "111111111111" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::EXAMPLE-SOURCE-BUCKET" } } }, { "Sid": "RestrictToS3ServerAccessLogs", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-logs/*", "Condition": { "StringNotEqualsIfExists": { "aws:PrincipalServiceName": "logging.s3.amazonaws.com" } } } ] }

僅允許存取您的組織

如果您想要要求所有存取資源的 IAM 主體都來自組織中 AWS 帳戶 的 (包括 AWS Organizations 管理帳戶),您可以使用aws:PrincipalOrgID全域條件金鑰。

若要授予或限制此類型的存取權,請在儲存貯體政策中定義 aws:PrincipalOrgID 條件,並將值設為您的組織 ID。組織 ID 是用來控制對儲存貯體的存取。當您使用 aws:PrincipalOrgID 條件時,來自儲存貯體政策的許可也會套用至新增至組織的所有新帳戶。

以下是資源型儲存貯體政策的範例,您可以用來授予組織中特定 IAM 主體直接存取儲存貯體的權限。透過將 aws:PrincipalOrgID 全域條件金鑰新增至儲存貯體政策,現在需要主體帳戶位於您的組織中,才能取得資源的存取權。即使您在授予存取權時不小心指定不正確的帳戶, aws:PrincipalOrgID 全域條件金鑰可做為額外的防護。當此全域金鑰用於政策時,其可防止指定組織以外的所有主體存取 S3 儲存貯體。只有來自所列組織中帳戶的主體才能取得資源的存取權。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowGetObject", "Principal": { "AWS": "*" }, "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": ["o-aa111bb222"] } } }] }

根據 HTTP 或 HTTPS 請求管理存取權

限制僅存取 HTTPS 請求

如果您想要防止潛在攻擊者操控網路流量,您可以使用 HTTPS (TLS) 來僅允許加密連線,同時限制 HTTP 請求存取儲存貯體。若要判斷請求是 HTTP 還是 HTTPS,請使用 aws:SecureTransport S3 儲存貯體政策中的全域條件索引鍵。aws:SecureTransport 條件索引鍵會檢查是否使用 HTTP 傳送請求。

如果請求傳回 true,則請求是透過 HTTPS 傳送。如果請求傳回 false,則請求是透過 HTTP 傳送。然後,您可以根據所需的請求配置來允許或拒絕對儲存貯體的存取。

在下列範例中,儲存貯體政策明確拒絕 HTTP 請求。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "RestrictToTLSRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } }, "Principal": "*" }] }

限制對特定 HTTP 參考程式的存取

假設您有一個具有網域名稱的網站 www.example.comexample。com 包含存放在名為 之儲存貯體中的相片和影片的連結amzn-s3-demo-bucket。根據預設,所有 Amazon S3 資源都是私有的,因此只有 AWS 帳戶 建立資源的 才能存取它們。

若要允許網站中這些物件的讀取存取,您可以新增一個儲存貯體政策,允許條件為 GET 請求必須源自於特定網頁的 s3:GetObject 許可。下列政策會使用 StringLike 條件搭配 aws:Referer 條件金鑰來限制請求。

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

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

警告

我們建議您使用 aws:Referer 條件金鑰時要小心。包含公開已知的 HTTP 參考器標頭值很危險。未授權方可以使用修改的或自訂瀏覽器來提供他們選擇的任何 aws:Referer 值。因此,請勿使用 aws:Referer 來防止未經授權方提出直接 AWS 請求。

aws:Referer 條件金鑰僅用於允許客戶保護其數位內容 (例如存放在 Amazon S3 中的內容),使其不被未經授權的第三方網站參考。如需詳細資訊,請參閱 aws:Referer (在 IAM 使用者指南中)

管理使用者對特定資料夾的存取

授予使用者存取特定資料夾的權限

假設您正在嘗試授予使用者存取特定資料夾的權限。如果 IAM 使用者和 S3 儲存貯體屬於相同的 AWS 帳戶,則您可以使用 IAM 政策授予使用者對特定儲存貯體資料夾的存取權。透過此方式,您不需要更新儲存貯體政策來授予存取權。您可以將 IAM 政策新增至多個使用者可以切換到的 IAM 角色。

如果 IAM 身分和 S3 儲存貯體屬於不同 AWS 帳戶,則您必須在 IAM 政策和儲存貯體政策中授予跨帳戶存取權。如需如何授予跨帳户存取權的詳細資訊,請參閱授予跨帳戶儲存貯體許可的儲存貯體擁有者

下列範例儲存貯體政策僅授予 JohnDoe 其資料夾 (home/JohnDoe/) 的完整主控台存取權。透過建立 home 資料夾並將適當的許可授予使用者,您可以讓多個使用者共用單一儲存貯體。此政策包含三個 Allow 陳述式:

  • AllowRootAndHomeListingOfCompanyBucket:允許使用者許 (JohnDoe) 列出 amzn-s3-demo-bucket 儲存貯體根層級和 home 資料夾中的物件。此陳述式還允許使用者透過使用主控台搜尋字首 home/

  • AllowListingOfUserFolder:允許使用者 (JohnDoe) 列出 home/JohnDoe/ 資料夾和任何子資料夾中的所有物件。

  • AllowAllS3ActionsInUserFolder:透過授予ReadWriteDelete 許可來允許使用者執行所有 Amazon S3 動作。許可限於儲存貯體擁有者的主資料夾。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"], "Condition": { "StringEquals": { "s3:prefix": ["", "home/", "home/JohnDoe"], "s3:delimiter": ["/"] } } }, { "Sid": "AllowListingOfUserFolder", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"], "Condition": { "StringLike": { "s3:prefix": ["home/JohnDoe/*"] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:*"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/home/JohnDoe/*"] } ] }

管理存取日誌的存取

授予 Application Load Balancer 的存取權以啟用存取

對 Application Load Balancer 啟用存取記錄時,您必須指定 S3 儲存貯體的名稱,負載平衡器將在其中存放日誌。儲存貯體必須具有附加的政策,以授予 Elastic Load Balancing 寫入儲存貯體的許可。

在下列範例中,儲存貯體政策會授予 Elastic Load Balancing (ELB) 將存取日誌寫入儲存貯體的許可:

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::elb-account-id:root" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/111122223333/*" } ] }
注意

務必針對您的 AWS 區域將 elb-account-id 取代為 Elastic Load Balancing 的 AWS 帳戶 ID。如需 Elastic Load Balancing 區域的清單,請參閱《Elastic Load Balancing 使用者指南》中的將政策附加到 Amazon S3 儲存貯體

如果您的 AWS 區域 未出現在支援的 Elastic Load Balancing 區域清單中,請使用下列政策,將許可授予指定的日誌交付服務。

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/111122223333/*" } ] }

然後,務必啟用 Elastic Load Balancing 存取日誌來設定這些存取日誌。您可以建立測試檔案來驗證儲存貯體許可

管理對 Amazon CloudFront OAI 的存取

授予 Amazon CloudFront OAI 的許可

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

下列政策使用 OAI 的 ID 作為政策的 Principal。如需使用 S3 儲存貯體政策授予 a CloudFront OAIWord 存取權的詳細資訊,請參閱 Amazon CloudFront 開發人員指南中的從原始伺服器存取身分 (OAI) 遷移至原始伺服器存取控制 (OAC)

若要使用此範例:

{ "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:::amzn-s3-demo-bucket/*" } ] }

管理對 Amazon S3 Storage Lens 的存取

授予 Amazon S3 Storage Lens 的許可

S3 Storage Lens 會彙總您的指標,並在 Amazon S3 主控台 Buckets (儲存貯體) 頁面上的 Account snapshot (帳戶快照) 區段中顯示資訊。S3 Storage Lens 也會提供互動式儀表板,您可以用來以視覺化方式呈現洞見與趨勢、標記異常值,以及接收最佳化儲存成本和套用資料保護最佳實務的建議。您的儀表板具有向下切入選項可產生及視覺化組織、帳戶、 AWS 區域、儲存類別、儲存貯體、字首或 Storage Lens 群組層級的洞察。您也可以使用 CSV 或 傳送每日指標匯出 Parquet 格式為 S3 儲存貯體。

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:::amzn-s3-demo-destination-bucket/destination-prefix/StorageLens/111122223333/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:s3:region-code:111122223333:storage-lens/storage-lens-dashboard-configuration-id" } } } ] }

當您設定 S3 Storage Lens 組織層級指標匯出時,對上一個儲存貯體政策的 Resource 陳述式使用下列修改。

"Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/destination-prefix/StorageLens/your-organization-id/*",

管理 S3 庫存、S3 分析和 S3 庫存報告的許可

授予 S3 清查與 S3 分析的許可

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

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

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

Control S3 庫存報告組態建立

使用 S3 庫存編製目錄和分析資料 會建立 S3 儲存貯體中物件的清單,以及各物件的中繼資料。s3:PutInventoryConfiguration 許可允許使用者建立庫存組態,其中包含預設可用的所有物件中繼資料欄位,並指定儲存庫存的目的地儲存貯體。對目的地儲存貯體中的物件具有讀取權限的使用者可以存取庫存報告中所有可用的物件中繼資料欄位。如需 S3 庫存中可用的中繼資料欄位的詳細資訊,請參閱 Amazon S3 清查清單

若要限制使用者設定 S3 庫存報告,請從使用者移除 s3:PutInventoryConfiguration 許可。

S3 庫存報告組態中的某些物件中繼資料欄位是選用的,這表示它們預設為可用,但當您授予使用者s3:PutInventoryConfiguration許可時,它們可能會受到限制。您可以使用s3:InventoryAccessibleOptionalFields條件索引鍵,控制使用者是否可以在報告中包含這些選用中繼資料欄位。如需 S3 庫存中可用選用中繼資料欄位的清單,請參閱 OptionalFieldsAmazon Simple Storage Service API 參考中。

若要授予使用者使用特定選用中繼資料欄位建立庫存組態的許可,請使用s3:InventoryAccessibleOptionalFields條件索引鍵來精簡儲存貯體政策中的條件。

下列範例政策授予使用者 (Ana) 有條件建立庫存組態的許可。政策中的ForAllValues:StringEquals條件使用s3:InventoryAccessibleOptionalFields條件索引鍵來指定兩個允許的選用中繼資料欄位,即 SizeStorageClass。因此,Ana在建立庫存組態時,她可以包含的唯一選用中繼資料欄位是 SizeStorageClass

{ "Id": "InventoryConfigPolicy", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreationConditionally", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAllValues:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "Size", "StorageClass" ] } } } ] }

若要限制使用者設定包含特定選用中繼資料欄位的 S3 庫存報告,請將明確Deny陳述式新增至來源儲存貯體的儲存貯體政策。下列範例儲存貯體政策會拒絕使用者在包含選用ObjectAccessControlListObjectOwner中繼資料欄位DOC-EXAMPLE-SOURCE-BUCKET的來源儲存貯體中Ana建立庫存組態。使用者仍然Ana可以使用其他選用的中繼資料欄位建立庫存組態。

{ "Id": "InventoryConfigSomeFields", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", }, { "Sid": "DenyCertainInventoryFieldCreation", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAnyValue:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "ObjectOwner", "ObjectAccessControlList" ] } } } ] }
注意

在儲存貯體政策中使用s3:InventoryAccessibleOptionalFields條件索引鍵不會影響根據現有庫存組態交付庫存報告。

重要

我們建議您使用 ForAllValues搭配 Allow 效果或 ForAnyValue Deny效果,如先前範例所示。

請勿ForAllValuesDeny效果搭配使用,也不要ForAnyValueAllow效果搭配使用,因為這些組合可能會過度限制並封鎖庫存組態刪除。

若要進一步了解 ForAllValuesForAnyValue條件集運算子,請參閱 IAM 使用者指南中的多值內容索引鍵

需要 MFA

Amazon S3 支援 MFA 保護的 API 存取,這項功能可強制執行多重要素驗證 (MFA) 來存取您的 Amazon S3 資源。多重要素驗證提供額外層級的安全性,您可以套用至您的 AWS 環境。MFA 是一種安全功能,需要使用者提供有效的 MFA 程式碼來證明 MFA 裝置的實際擁有權。如需詳細資訊,請參閱 AWS 多重要素驗證。您可以針對存取 Amazon S3 資源的任何請求,要求 MFA。

若要強制執行 MFA 要求,請在儲存貯體政策中使用aws:MultiFactorAuthAge條件索引鍵。IAM 使用者可以使用 AWS Security Token Service () 發行的臨時憑證來存取 Amazon S3 資源AWS STS。您在請求時 AWS STS 提供 MFA 代碼。

當 Amazon S3 收到實施多重要素驗證的請求時,aws:MultiFactorAuthAge 條件金鑰會提供一個數值,指出暫時憑證是在多久之前建立 (以秒為單位)。如果不是使用 MFA 裝置建立請求中提供的臨時憑證,則此金鑰值為 null (不存在)。在儲存貯體政策中,您可以新增可檢查此值的條件,如下列範例所示。

此範例政策拒絕 上的任何 Amazon S3 操作 /taxdocuments 如果未使用 MFA 驗證請求,則為儲存amzn-s3-demo-bucket貯體中的 資料夾。若要進一步了解 MFA,請參閱 Word 使用者指南IAM中的使用多重要素驗證 (WordMFA) AWS

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

Condition 區塊中的Null條件會評估aws:MultiFactorAuthAge條件索引鍵值true是否為 null,表示請求中的臨時安全憑證是在沒有 MFA 裝置的情況下建立的。

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

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

您可以選擇性地使用數值條件,來限制 aws:MultiFactorAuthAge 金鑰有效的持續時間。您使用 aws:MultiFactorAuthAge 金鑰指定的持續時間,與驗證請求時所使用之臨時安全憑證的生命週期無關。

例如,除了需要 MFA 身分驗證之外,下列儲存貯體政策也會檢查在多久之前建立暫時工作階段。如果 aws:MultiFactorAuthAge 金鑰值指出已在一小時 (3,600 秒) 之前建立暫時性工作階段,則此政策會拒絕任何操作。

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

這些使用者預設不具備任何許可。但是,當您建立政策時,您可以授予使用者您不打算授予的許可。若要避免此類許可漏洞,您可以新增明確拒絕來撰寫更嚴格的存取政策。

若要明確封鎖使用者或帳戶刪除物件,您必須將下列動作新增至儲存貯體政策:s3:DeleteObjects3:DeleteObjectVersions3:PutLifecycleConfiguration許可。因為您可以透過明確呼叫 API DELETE Object 操作或設定物件生命週期 (請參閱 管理物件的生命週期) 來刪除物件,以便 Amazon S3 可以在物件的生命週期到期時移除物件,因此需要這三個動作。

在下列政策範例中,您明確拒絕使用者 的DELETE Object許可MaryMajor。明確Deny陳述式一律會取代授予的任何其他許可。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/MaryMajor" }, "Action": [ "s3:GetObjectVersion", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ] }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/MaryMajor" }, "Action": [ "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:PutLifecycleConfiguration" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ] } ] }