API Gateway 리소스 정책이 권한 부여 워크플로우에 미치는 영향 - Amazon API Gateway

API Gateway 리소스 정책이 권한 부여 워크플로우에 미치는 영향

API Gateway가 API에 연결된 리소스 정책을 평가할 때 그 결과는, 다음 단원의 흐름 차트에 서명된 것처럼, APi에 대하여 정의한 인증 유형의 영향을 받습니다.

API Gateway 리소스 정책만

이 워크플로우에서 API Gateway 리소스 정책은 API에 연결되지만 API에 대하여 정의되는 인증 유형은 없습니다. 정책 평가를 위해서는 호출자의 인바운드 기준에 따른 명시적 허용이 필요합니다. 묵시적 거부 또는 명시적 거부는 호출자에 대한 거부로 이어집니다.

다음은 이러한 리소스 정책의 예입니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:region:account-id:api-id/", "Condition": { "IpAddress": { "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ] } } } ] }

Lambda 권한 부여자 및 리소스 정책

이 워크플로우에서 Lambda 권한 부여자는 리소스 정책과 함께 API에 대하여 구성됩니다. 리소스 정책은 2단계로 평가됩니다. Lambda 권한 부여자를 호출하기 전에 API Gateway는 먼저 정책을 평가하고 명시적 거부를 확인합니다. 명시적 거부가 확인되면 호출자는 즉시 액세스를 거부당합니다. 그렇지 않으면 Lambda 권한 보유자가 호출되어 리소스 정책과 결합하여 평가되는 정책 문서를 반환합니다. 그 결과는 테이블 A에 따라 결정됩니다.

다음의 리소스 정책 예제는 그 VPC 엔드포인트 ID가 vpce-1a2b3c4d인 VPC 엔드포인트로부터의 호출만을 허용합니다. “인증 전” 평가 과정 중에는 예제에 나온 VPC 종단점에서의 호출만이 다음 단계로 넘어가 Lambda 권한 부여자를 평가하는 것이 허용됩니다. 나머지 모든 호출은 차단됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:region:account-id:api-id/" ], "Condition" : { "StringNotEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" } } } ] }

IAM 인증 및 리소스 정책

이 워크플로에서 리소스 정책 외에도 API에 대한 IAM 인증을 구성합니다. IAM 서비스로 사용자를 인증한 후에는 API가 사용자에게 연결된 정책과 리소스 정책을 모두 평가합니다. 그 결과는 호출자가 동일한 AWS 계정에 있는지 또는 API 소유자의 별도 AWS 계정에 있는지에 따라 달라집니다.

호출자와 API 소유자가 각기 다른 계정에 있는 경우, IAM 정책과 리소스 정책 모두 호출자가 진행하도록 명시적으로 허용합니다. 자세한 내용은 테이블 B를 참조하세요.

그러나 호출자와 API 소유자가 동일한 AWS 계정에 있는 경우, IAM 사용자 정책 또는 리소스 정책 중 하나에서 호출자가 진행하도록 명시적으로 허용합니다. 자세한 내용은 테이블 A를 참조하세요.

다음은 교차 계정 리소스 정책의 예입니다. IAM 정책에 허용 효과가 포함되어 있다고 가정할 때, 이 리소스 정책은 VPC ID가 vpc-2f09a348인 VPC로부터의 호출만을 허용합니다 자세한 내용은 테이블 B를 참조하세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:region:account-id:api-id/" ], "Condition" : { "StringEquals": { "aws:SourceVpc": "vpc-2f09a348" } } } ] }

Amazon Cognito 인증 및 리소스 정책

이 워크플로에서는 리소스 정책 외에 API에 대해 Amazon Cognito 사용자 풀이 구성됩니다. API Gateway는 먼저 Amazon Cognito를 통해 호출자에게 권한을 부여하려 합니다. 이는 보통 호출자가 제공하는 JWT 토큰을 통해 수행됩니다. 인증에 성공하면, 리소스 정책이 독립적으로 평가되고 명시적 허용이 필요해집니다. 거부 또는 “허용도 거부도 아님”인 경우에는 거부됩니다. 다음은 Amazon Cognito 사용자 풀과 함께 사용될 수 있는 리소스 정책의 예제입니다.

다음은 Amazon Cognito 인증 토큰에 허용이 포함되어 있다는 가정하에 지정된 소스 IP로부터의 호출만을 허용하는 리소스 정책의 예제입니다 자세한 내용은 테이블 B를 참조하세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:region:account-id:api-id/", "Condition": { "IpAddress": { "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ] } } } ] }

정책 평가 결과표

테이블 A에는 API Gateway API에 대한 액세스가 IAM 정책 또는 Lambda 권한 부여자 및 API Gateway 리소스 정책에 의해 제어되고, 이러한 두 정책이 모두 동일한 AWS 계정에 있을 때 결과로 수행되는 동작이 나와 있습니다.

테이블 A: 계정 A가 자신이 소유한 API를 호출
IAM 정책(또는 Lambda 권한 부여자) API Gateway 리소스 정책 결과적 동작
허용 허용 허용
허용 허용도 거부도 아님 허용
허용 거부 명시적 거부
허용도 거부도 아님 허용 허용
허용도 거부도 아님 허용도 거부도 아님 암시적 거부
허용도 거부도 아님 거부 명시적 거부
거부 허용 명시적 거부
거부 허용도 거부도 아님 명시적 거부
거부 거부 명시적 거부

테이블 B에는 API Gateway API에 대한 액세스가 IAM 정책 또는 Amazon Cognito 사용자 풀 권한 부여자 및 API Gateway 리소스 정책 에 의해 제어되고, 이러한 정책이 서로 다른 AWS 계정에 있을 때 결과로 수행되는 동작이 나와 있습니다. 허용되지도 거부되지도 않으면, 교차 계정 액세스가 거부됩니다. 왜냐하면 크로스 계정 액세스를 위해서는 리소스 정책과 IAM 정책 또는 Amazon Cognito 사용자 풀 권한 부여자 모두에서 액세스를 명시적으로 허용해야 하기 때문입니다.

테이블 B: 계정 B가
IAM 정책(또는 Amazon Cognito 사용자 풀 권한 부여자) API Gateway 리소스 정책 결과적 동작
허용 허용 허용
허용 허용도 거부도 아님 암시적 거부
허용 거부 명시적 거부
허용도 거부도 아님 허용 암시적 거부
허용도 거부도 아님 허용도 거부도 아님 암시적 거부
허용도 거부도 아님 거부 명시적 거부
거부 허용 명시적 거부
거부 허용도 거부도 아님 명시적 거부
거부 거부 명시적 거부