View a markdown version of this page

使用 VPC 條件金鑰來控制聯合存取 - AWS Identity and Access Management

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

使用 VPC 條件金鑰來控制聯合存取

聯合身分使用者可以使用 AssumeRoleWithWebIdentity AssumeRoleWithSAML或透過 VPC 端點擔任角色。當它們這樣做時,您可以在角色的信任政策或資源控制政策 (RCPs) 中使用 VPC 特定的條件金鑰,以限制這些請求的來源。除了信任政策中的身分層級控制項之外,還提供網路層級界限。

VPC 條件金鑰如何用於聯合請求

請求內容中可用的條件索引鍵取決於聯合請求的網路路徑。

依網路路徑的 VPC 條件金鑰可用性

條件鍵

透過 VPC 端點

透過公有網際網路

說明

aws:SourceVpc

請求周遊的 VPC ID

aws:SourceVpcArn

請求周遊的 VPC ARN

aws:SourceVpce

請求周遊的 VPC 端點 ID

aws:VpcSourceIp

VPC 內呼叫者的私有 IP 地址

aws:SourceIp

發起人的公有 IP 地址

如果您的信任政策在 Allow陳述式aws:SourceVpce中使用 aws:SourceVpcaws:SourceVpcArn或 ,且請求未透過 VPC 端點,則條件不相符並隱 AWS 含拒絕請求。這實際上需要聯合請求周遊 VPC 端點才能成功。

重要

對於透過 VPC 端點提出的請求, aws:SourceIp 不會填入。請改將 aws:VpcSourceIp用於以 IP 為基礎的限制。

我們建議在信任政策aws:SourceVpc中使用 aws:SourceVpcArn,而不是 。VPC IDs區域上是唯一的,但並非全域唯一,而 aws:SourceVpcArn包含區域和帳戶,可提供 VPC 的全域唯一識別。

注意

下列 OIDC 範例中的對象 (aud) 值使用 sts.amazonaws.com,這是 Amazon EKS 的預設值。對於其他 OIDC 供應商,請以為您的應用程式設定的對象值 (例如用戶端 ID 或應用程式 URI) 取代此值。

範例:將 OIDC 聯合限制為特定 VPC

下列信任政策允許 OIDC 提供者只在請求透過 VPC 端點來自特定 VPC 時擔任角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOIDCFromVpc", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/idp.example.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "idp.example.com:aud": "sts.amazonaws.com", "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" } } } ] }

AWS 隱含拒絕來自指定 VPC 外部的請求,因為aws:SourceVpcArn條件不相符。不需要明確拒絕陳述式。

範例:將 SAML 聯合限制在特定 VPC 端點

下列信任政策允許 SAML 提供者只在請求通過特定 VPC 端點時擔任角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSAMLFromVpce", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:saml-provider/ExampleProvider" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml", "aws:SourceVpce": "vpce-0abcdef1234567890" } } } ] }

當您在同一 VPC 中有多個 VPC 端點,並想要限制對特定端點的存取時,使用 aws:SourceVpce而非 aws:SourceVpc可提供更精細的控制。

範例:依 VPC 內的私有 IP 範圍限制 OIDC 聯合

下列信任政策會將聯合限制為來自 VPC 內特定子網路的請求。aws:VpcSourceIp 用於透過 VPC 端點提出請求的 IP 型限制。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOIDCFromSubnet", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/idp.example.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "idp.example.com:aud": "sts.amazonaws.com", "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" }, "IpAddress": { "aws:VpcSourceIp": "10.0.1.0/24" } } } ] }
重要

對於透過 VPC 端點的請求,請勿aws:SourceIp搭配私有 IP 範圍使用 。aws:SourceIp 金鑰不適用於 VPC 端點請求。請改用 aws:VpcSourceIp

範例:將 SAML 聯合限制為多個 VPCs

下列信任政策允許 SAML 提供者從多個 VPCs中的任何一個擔任角色。當您的組織在不同環境或區域中擁有多個 VPCs,而這些 VPC 需要聯合存取相同角色時,此功能非常有用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSAMLFromMultipleVpcs", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:saml-provider/ExampleProvider" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml", "aws:SourceVpcArn": [ "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111aaa11", "arn:aws:ec2:us-east-1:111122223333:vpc/vpc-222bbb22" ] } } } ] }

範例:結合 VPC 和提供者特定的條件

您可以結合 VPC 條件金鑰與提供者特定的條件,例如對象 (aud) 和主體 (sub),以進行精細存取控制。下列信任政策會將角色假設限制在特定聯合身分使用者,並要求請求來自特定 VPC。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOIDCUserFromVpc", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/idp.example.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "idp.example.com:aud": "sts.amazonaws.com", "idp.example.com:sub": "user123", "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" } } } ] }

這結合了身分層級控制 (僅限特定聯合身分使用者) 和網路層級控制 (僅限特定 VPC),可提供深度防禦。

範例:使用 RCP 限制對特定 VPC 的聯合存取

下列資源控制政策 (RCP) 拒絕 AssumeRoleWithSAMLAssumeRoleWithWebIdentity請求,除非它們來自特定 VPC。與每個角色套用的信任政策不同,資源控制政策 (RCP) 適用於目標帳戶中的所有角色。這可提供集中式網路界限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyFederatedAccessOutsideVpc", "Effect": "Deny", "Principal": "*", "Action": [ "sts:AssumeRoleWithWebIdentity", "sts:AssumeRoleWithSAML" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" }, "Null": { "aws:SourceVpcArn": "false" } } } ] }

Null 條件可確保拒絕僅適用於aws:SourceVpcArn請求內容中存在 時 (即請求是透過 VPC 端點,但來自錯誤的 VPC)。如果沒有它, 也會拒絕透過公有網際網路 (其中 aws:SourceVpcArn 不存在) 提出的請求StringNotEquals。如果您移除Null檢查,拒絕也適用於未周遊任何 VPC 端點的請求,包括透過公有網際網路的請求。我們建議您在移除生產環境中的Null檢查之前,先徹底測試。