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

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

Amazon S3 儲存貯體政策範例

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

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

若要授與或拒絕一組物件的許可,您可以在 Amazon 資源名稱 (*) 和其他值中使用萬用字元 (ARNs)。例如,您可以控制物件群組的存取權,這些群組以通用前置詞開頭或以特定副檔名結尾,例如.html

如需關於 AWS Identity and Access Management (IAM) 原則語言,請參閱Amazon S3 中的政策和許可

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

注意

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

建立值區政策的其他資源包括:

將唯讀權限授予公開匿名使用者

您可以使用政策設定將存取權授予公開匿名使用者,如果您將儲存貯體設定為靜態網站,這將非常有用。若要將存取權授予公用匿名使用者,您必須停用值區的「封鎖公用存取」設定。如需有關如何執行此作業以及所需原則的詳細資訊,請參閱設定網站存取許可。若要了解如何針對相同目的設定更嚴格的政策,請參閱如何授與 Amazon S3 儲存貯體中某些物件的公開讀取存取權限? 在 AWS 知識中心。

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

警告

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

  1. 在開啟 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:::DOC-EXAMPLE-BUCKET/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "true" } } }] }

要求 SSE-KMS 具體 AWS KMS key 對於寫入值區的所有物件

下列範例政策會拒絕將任何物件寫入值區 (如果未使用 SSE-KMS 使用特定KMS金鑰 ID 加密)。即使物件已使用 SSE-KMS 透過使用每個要求標頭或儲存貯體預設加密,如果物件尚未使用指定KMS金鑰加密,物件也無法寫入值區。請務必以您自己ARN的KMS金鑰取代此範例中使用的KMS金鑰ARN。

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-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:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": [ "public-read" ] } } } ] }

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

下面的例子演示了如何允許另一個 AWS 帳戶 將物件上載至您的值區,同時確保您擁有上載物件的完全控制權。此政策授予具體的 AWS 帳戶 (111122223333) 只有在該帳戶包含上載時的bucket-owner-full-control固定物件時才能ACL上載物件。原則中的StringEquals條件會指定用來表示固定ACL需求的s3:x-amz-acl條件索引鍵。如需詳細資訊,請參閱Amazon S3 的政策條件金鑰

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"111122223333"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Department": "Finance" } } }] }

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

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

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

在下列範例值區政策中,aws:SourceArn全域條件金鑰可用來比較資源的 Amazon 資源名稱 (ARN),並使用政策中指ARN定的名稱發出 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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": ["o-aa111bb222"] } } }] }

根據HTTP或HTTPS請求管理存取

限制只存取HTTPS要求

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

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

在下列範例中,值區政策明確拒絕HTTP要求。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "RestrictToTLSRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-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/*"]} } } ] }

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

警告

我們建議您使用 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) 列出 DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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/*" } ] }
注意

確保更elb-account-id換為 AWS 帳戶 適用於您的 Elastic Load Balancing 的 ID AWS 區域。 如需 Elastic Load Balancing 區域的清單,請參閱 E lastic 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

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

下列原則使用OAI的 ID 做為原則的 ID Principal。如需有關使用 S3 儲存貯體政策授與存取權的詳細資訊 CloudFront OAI,請參閱 Amazon CloudFront 開發人員指南中的從原始存取身分 (OAIOAC) 遷移到原始存取控制 ()

若要使用此範例:

{ "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 區域、儲存類別、儲存貯體、字首或儲存鏡頭群組層級。您也可以在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 分析儲存體類別分析匯出會建立分析中所使用資料的輸出檔案。庫存列出其物件的儲存貯體稱為來源儲存貯體。庫存檔案和分析匯出檔案撰寫至其中的儲存貯體稱為「目的地儲存貯體」。設定庫存或分析匯出時,您必須針對目的地儲存貯體建立儲存貯體政策。如需詳細資訊,請參閱 Amazon 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" } } } ] }

控制 S3 庫存報告組態建立

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

若要限制使用者設定 S3 庫存報告,請移除該使用者的s3:PutInventoryConfiguration權限。

S3 庫存報告組態中的某些物件中繼資料欄位是選用的,這表示預設情況下可以使用,但是當您授與使用者s3:PutInventoryConfiguration權限時,這些欄位可能會受到限制。您可以使用s3:InventoryAccessibleOptionalFields條件索引鍵,控制使用者是否可以在報表中包含這些選擇性的中繼資料欄位。如需 S3 庫存中可用的選擇性中繼資料欄位清單,請參閱 OptionalFieldsAmazon 簡單存儲服務API參考中。

若要授與使用者使用特定選擇性中繼資料欄位建立詳細目錄組態的權限,請使用s3:InventoryAccessibleOptionalFields條件索引鍵來調整儲存貯體政策中的條件。

下列範例原則會授與 user (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明確的陳述式。下列範例值區政策會拒絕使用者Ana在包含選用ObjectAccessControlList或中ObjectOwner繼資料欄位的來源值區DOC-EXAMPLE-SOURCE-BUCKET中建立清查組態。使用者仍然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效果或ForAnyValueDeny效果,如前面的範例所示。

請勿有Deny效或ForAllValuesForAnyValue有效地使用,因為這些組合可能會受到過度限制,並阻止庫存組態刪除。Allow

若要深入了解ForAllValuesForAnyValue條件集運算子,請參閱《IAM使用者指南》中的多重值內容索引

要求 MFA

Amazon S3 支援MFA受保護的API存取,這項功能可以強制執行多重要素身份驗證 (MFA) 以存取 Amazon S3 資源。多因素身份驗證提供了額外的安全級別,您可以將其應用於 AWS 環境。MFA是一項安全性功能,要求使用者提供有效的MFA代碼來證明MFA裝置的實體擁有。如需詳細資訊,請參閱 AWS 多因素身份驗證。您可以要MFA求存取 Amazon S3 資源的任何請求。

若要強制執行MFA需求,請在值區政策中使用aws:MultiFactorAuthAge條件索引鍵。IAM使 Amazon S3 可以使用由 AWS Security Token Service (AWS STS). 您提供的MFA代碼時 AWS STS 請求。

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

此範例政策拒絕在 /稅務文件 amzn-s3-demo-bucket存儲桶中的文件夾,如果請求未通過使用MFA. 若要深入瞭解MFA,請參閱中的使用多重要素驗證 (MFA) AWS (在 IAM 使用者指南中)

{ "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:DeleteObjectVersion、和s3:PutLifecycleConfiguration權限。這三個動作都是必要的,因為您可以透過明確呼叫DELETE ObjectAPI操作或設定其生命週期來刪除物件 (請參閱管理物件的生命週期),以便 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/*" ] } ] }