本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 VPC 條件金鑰來控制聯合存取
聯合身分使用者可以使用 AssumeRoleWithWebIdentity AssumeRoleWithSAML或透過 VPC 端點擔任角色。當它們這樣做時,您可以在角色的信任政策或資源控制政策 (RCPs) 中使用 VPC 特定的條件金鑰,以限制這些請求的來源。除了信任政策中的身分層級控制項之外,還提供網路層級界限。
主題
VPC 條件金鑰如何用於聯合請求
請求內容中可用的條件索引鍵取決於聯合請求的網路路徑。
條件鍵 |
透過 VPC 端點 |
透過公有網際網路 |
說明 |
|---|---|---|---|
|
是 |
否 |
請求周遊的 VPC ID |
|
是 |
否 |
請求周遊的 VPC ARN |
|
是 |
否 |
請求周遊的 VPC 端點 ID |
|
是 |
否 |
VPC 內呼叫者的私有 IP 地址 |
|
否 |
是 |
發起人的公有 IP 地址 |
如果您的信任政策在 Allow陳述式aws:SourceVpce中使用 aws:SourceVpc、 aws: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) 拒絕 AssumeRoleWithSAML 和 AssumeRoleWithWebIdentity請求,除非它們來自特定 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檢查之前,先徹底測試。