本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設IAM定使用存取點的原則
Amazon S3 存取點支援 AWS Identity and Access Management (IAM) 資源政策,可讓您依資源、使用者或其他條件控制存取點的使用。若要讓應用程式或使用者能夠透過存取點存取物件,存取點和基礎儲存貯體都必須允許該請求。
重要
透過儲存貯體的名稱或 Amazon 資源名稱 (ARN) 直接存取儲存貯體時,將 S3 存取點新增至儲存貯體並不會改變儲存貯體的行為。針對儲存貯體的所有現有操作將繼續像以前一樣運作。您在存取點政策中包含的限制僅適用透過該存取點進行的請求。
當您使用IAM資源原則時,請務必先解決安全性警告、錯誤、一般警告和建議, AWS Identity and Access Management Access Analyzer 然後再儲存原則。IAMAccess Analyzer 會執行原則檢查,以根據原則文法和最佳做法來驗證您的IAM政策。這些檢查會產生問題清單並提供建議,協助您撰寫具有功能性且符合安全最佳實務的政策。
若要深入了解如何使用IAM存取分析器驗證原則,請參閱使用IAM者指南中的IAM存取分析器原則驗證。若要檢視存取分析器傳回的警告、錯誤和建議清單,請參閱IAMIAM存取分析器原則檢查參考資料。
存取點政策範例
下列範例示範如何建立IAM原則,以控制透過存取點發出的要求。
注意
存取點政策中授予的權限只有在基礎儲存貯體也允許相同的存取時才有效。您可以透過兩種方式完成此操作:
-
(建議) 如將存取控制委派給存取點中所述,將儲存貯體的存取控制委派給存取點。
-
將存取點政策中包含的相同權限新增至基礎儲存貯體的政策。範例 1 存取點政策範例示範如何修改基礎儲存貯體原則,以允許必要的存取。
範例 1 - 授予存取點政策
下列存取點原則會
透過存取點授與IAM使用者Jane/
帳號Jane
權限,以123456789012
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使用者
在帳戶 馬特奧
透過存取點存取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 - 允許儲存貯體清單的存取點政策
下列存取點原則允許IAM使用者Arnav
在帳戶中
檢視存取點底層值區中包含的物件的權限 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 物件操作存
取具有VPC網路來源的存取點。amzn-s3-demo-bucket
重要
使用類似此範例所示的陳述式之前,請確定您不需要使用存取點不支援的功能,例如跨區域複寫。
{ "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
-
此範例顯示一個字串運算子,您可以使用它來比對網路來源,
Internet
或VPC
。下列範例只會比對具有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 來建立存取點。然後,儲存貯體擁有者必須更新儲存貯體政策,以授權來自存取點的請求。建立存取點類似於建立DNSCNAME存取點,存取點不會提供值區內容的存取權。所有儲存貯體存取權都由儲存貯體政策控制。下列範例儲存貯體政策允許儲存貯體上來自受信任 AWS 帳戶所擁有之存取點的 GET
和 LIST
請求。
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
" } } }] }