View a markdown version of this page

VPC 조건 키를 사용하여 페더레이션 액세스 제어 - AWS Identity and Access Management

VPC 조건 키를 사용하여 페더레이션 액세스 제어

페더레이션 사용자는 VPC 엔드포인트를 통해 AssumeRoleWithSAML 또는 AssumeRoleWithWebIdentity를 사용하여 역할을 수임할 수 있습니다. 이 경우 역할의 신뢰 정책 또는 리소스 제어 정책(RCP)에서 VPC별 조건 키를 사용하여 이러한 요청이 시작될 수 있는 위치를 제한할 수 있습니다. 이를 통해 신뢰 정책의 자격 증명 기반 제어뿐만 아니라 네트워크 수준의 경계도 설정할 수 있습니다.

페더레이션 요청에 대한 VPC 조건 키 작동 방식

요청 컨텍스트에서 사용할 수 있는 조건 키는 페더레이션 요청의 네트워크 경로에 따라 다릅니다.

네트워크 경로별 VPC 조건 키 사용 가능 여부

조건 키

VPC 엔드포인트를 통해

퍼블릭 인터넷을 통해

설명

aws:SourceVpc

아니요

요청이 통과하는 VPC ID

aws:SourceVpcArn

아니요

요청이 통과하는 VPC의 ARN

aws:SourceVpce

아니요

요청이 통과하는 VPC 엔드포인트 ID

aws:VpcSourceIp

아니요

VPC 내 호출자의 프라이빗 IP 주소

aws:SourceIp

아니요

호출자의 퍼블릭 IP 주소

신뢰 정책이 Allow 문에서 aws:SourceVpc, aws:SourceVpcArn 또는 aws:SourceVpce를 사용하고 요청이 VPC 엔드포인트를 통과하지 않는 경우 조건이 일치하지 않고 AWS는 묵시적으로 요청을 거부합니다. 이렇게 하면 페더레이션 요청이 성공하기 위해 VPC 엔드포인트를 통과해야 합니다.

중요

VPC 엔드포인트를 통해 이루어진 요청의 경우 aws:SourceIp는 채워지지 않습니다. 대신 IP 기반 제한에 aws:VpcSourceIp를 사용합니다.

신뢰 정책에서는 aws:SourceVpc 대신 aws:SourceVpcArn을 사용하는 것이 좋습니다. VPC ID는 리전별로 고유하지만 전역적으로 고유하지는 않습니다. 하지만 aws:SourceVpcArn에는 리전과 계정이 포함되어 있어 VPC를 전역적으로 고유하게 식별할 수 있습니다.

참고

다음 OIDC 예제의 대상(aud) 값은 Amazon EKS의 기본값인 sts.amazonaws.com을 사용합니다. 다른 OIDC 공급자의 경우 이를 애플리케이션에 대해 구성된 대상 값(예: 클라이언트 ID 또는 애플리케이션 URI)으로 바꿉니다.

예: OIDC 페더레이션을 특정 VPC로 제한

다음 신뢰 정책은 요청이 VPC 엔드포인트를 통해 특정 VPC에서 시작된 경우에만 OIDC 공급자가 역할을 수임하도록 허용합니다.

{ "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는 aws:SourceVpcArn 조건이 일치하지 않기 때문에 지정된 VPC 외부의 요청을 묵시적으로 거부합니다. 명시적 거부 문은 필요하지 않습니다.

예: SAML 페더레이션을 특정 VPC 엔드포인트로 제한

다음 신뢰 정책에서는 요청이 특정 VPC 엔드포인트를 통해 들어오는 경우에만 SAML 공급자가 해당 역할을 수임할 수 있습니다.

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

aws:SourceVpc 대신 aws:SourceVpce를 사용하면 동일한 VPC에 여러 VPC 엔드포인트가 있고 특정 엔드포인트에 대한 액세스를 제한하려는 경우 보다 세분화된 제어가 가능합니다.

예: VPC 내의 프라이빗 IP 범위로 OIDC 페더레이션 제한

다음 신뢰 정책은 페더레이션을 VPC 내의 특정 서브넷에서 시작되는 요청으로 제한합니다. VPC 엔드포인트를 통해 이루어진 요청에 대한 IP 기반 제한에는 aws:VpcSourceIp를 사용합니다.

{ "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 엔드포인트를 통한 요청에 프라이빗 IP 범위와 함께 aws:SourceIp를 사용하지 마십시오. VPC 엔드포인트 요청에는 aws:SourceIp 키를 사용할 수 없습니다. 대신 aws:VpcSourceIp을 사용하세요.

예: SAML 페더레이션을 여러 VPC로 제한

다음 신뢰 정책은 SAML 공급자가 여러 VPC에서 역할을 수임하도록 허용합니다. 이는 조직에서 여러 환경 또는 리전에 걸쳐 여러 VPC를 운영하며, 이들 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)은 특정 VPC에서 시작되지 않는 한 AssumeRoleWithSAMLAssumeRoleWithWebIdentity 요청을 거부합니다. 역할별로 적용되는 신뢰 정책과 달리 리소스 제어 정책(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 검사를 제거하기 전에 철저히 테스트하는 것이 좋습니다.