設定使用存取點IAM的政策 - Amazon Simple Storage Service

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

設定使用存取點IAM的政策

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

重要

當透過儲存貯體的名稱或 Amazon Resource Name () 直接存取儲存貯體時,將 S3 存取點新增至儲存貯體並不會變更儲存貯體的行為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許可Jane中的IAM使用者授予 GET和 具有字首的PUT物件 my-access-point 帳戶中 123456789012.

{ "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:::amzn-s3-demo-bucket1/Jane/*" }] }
範例 2 - 具有索引標籤條件的存取點政策

下列存取點政策會授予IAM使用者 Mateo 帳戶中 123456789012 透過存取點對GET物件的許可 my-access-point 帳戶中 123456789012 具有標籤索引鍵 資料 設定 的值為 財務.

{ "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 - 允許儲存貯體清單的存取點政策

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

{ "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網路原始伺服器的儲存貯體政策

下列儲存貯體政策會將儲存貯體的所有 S3 物件操作存取權限制amzn-s3-demo-bucket為具有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:::amzn-s3-demo-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 的動作、資源和條件金鑰

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

將存取控制委派給存取點

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

範例 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 請求。

Replace (取代) Bucket 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" } } }] }