리소스 기반 정책으로 API Gateway API를 호출할 때 발생하는 액세스 거부 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

리소스 정책으로 Amazon API Gateway API 작업을 호출할 때 액세스 거부 오류가 발생합니다.

해결 방법

퍼블릭 또는 프라이빗 API Gateway API 작업에 대한 다음 문제 해결 단계를 따르세요.

퍼블릭 API 작업

1.    API 작업에 IP 주소를 기반으로 요청을 허용하거나 차단하는 리소스 정책이 있는지 확인합니다. 액세스 로깅을 설정하지 않은 경우 API Gateway에 대한 액세스 로깅을 설정합니다. 액세스 로그에는 API 작업의 소스 IP 주소가 포함됩니다. IP 주소가 거부 목록에 포함되어 있지 않은 것을 확인합니다. IP 주소 또는 CIDR 범위는 리소스 정책에서 액세스를 명시적으로 허용해야 합니다.

세 개의 IP 주소만 허용하는 리소스 정책의 예:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
        },

        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:<region>:<account_number>:<api_id>/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "52.36.146.106",
                        "34.216.36.206/32",
                        "205.251.233.179/32"
                    ]
                }
            }
        }
    ]
}

두 개의 IP 주소를 차단하는 리소스 정책의 예:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
            ]
        },
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:SourceIp": ["52.36.146.106", "34.216.36.206/32" ]
                }
            }
        }
    ]
}

2.    API 요청에 대한 HTTP 메서드(GET, POST) 및 API 게이트웨이 리소스(/,/foo,/foo/bar)는 명시적으로 액세스를 허용해야 합니다. 다음과 비슷한 리소스 정책 속성을 확인합니다.

"Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
            ],

3.    리소스 정책이 다른 유형의 인증 방법이나 권한 부여자를 사용하는지 확인합니다. 리소스 정책의 API Gateway 평가는 인증 유형에 따라 달라집니다. 인증 유형의 예로는 AWS Lambda Authorizer 또는 Amazon Cognito 인증이 있습니다. API에 정의된 인증 유형에 맞게 리소스 정책이 올바르게 구성되었는지 확인합니다.

4.    모든 변경 사항을 적용하기 위해 API 요청을 재배포했는지 확인합니다. API 요청을 재배포하려면 단계를 반복하여 REST API를 해당 단계에 배포하세요.

5.    예제 API Gateway 리소스 정책을 사용하는 경우 환경에 맞게 모든 변수를 구성했는지 확인합니다.

6.    리소스 정책에서 Amazon Virtual Private Cloud(VPC) IP 주소 내에서만 액세스를 허용하는 경우 다음 중 하나를 수행합니다.

리소스 정책에서 라우터 IP 주소 및 NAT 게이트웨이 IP 주소(퍼블릭 IP 주소) 액세스를 허용합니다.

또는

퍼블릭 API 엔드포인트를 프라이빗 API 엔드포인트로 변경합니다.

프라이빗 API 작업

1.    리소스 정책에 Amazon VPC 엔드포인트가 있는 경우 정책에서 조건 키를 확인합니다. 리소스 정책에서 조건 키 aws:SourceVpce를 사용하는 경우 해당 값은 VPC ID가 아니라 Amazon VPC 엔드포인트 ID여야 합니다. 리소스 정책에서 조건 키 aws:SourceVpc를 사용하는 경우 해당 값은 VPC 엔드포인트 ID가 아니라 Amazon VPC ID여야 합니다.

엔드포인트 유형을 확인하려면 Amazon VPC 콘솔을 열고 Endpoints(엔드포인트)를 선택한 다음 유형을 확인할 엔드포인트를 선택합니다.

2.    모든 변경 사항을 적용하기 위해 API 요청을 재배포했는지 확인합니다. API 요청을 재배포하려면 단계를 반복하여 REST API를 해당 단계에 배포하세요.

3.    예제 API Gateway 리소스 정책을 사용하는 경우 환경에 맞게 모든 변수를 구성했는지 확인해야 합니다.

4.    API 요청에 대한 HTTP 메서드(GET, POST) 및 API 게이트웨이 리소스(/,/foo,/foo/bar)는 명시적으로 액세스를 허용해야 합니다. 다음과 비슷한 리소스 정책 속성을 확인합니다.

"Resource": [
               "arn:aws:execute-api:<region>:<account_number>:<api_id>/<stage>/<http_method>/<resource_path_specifier>/*"
            ],

5.    리소스 정책이 다른 유형의 인증 방법이나 권한 부여자를 사용하는지 확인합니다. 리소스 정책의 API Gateway 평가는 인증 유형에 따라 달라집니다. 인증 유형의 예로는 AWS Lambda Authorizer 또는 Amazon Cognito 인증이 있습니다. API에 정의된 인증 유형에 맞게 리소스 정책이 올바르게 구성되었는지 확인합니다.


AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음