

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

# 使用 VPC 條件金鑰來控制聯合存取
<a name="reference_sts_vpc_condition_keys_federated"></a>

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

**Topics**
+ [VPC 條件金鑰如何用於聯合請求](#reference_sts_vpc_condition_keys_federated_how)
+ [範例：將 OIDC 聯合限制為特定 VPC](#reference_sts_vpc_condition_keys_federated_example_oidc_vpc)
+ [範例：將 SAML 聯合限制在特定 VPC 端點](#reference_sts_vpc_condition_keys_federated_example_saml_vpce)
+ [範例：依 VPC 內的私有 IP 範圍限制 OIDC 聯合](#reference_sts_vpc_condition_keys_federated_example_ip)
+ [範例：將 SAML 聯合限制為多個 VPCs](#reference_sts_vpc_condition_keys_federated_example_saml_multi_vpc)
+ [範例：結合 VPC 和提供者特定的條件](#reference_sts_vpc_condition_keys_federated_example_combined)
+ [範例：使用 RCP 限制對特定 VPC 的聯合存取](#reference_sts_vpc_condition_keys_federated_example_rcp)

## VPC 條件金鑰如何用於聯合請求
<a name="reference_sts_vpc_condition_keys_federated_how"></a>

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


**依網路路徑的 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: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
<a name="reference_sts_vpc_condition_keys_federated_example_oidc_vpc"></a>

下列信任政策允許 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 端點
<a name="reference_sts_vpc_condition_keys_federated_example_saml_vpce"></a>

下列信任政策允許 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 聯合
<a name="reference_sts_vpc_condition_keys_federated_example_ip"></a>

下列信任政策會將聯合限制為來自 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
<a name="reference_sts_vpc_condition_keys_federated_example_saml_multi_vpc"></a>

下列信任政策允許 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 和提供者特定的條件
<a name="reference_sts_vpc_condition_keys_federated_example_combined"></a>

您可以結合 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 的聯合存取
<a name="reference_sts_vpc_condition_keys_federated_example_rcp"></a>

下列資源控制政策 (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`檢查之前，先徹底測試。