適用於 Amazon S3 的端點 - Amazon Virtual Private Cloud

適用於 Amazon S3 的端點

如果您已從 VPC 設定對 Amazon S3 資源的存取權,您即可在設定端點之後繼續使用 Amazon S3 DNS 名稱來存取這些資源。但是,請記得下列事項:

  • 您端點的原則可控制如何使用端點來存取 Amazon S3 資源。預設政策允許 VPC 內的任何使用者或服務使用任意 AWS 帳戶 的登入資料來存取所有 Amazon S3 資源,包括 AWS 帳戶 (不是與 VPC 建立關聯的帳戶) 的 Amazon S3 資源。如需詳細資訊,請參閱 使用 VPC 端點控制對服務的存取

  • Amazon S3 所接收之受影響子網路中執行個體的來源 IPv4 地址,會從公有 IPv4 地址變更為 VPC 中的私有 IPv4 地址。端點會切換網路路由,以及中斷連線開啟的 TCP 連線。使用公有 IPv4 地址的先前連線不會繼續。建議您在建立或修改端點時不要執行重要任務,或者建議您進行測試,確保軟體在斷線之後可以自動重新連線至 Amazon S3。

  • 您無法使用 IAM 原則或儲存貯體原則來允許從 VPC IPv4 CIDR 範圍存取 (私有 IPv4 地址範圍)。VPC CIDR 區塊可以重疊或相同,這樣可能會導致未預期的結果。因此,您無法在透過 VPC 端點請求 Amazon S3 的 IAM 原則中使用 aws:SourceIp 條件。這適用於使用者和角色的 IAM 原則,以及任何儲存貯體原則。如果陳述式包含 aws:SourceIp 條件,則值不符合任何提供的 IP 地址或範圍。相反地,您可以執行下列作業:

    • 使用路由表來控制哪些執行個體可以透過端點來存取 Amazon S3 中的資源。

    • 對於儲存貯體政策,您可以限制存取特定端點或特定 VPC。如需詳細資訊,請參閱 使用 Amazon S3 儲存貯體政策

  • 端點目前不支援跨區域請求。請確定您在與儲存貯體相同的區域中建立端點。您可以使用 Amazon S3 主控台或使用 get-bucket-location 命令來找到儲存貯體的位置。使用區域特定 Amazon S3 端點來存取儲存貯體,例如 mybucket.s3.us-west-2.amazonaws.com。如需有關 Amazon S3 特定區域端點的詳細資訊,請參閱 Amazon Web Services 一般參考中的 Amazon Simple Storage Service (S3)。如果您使用 AWS CLI 向 Amazon S3 提出請求,請將預設區域設定為與您儲存貯體相同的區域,或在請求中使用 --region 參數。

    注意

    將 Amazon S3 的美國標準區域視為映射至 us-east-1 區域。

  • 目前只有端點才支援 IPv4 流量。

在您於 Amazon S3 使用端點之前,請確定您已閱讀下列一般限制:閘道端點限制。如需建立和檢視 S3 儲存貯體的資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的如何建立 S3 儲存貯體以及如何檢視 S3 儲存貯體的屬性

如果您在 VPC 中使用其他 AWS 服務,這些服務可能會將 S3 儲存貯體用於特定任務。請確定您的端點原則允許完整存取 Amazon S3 (預設原則),或允許存取這些服務所使用的特定儲存貯體。或者,只在所有這些服務未使用的子網路中建立端點,以允許服務繼續使用公有 IP 地址來存取 S3 儲存貯體。

下表列出端點可能影響的 AWS 服務,以及每項服務的所有特定資訊。

AWS 服務 注意
Amazon AppStream 2.0 您的端點原則必須允許存取 AppStream 2.0 用來存放使用者內容的特定儲存貯體。如需詳細資訊,請參閱 Amazon AppStream 2.0 管理指南中的針對主資料夾和應用程式設定持續性使用 Amazon S3 VPC 端點
AWS CloudFormation 如果您 VPC 中的資源必須回應等待條件或自訂資源請求,則端點政策必須允許至少存取這些資源所使用的特定儲存貯體。如需詳細資訊,請參閱設定 AWS CloudFormation 的 VPC 端點
CodeDeploy 您的端點原則必須允許完整存取 Amazon S3,或允許存取您已為 CodeDeploy 部署所建立的任何 S3 儲存貯體。
Elastic Beanstalk 您的端點原則必須至少具備能存取用於 Elastic Beanstalk 應用程式的任何 S3 儲存貯體的權限。如需詳細資訊,請參閱 AWS Elastic Beanstalk 開發人員指南中的搭配使用 Amazon S3 與 Elastic Beanstalk
Amazon EMR 您的端點原則必須允許存取 Amazon EMR 所使用的 Amazon Linux 儲存庫和其他儲存貯體。如需詳細資訊,請參閱 Amazon EMR 管理指南中的私有子網路最低要求的 Amazon S3 原則
AWS OpsWorks 您的端點原則必須允許至少存取 AWS OpsWorks 所使用的特定儲存貯體 如需詳細資訊,請參閱 AWS OpsWorks 使用者指南中的在 VPC 中執行堆疊
AWS Systems Manager

您的端點政策必須允許存取修補程式管理員所使用的 Amazon S3 儲存貯體,以便在您的 AWS 區域中修補基準操作。這些儲存貯體包含修補程式基準服務所擷取並在執行個體上執行的程式碼。如需詳細資訊,請參閱 AWS Systems Manager 使用者指南中的建立 Virtual Private Cloud 端點

如需 SSM Agent 對其操作所要求的 S3 儲存貯體許可清單,請參閱 AWS Systems Manager 使用者指南中的 SSM Agent 的最低 S3 儲存貯體許可

Amazon Elastic Container Registry 您的端點政策必須允許存取 Amazon ECR 用來存放 Docker 影像層的 Amazon S3 儲存貯體。如需詳細資訊,請參閱 Amazon Elastic Container Registry 使用者指南中的 Amazon ECR 的最低 Amazon S3 儲存貯體許可
Amazon WorkDocs 如果您在 WorkSpaces 或 EC2 執行個體中使用 Amazon WorkDocs 用戶端,則端點政策必須允許完整存取 Amazon S3。
WorkSpaces WorkSpaces 並不直接相依於 Amazon S3。不過,如果您提供具有網際網路存取權的 WorkSpaces 使用者,則請注意其他公司的網站、HTML 電子郵件和網際網路服務可能相依於 Amazon S3。請確定您的端點原則允許完整存取 Amazon S3,以允許這些服務繼續正常運作。

您的 VPC 與 S3 儲存貯體之間的流量會在 Amazon 網路的範圍內。

Amazon S3 的端點政策

下列範例端點原則用於存取 Amazon S3。如需詳細資訊,請參閱 使用 VPC 端點政策。符合其業務需求的政策限制,由使用者決定。

重要

所有類型的原則 (IAM 使用者原則、端點原則、S3 儲存貯體原則和 Amazon S3 ACL 原則 (如果有)) 都必須授予成功存取 Amazon S3 的必要許可。

AWS 建議您在限制特定呼叫者使用端點時,在 VPC 端點原則中使用 IAM 條件而非 IAM Principal 元素。這類條件的範例包括 aws:PrincipalArnaws:PrincipalAccountaws:PrincipalOrgIdaws:PrincipalOrgPaths。如需有關全域條件內容金鑰的詳細資訊,請參閱 AWS Identity and Access Management 使用者指南中的 AWS 全域條件內容金鑰

範例:限制特定儲存貯體的存取

您可以建立政策,以限制只存取特定 S3 儲存貯體。如果您在 VPC 中具有使用 S3 儲存貯體的其他 AWS 服務,這會十分有用。下列政策範例僅限制對指定儲存貯體的存取權。

{ "Sid": "AccessToSpecificBucket", "Effect": "Allow", "Principal": "*", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::example-bucket", "arn:aws:s3:::example-bucket/*" ] }

範例:將此 VPC 端點的使用限制在帳戶中的特定 IAM 角色

您可以建立一個政策,將 VPC 端點的使用限制為特定 IAM 角色。下列範例在指定帳戶中限制了對指定角色的存取權。

{ "Sid": "Restrict-acess-to-specific-IAM-role", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "ArnEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/SomeRole" } } }

範例:將此 VPC 端點的使用限制為特定帳戶中的使用者

您可以建立將 VPC 端點的使用限制為特定帳戶的政策。下列範例在指定帳戶中限制了對使用者的存取權。

{ "Sid": "AllowCallersFromAccount111122223333", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalAccount": "111122223333" } } }

範例:啟用 Amazon Linux AMI 儲存庫的存取

Amazon Linux AMI 儲存庫是每個區域中的 Amazon S3 儲存貯體。如果您想要 VPC 中的執行個體透過端點存取儲存庫,請建立啟用存取這些儲存貯體的端點政策。

下列政策允許存取 Amazon Linux 儲存庫。

您需要將 region 更換為 AWS 區域,例如 us-east-1

{ "Statement": [ { "Sid": "AmazonLinuxAMIRepositoryAccess", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::packages.region.amazonaws.com/*", "arn:aws:s3:::repo.region.amazonaws.com/*" ] } ] }

下列政策允許存取 Amazon Linux 2 儲存庫。

您需要將 region 更換為 AWS 區域,例如 us-east-1

{ "Statement": [ { "Sid": "AmazonLinux2AMIRepositoryAccess", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amazonlinux.region.amazonaws.com/*" "arn:aws:s3:::amazonlinux-2-repos-region/*" ] } ] }

使用 Amazon S3 儲存貯體政策

您可以使用儲存貯體政策,控制從特定端點、VPC、IP 地址範圍或 AWS 帳戶 對儲存貯體的存取。

您無法在透過 VPC 端點請求 Amazon S3 的儲存貯體原則中使用 aws:SourceIp 條件。條件不符合任何指定的 IP 地址或 IP 地址範圍,而且當您請求 Amazon S3 儲存貯體時,可能會有非預期的效果。例如:

  • 您儲存貯體政策的 Deny 效果和 NotIpAddress 條件是要授予僅來自單一或有限 IP 地址範圍的存取權。對於透過端點請求儲存貯體,NotIpAddress 條件一律必須相符,並且基於政策中之其他限制相符的假設,套用陳述式的效果。儲存貯體的存取會遭拒。

  • 您儲存貯體政策的 Deny 效果和 IpAddress 條件是要拒絕僅存取單一或有限 IP 地址範圍。對於透過端點請求儲存貯體,條件不相符,而且不會套用陳述式。允許存取儲存貯體,但假設有其他陳述式允許在沒有 IpAddress 條件的情況下存取。

請改用 aws:VpcSourceIp 來控制來自特定 IP 地址範圍的存取。

若要讓 IAM 使用者能夠使用儲存貯體政策,您必須授予他們使用 s3:GetBucketPolicys3:PutBucketPolicy 動作的許可。

如需 Amazon S3 儲存貯體政策的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用儲存貯體政策和使用者政策

範例:限制特定端點的存取

您可以使用 aws:sourceVpce 條件,建立儲存貯體政策來限制對特定端點的存取。下列範例中的 S3 儲存貯體政策只允許從端點 vpce-1a2b3c4d 存取特定儲存貯體 example_bucket。如果未使用指定的端點,政策會拒絕所有對儲存貯體的存取。aws:sourceVpce 條件不需要 VPC 端點資源的 ARN,其只需要端點 ID。此示例假定還有一個政策聲明,允許您的使用案例所需的存取權限。

{ "Version": "2012-10-17", "Id": "Access-to-bucket-using-specific-endpoint", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }

範例:限制特定 VPC 的存取

您可以使用 aws:sourceVpc 條件,建立儲存貯體政策來限制對特定 VPC 的存取。如果您在相同的 中設定多個 VPC 端點,而且想要管理所有端點的 S3 儲存貯體存取,則這十分有用。下列政策範例允許 VPC vpc-111bbb22 存取 example_bucket 和其物件。如果未使用指定的 VPC,政策會拒絕所有對儲存貯體的存取。aws:sourceVpc 條件不需要 VPC 資源的 ARN,其只需要 VPC ID。此示例假定還有一個政策聲明,允許您的使用案例所需的存取權限。

{ "Version": "2012-10-17", "Id": "Access-to-bucket-using-specific-VPC", "Statement": [ { "Sid": "Access-to-specific-VPC-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-111bbb22" } } } ] }

範例:限制對特定 IP 地址範圍的存取

您可以使用 aws:VpcSourceIp 條件,建立政策來限制對特定 IP 地址範圍的存取。下列範例中的政策允許 172.31.0.0/16 存取 example_bucket 和其物件。政策會拒絕其他 IP 地址範圍對儲存貯體的存取。此示例假定還有一個政策聲明,允許您的使用案例所需的存取權限。

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPC-CIDR-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "NotIpAddress": { "aws:VpcSourceIp": "172.31.0.0/16" } } } ] }

範例:限制對特定 AWS 帳戶 中儲存貯體的存取

您可以使用 s3:ResourceAccount 條件,建立政策來限制對特定 AWS 帳戶 中 S3 儲存貯體的存取。如果您想要限制 VPC 內的用戶端存取您未擁有的儲存貯體,這會非常有用。以下為限制對單一 AWS 帳戶 (帳戶 ID 為 111122223333) 所擁有之資源的存取的政策範例。此示例假定還有一個政策聲明,允許您的使用案例所需的存取權限。

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-bucket-in-specific-account-only", "Effect": "Deny", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "111122223333" } } } ] }