Uso de chaves de condição da VPC para controlar o acesso federado
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.
Tópicos
Como as chaves de condição da VPC funcionam no caso de solicitações federadas
Exemplo: restringir a federação do OIDC a uma VPC específica
Exemplo: restringir a federação do SAML a um endpoint da VPC específico
Exemplo: restringir a federação do OIDC por intervalo de IP privado em uma VPC
Exemplo: combinar condições específicas da VPC e do provedor
Exemplo: usar uma RCP para restringir o acesso federado a uma VPC específica
Como as chaves de condição da VPC funcionam no caso de solicitações federadas
As chaves de condição disponíveis no contexto da solicitação dependem do caminho de rede da solicitação federada.
Chave de condição |
Por meio do endpoint da VPC |
Pela internet pública |
Descrição |
|---|---|---|---|
|
Sim |
Não |
ID da VPC que a solicitação percorre |
|
Sim |
Não |
ARN da VPC que a solicitação percorre |
|
Sim |
Não |
ID do endpoint da VPC que a solicitação percorre |
|
Sim |
Não |
Endereço IP privado do chamador na VPC |
|
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 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 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 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 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
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 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.