

# Uso de las claves de condición de VPC para controlar el acceso federado
<a name="reference_sts_vpc_condition_keys_federated"></a>

Los usuarios federados pueden asumir roles con `AssumeRoleWithSAML` o `AssumeRoleWithWebIdentity` a través de un punto de conexión de VPC. Cuando los asuman, usted puede usar claves de condición específicas de VPC en la política de confianza del rol o en las políticas de control de recursos (RCP) para restringir el origen de estas solicitudes. Esto establece un límite a nivel de red, además de los controles a nivel de identidad de la política de confianza.

**Topics**
+ [Cómo funcionan las claves de condición de VPC para las solicitudes federadas](#reference_sts_vpc_condition_keys_federated_how)
+ [Ejemplo: restringir la federación de OIDC a una VPC específica](#reference_sts_vpc_condition_keys_federated_example_oidc_vpc)
+ [Ejemplo: restringir la federación de SAML a un punto de conexión de VPC específico](#reference_sts_vpc_condition_keys_federated_example_saml_vpce)
+ [Ejemplo: restringir la federación de OIDC por rango de IP privadas dentro de una VPC](#reference_sts_vpc_condition_keys_federated_example_ip)
+ [Ejemplo: restringir la federación de SAML a varias VPC](#reference_sts_vpc_condition_keys_federated_example_saml_multi_vpc)
+ [Ejemplo: combinar la VPC y las condiciones específicas del proveedor](#reference_sts_vpc_condition_keys_federated_example_combined)
+ [Ejemplo: usar una RCP para restringir el acceso federado a una VPC específica](#reference_sts_vpc_condition_keys_federated_example_rcp)

## Cómo funcionan las claves de condición de VPC para las solicitudes federadas
<a name="reference_sts_vpc_condition_keys_federated_how"></a>

Las claves de condición disponibles en el contexto de la solicitud dependen de la ruta de red de la solicitud federada.


**Disponibilidad de la clave de condición de VPC por ruta de red**  

| Clave de condición | Mediante el punto de conexión de VPC | A través del Internet público | Descripción | 
| --- | --- | --- | --- | 
| `aws:SourceVpc` | Sí | No | ID de VPC que atraviesa la solicitud | 
| `aws:SourceVpcArn` | Sí | No | ARN de la VPC que atraviesa la solicitud | 
| `aws:SourceVpce` | Sí | No | ID del punto de conexión de VPC que atraviesa la solicitud | 
| `aws:VpcSourceIp` | Sí | No | Dirección IP privada del intermediario dentro de la VPC | 
| `aws:SourceIp` | No | Sí | Dirección IP pública del intermediario | 

Si su política de confianza utiliza `aws:SourceVpc`, `aws:SourceVpcArn` o `aws:SourceVpce` en una instrucción `Allow` y la solicitud no pasa por un punto de conexión de VPC, la condición no coincidirá y AWS denegará implícitamente la solicitud. Esto requiere que las solicitudes federadas atraviesen el punto de conexión de VPC para que se realicen correctamente.

**importante**  
En el caso de las solicitudes realizadas a través de un punto de conexión de VPC, `aws:SourceIp` no se rellena. En su lugar, utilice `aws:VpcSourceIp` para restricciones basadas en IP.

Recomendamos usar `aws:SourceVpcArn` en lugar de `aws:SourceVpc` en las políticas de confianza. Los ID de VPC son únicos a nivel regional, pero no a nivel global. Sin embargo, `aws:SourceVpcArn` incluye la región y la cuenta, lo que brinda una identificación única global de la VPC.

**nota**  
El valor de audiencia (`aud`) de los siguientes ejemplos de OIDC utiliza `sts.amazonaws.com`, que es el valor predeterminado de Amazon EKS. En el caso de otros proveedores de OIDC, sustitúyalo por el valor de audiencia configurado en su aplicación (por ejemplo, un ID de cliente o un URI de la aplicación).

## Ejemplo: restringir la federación de OIDC a una VPC específica
<a name="reference_sts_vpc_condition_keys_federated_example_oidc_vpc"></a>

La siguiente política de confianza permite que un proveedor de OIDC asuma el rol solo cuando la solicitud se origina en una VPC específica mediante un punto de conexión de 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 deniega implícitamente las solicitudes ajenas a la VPC especificada, ya que la condición `aws:SourceVpcArn` no coincide. No se necesita una instrucción de denegación explícita.

## Ejemplo: restringir la federación de SAML a un punto de conexión de VPC específico
<a name="reference_sts_vpc_condition_keys_federated_example_saml_vpce"></a>

La siguiente política de confianza permite que un proveedor de SAML asuma el rol solo cuando la solicitud llega mediante un punto de conexión de VPC específico.

```
{
    "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"
                }
            }
        }
    ]
}
```

Usar `aws:SourceVpce` en lugar de `aws:SourceVpc` entrega un control más detallado cuando tiene varios puntos de conexión de VPC en la misma VPC y desea restringir el acceso a un punto de conexión específico.

## Ejemplo: restringir la federación de OIDC por rango de IP privadas dentro de una VPC
<a name="reference_sts_vpc_condition_keys_federated_example_ip"></a>

La siguiente política de confianza restringe la federación a las solicitudes que se originan en una subred específica de la VPC. Utilice `aws:VpcSourceIp` para restricciones basadas en IP en las solicitudes realizadas mediante un punto de conexión de VPC.

```
{
    "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"
                }
            }
        }
    ]
}
```

**importante**  
No utilice `aws:SourceIp` con rangos de IP privadas para solicitudes mediante un punto de conexión de VPC. La clave `aws:SourceIp` no está disponible para las solicitudes del punto de conexión de VPC. En su lugar, use `aws:VpcSourceIp`.

## Ejemplo: restringir la federación de SAML a varias VPC
<a name="reference_sts_vpc_condition_keys_federated_example_saml_multi_vpc"></a>

La siguiente política de confianza permite que un proveedor de SAML asuma el rol desde cualquiera de varias VPC. Esto es útil cuando su organización tiene varias VPC en diferentes entornos o regiones que requieren acceso federado al mismo rol.

```
{
    "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"
                    ]
                }
            }
        }
    ]
}
```

## Ejemplo: combinar la VPC y las condiciones específicas del proveedor
<a name="reference_sts_vpc_condition_keys_federated_example_combined"></a>

Combine las claves de condición de la VPC con condiciones específicas del proveedor, como la audiencia (`aud`) y el asunto (`sub`), para un control de acceso detallado. La siguiente política de confianza restringe la asignación de roles a un usuario federado específico y exige que la solicitud se origine en una VPC específica.

```
{
    "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"
                }
            }
        }
    ]
}
```

Esto combina controles a nivel de identidad (restringidos a un usuario federado específico) con controles a nivel de red (restringidos a una VPC específica), lo que brinda una defensa a fondo.

## Ejemplo: usar una RCP para restringir el acceso federado a una VPC específica
<a name="reference_sts_vpc_condition_keys_federated_example_rcp"></a>

La siguiente política de control de recursos (RCP) deniega las solicitudes `AssumeRoleWithSAML` y `AssumeRoleWithWebIdentity` a menos que se originen en una VPC específica. A diferencia de las políticas de confianza que se aplican por rol, una política de control de recursos (RCP) se aplica a todos los roles de las cuentas de destino. Esto brinda un límite de red centralizado.

```
{
    "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"
                }
            }
        }
    ]
}
```

La condición `Null` garantiza que la denegación solo se aplique cuando `aws:SourceVpcArn` esté presente en el contexto de la solicitud (es decir, la solicitud llegó a través de un punto de conexión de VPC, pero desde una VPC incorrecta). Sin ella, `StringNotEquals` también denegaría las solicitudes a través de la Internet pública (donde `aws:SourceVpcArn` no está presente). Si elimina la comprobación `Null`, la denegación también se aplica a las solicitudes que no atraviesan ningún punto de conexión de VPC, como las solicitudes a través de la Internet pública. Recomendamos realizar pruebas exhaustivas antes de eliminar la comprobación `Null` en los entornos de producción.