配置使用存取點的 IAM 原則 - Amazon Simple Storage Service

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

配置使用存取點的 IAM 原則

Amazon S3 存取點支援 AWS Identity and Access Management (IAM) 資源政策,可讓您根據資源、使用者或其他條件控制存取點的使用。若要讓應用程式或使用者能夠透過存取點存取物件,存取點和基礎儲存貯體都必須允許該請求。

重要

將 S3 存取點新增到儲存貯體,不會變更透過儲存貯體的名稱或 Amazon Resource Name (ARN) 直接存取儲存貯體時儲存貯體的行為。針對儲存貯體的所有現有操作將繼續像以前一樣運作。您在存取點政策中包含的限制僅適用透過該存取點進行的請求。

使用 IAM 資源政策時,請務必先解決安全性警告、錯誤、一般警告和建議, AWS Identity and Access Management Access Analyzer 然後再儲存政策。IAM Access Analyzer 會比對 IAM 政策文法最佳實務來執行政策檢查,以驗證您的政策。這些檢查會產生問題清單並提供建議,協助您撰寫具有功能性且符合安全最佳實務的政策。

若要進一步了解如何使用 IAM Access Analyzer 驗證政策,請參閱《IAM 使用者指南》中的 IAM Access Analyzer 政策驗證。若要檢視 IAM Access Analyzer 傳回的警告、錯誤和建議清單,請參閱 IAM Access Analyzer 政策檢查參考

存取點政策範例

下列範例示範如何建立 IAM 原則以控制透過存取點進行的請求。

注意

存取點政策中授予的權限只有在基礎儲存貯體也允許相同的存取時才有效。您可以透過兩種方式完成此操作:

  1. (建議)將存取控制委派給存取點中所述,將儲存貯體的存取控制委派給存取點。

  2. 將存取點政策中包含的相同權限新增至基礎儲存貯體的政策。範例 1 存取點政策範例示範如何修改基礎儲存貯體原則,以允許必要的存取。

範例 1 - 授予存取點政策

下列存取點政策會透過帳戶 Jane 中的存取點 123456789012,將帳戶 GET 中 IAM 使用者 PUT 的許可授予具有字首 Jane/my-access-point123456789012 物件。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Jane" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/Jane/*" }] }
注意

若要讓存取點政策有效地授予存取給 Jane,基礎儲存貯體也必須允許對 Jane 的相同存取。您可以將存取控制從儲存貯體委派給存取點,如將存取控制委派給存取點中所述。或者,您可以將下列政策新增至基礎儲存貯體,將必要的權限授予 Jane。請注意,存取點和儲存貯體原則之間的 Resource 項目有所不同。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Jane" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/Jane/*" }] }
範例 2 - 具有索引標籤條件的存取點政策

下列存取點政策會透過在帳戶 123456789012 中已將索引標籤金鑰 data 設定為 finance 值的物件存取點,將帳戶 123456789012 中 IAM 使用者 Mateo 的許可授予 GETmy-access-point

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Principal" : { "AWS": "arn:aws:iam::123456789012:user/Mateo" }, "Action":"s3:GetObject", "Resource" : "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/*", "Condition" : { "StringEquals": { "s3:ExistingObjectTag/data": "finance" } } }] }
範例 3 - 允許儲存貯體清單的存取點政策

下列存取點政策允許帳戶 123456789012 中的 IAM 使用者 Arnav 檢視帳戶 123456789012 中儲存貯體基礎存取點 my-access-point 中包含的物件 。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Arnav" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point" }] }
範例 4 - 服務控制政策

下列服務控制政策需要使用虛擬私有雲端 (VPC) 網路來源建立所有新的存取點。有了此政策,組織中的使用者就無法建立可從網際網路存取的新存取點。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:CreateAccessPoint", "Resource": "*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } }] }
範例 5 - 將 S3 操作限制在 VPC 網路來源的儲存貯體政策

以下儲存貯體政策會將儲存貯體 example-s3-bucket 的所有 S3 物件操作的存取限制在具有 VPC 網路來源的存取點。

重要

使用類似此範例所示的陳述式之前,請確定您不需要使用存取點不支援的功能,例如跨區域複寫。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:AbortMultipartUpload", "s3:BypassGovernanceRetention", "s3:DeleteObject", "s3:DeleteObjectTagging", "s3:DeleteObjectVersion", "s3:DeleteObjectVersionTagging", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectLegalHold", "s3:GetObjectRetention", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionAcl", "s3:PutObjectVersionTagging", "s3:RestoreObject" ], "Resource": "arn:aws:s3:::example-s3-bucket/*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } } ] }

條件索引鍵

S3 存取點具有您可以在 IAM 政策中使用的條件金鑰,來控制對資源的存取。下列條件金鑰僅代表 IAM 政策的一部分。如需完整政策範例,請參閱 存取點政策範例將存取控制委派給存取點授予跨帳戶存取點的許可

s3:DataAccessPointArn

此範例顯示您可以用來比對存取點 ARN 的字串。下列範例會比對區域 AWS 帳戶 123456789012中的所有存取點 us-west-2

"Condition" : { "StringLike": { "s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*" } }
s3:DataAccessPointAccount

此範例顯示一個字串運算子,您可以使用它來比對存取點擁有者的帳戶 ID。下列範例會比對 AWS 帳戶 123456789012 擁有的所有存取點。

"Condition" : { "StringEquals": { "s3:DataAccessPointAccount": "123456789012" } }
s3:AccessPointNetworkOrigin

此範例顯示一個字串運算子,您可以使用它來比對網路來源,InternetVPC。下列範例僅會比對存取點與 VPC 來源。

"Condition" : { "StringEquals": { "s3:AccessPointNetworkOrigin": "VPC" } }

如需將條件金鑰與 Amazon S3 搭配使用的詳細資訊,請參閱服務授權參考中適用於 Amazon S3 的動作、資源和條件金鑰

將存取控制委派給存取點

您可以將儲存貯體的存取控制委派給儲存貯體的存取點。下列範例儲存貯體政策允許完整存取儲存貯體擁有者帳戶所擁有的所有存取點。因此,對此儲存貯體的所有存取皆由連接至其存取點的政策所控制。我們建議您針對不需要直接存取儲存貯體的所有使用案例,以此方式設定儲存貯體。

範例 6 - 將存取控制委派給存取點的儲存貯體政策
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "*", "Resource" : [ "Bucket ARN", "Bucket ARN/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" } } }] }

授予跨帳戶存取點的許可

若要建立另一個帳戶所擁有之儲存貯體的存取點,您必須先指定儲存貯體名稱和帳戶擁有者 ID 來建立存取點。然後,儲存貯體擁有者必須更新儲存貯體政策,以授權來自存取點的請求。建立存取點類似於建立 DNS CNAME,其中存取點不會提供儲存貯體內容的存取權。所有儲存貯體存取權都由儲存貯體政策控制。下列範例儲存貯體政策允許儲存貯體上來自受信任 AWS 帳戶所擁有之存取點的 GETLIST 請求。

儲存貯體 ARN 取代為值區的 ARN。

範例 7 — 儲存貯體政策委派權限給另一個 AWS 帳戶
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : ["s3:GetObject","s3:ListBucket"], "Resource" : [ "Bucket ARN", "Bucket ARN/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Access point owner's account ID" } } }] }