

# Uso de chaves de condição da VPC para controlar o acesso federado
<a name="reference_sts_vpc_condition_keys_federated"></a>

Os usuários federados podem assumir funções usando `AssumeRoleWithSAML` ou `AssumeRoleWithWebIdentity` por meio de um endpoint da VPC. Quando essas funções são assumidas, é possível usar chaves de condição específicas da VPC na política de confiança da função ou nas políticas de controle de recursos (RCPs) para restringir a origem dessas solicitações. Essa ação delimita a rede e permite controles de identidade na política de confiança.

**Topics**
+ [Como as chaves de condição da VPC funcionam no caso de solicitações federadas](#reference_sts_vpc_condition_keys_federated_how)
+ [Exemplo: restringir a federação do OIDC a uma VPC específica](#reference_sts_vpc_condition_keys_federated_example_oidc_vpc)
+ [Exemplo: restringir a federação do SAML a um endpoint da VPC específico](#reference_sts_vpc_condition_keys_federated_example_saml_vpce)
+ [Exemplo: restringir a federação do OIDC por intervalo de IP privado em uma VPC](#reference_sts_vpc_condition_keys_federated_example_ip)
+ [Exemplo: restringir a federação de SAML a várias VPCs](#reference_sts_vpc_condition_keys_federated_example_saml_multi_vpc)
+ [Exemplo: combinar condições específicas da VPC e do provedor](#reference_sts_vpc_condition_keys_federated_example_combined)
+ [Exemplo: usar uma RCP para restringir o acesso federado a uma VPC específica](#reference_sts_vpc_condition_keys_federated_example_rcp)

## Como as chaves de condição da VPC funcionam no caso de solicitações federadas
<a name="reference_sts_vpc_condition_keys_federated_how"></a>

As chaves de condição disponíveis no contexto da solicitação dependem do caminho de rede da solicitação federada.


**Disponibilidade da chave de condição da VPC de acordo com o caminho de rede**  

| Chave de condição | Por meio do endpoint da VPC | Pela internet pública | Descrição | 
| --- | --- | --- | --- | 
| `aws:SourceVpc` | Sim | Não | ID da VPC que a solicitação percorre | 
| `aws:SourceVpcArn` | Sim | Não | ARN da VPC que a solicitação percorre | 
| `aws:SourceVpce` | Sim | Não | ID do endpoint da VPC que a solicitação percorre | 
| `aws:VpcSourceIp` | Sim | Não | Endereço IP privado do chamador na VPC | 
| `aws:SourceIp` | Não | Sim | Endereço IP público do chamador | 

Se sua política de confiança usa `aws:SourceVpc`, `aws:SourceVpcArn` ou `aws:SourceVpce` em uma instrução `Allow` e a solicitação não é realizada por meio de um endpoint da VPC, a condição não é considerada correspondente e a AWS nega implicitamente a solicitação. Isso exige que as solicitações federadas percorram efetivamente o endpoint da VPC para que tenham êxito.

**Importante**  
No caso de solicitações feitas por meio de um endpoint da VPC, `aws:SourceIp` não é preenchido. Em vez disso, use `aws:VpcSourceIp` para restrições com base em IP.

Recomendamos o uso de `aws:SourceVpcArn`, em vez de `aws:SourceVpc`, nas políticas de confiança. As IDs da VPC são exclusivas regionalmente, mas não globalmente, ao passo que `aws:SourceVpcArn` inclui a região e a conta, fornecendo uma identificação exclusiva global da VPC.

**nota**  
O valor de audiência (`aud`) nos exemplos de OIDC a seguir usa `sts.amazonaws.com`, que é o padrão para o Amazon EKS. Para outros provedores de OIDC, substitua esse valor pelo valor do destinatário (audience value) configurado para sua aplicação (por exemplo, ID do cliente ou URI da aplicação).

## Exemplo: restringir a federação do OIDC a uma VPC específica
<a name="reference_sts_vpc_condition_keys_federated_example_oidc_vpc"></a>

A política de confiança a seguir permite que um provedor de OIDC assuma a função somente quando a solicitação tem como origem uma VPC específica por meio de um endpoint da 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"
                }
            }
        }
    ]
}
```

A AWS nega implicitamente as solicitações provenientes de fora da VPC especificada porque a condição `aws:SourceVpcArn` não é correspondente. Nenhuma instrução de negação explícita é necessária.

## Exemplo: restringir a federação do SAML a um endpoint da VPC específico
<a name="reference_sts_vpc_condition_keys_federated_example_saml_vpce"></a>

A política de confiança a seguir permite que um provedor de SAML assuma a função somente quando a solicitação tem como origem um endpoint da 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"
                }
            }
        }
    ]
}
```

O uso de `aws:SourceVpce`, em vez de `aws:SourceVpc`, fornece um controle mais detalhado quando há vários endpoints da VPC na mesma VPC e você deseja restringir o acesso a um endpoint específico.

## Exemplo: restringir a federação do OIDC por intervalo de IP privado em uma VPC
<a name="reference_sts_vpc_condition_keys_federated_example_ip"></a>

A política de confiança a seguir restringe a federação às solicitações originadas de uma sub-rede específica dentro da VPC. Use `aws:VpcSourceIp` para restrições baseadas em IP em solicitações realizadas por meio de um endpoint da 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**  
Não use `aws:SourceIp` com intervalos de IP privados para solicitações por meio de um endpoint da VPC. A chave `aws:SourceIp` não está disponível para solicitações realizadas por um endpoint da VPC. Use `aws:VpcSourceIp` em vez disso.

## Exemplo: restringir a federação de SAML a várias VPCs
<a name="reference_sts_vpc_condition_keys_federated_example_saml_multi_vpc"></a>

A política de confiança a seguir permite que um provedor de SAML assuma a função de qualquer uma das várias VPCs. Isso é útil quando sua organização tem várias VPCs em diferentes ambientes ou regiões que precisam de acesso federado à mesma função.

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

## Exemplo: combinar condições específicas da VPC e do provedor
<a name="reference_sts_vpc_condition_keys_federated_example_combined"></a>

Você pode combinar chaves de condição da VPC com condições específicas do provedor, como audience (`aud`) e subject (`sub`), para um controle de acesso mais detalhado. A política de confiança a seguir restringe a um usuário federado específico a execução de uma função e exige que a solicitação tenha como origem uma 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"
                }
            }
        }
    ]
}
```

A política combina controles de identidade (restringindo a um usuário federado específico) com controles de rede (restringindo a uma VPC específica), proporcionando uma defesa profunda.

## Exemplo: usar uma RCP para restringir o acesso federado a uma VPC específica
<a name="reference_sts_vpc_condition_keys_federated_example_rcp"></a>

A política de controle de recursos (RCP) a seguir nega as solicitações `AssumeRoleWithSAML` e `AssumeRoleWithWebIdentity`, a menos que tenham sido originadas por uma VPC específica. Ao contrário das políticas de confiança que se aplicam por função, uma política de controle de recursos (RCP) se aplica a todas as funções nas contas de destino. Isso fornece um limite de rede 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"
                }
            }
        }
    ]
}
```

A condição `Null` garante que a negação só se aplique quando `aws:SourceVpcArn` estiver presente no contexto da solicitação (ou seja, a solicitação teve como origem um endpoint da VPC, mas da VPC errada). Sem isso, as solicitações pela internet pública (em que `aws:SourceVpcArn` está ausente) também seriam negadas por `StringNotEquals`. Se a verificação `Null` for removida, a negação também se aplicará às solicitações que não percorram nenhum endpoint da VPC, inclusive as solicitações pela internet pública. Recomendamos testar minuciosamente antes de remover a verificação `Null` nos ambientes de produção.