

# API Gateway의 프라이빗 API에 대한 VPC 종단점 정책 사용
<a name="apigateway-vpc-endpoint-policies"></a>

프라이빗 API의 보안을 강화하기 위해 VPC 엔드포인트 정책을 생성할 수 있습니다. VPC 엔드포인트 정책은 VPC 엔드포인트에 연결할 수 있는 IAM 리소스 정책입니다. 자세한 정보는 [VPC 종단점을 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)를 참조하세요.

VPC 엔드포인트 정책을 생성하여 다음을 생성하는 것이 좋습니다.
+ 특정 조직 또는 리소스만 VPC 엔드포인트에 액세스하고 API를 간접적으로 호출하도록 허용합니다.
+ 단일 정책을 사용하고 세션 기반 또는 역할 기반 정책을 피하여 API로 향하는 트래픽을 제어합니다.
+ 온프레미스에서 AWS로 마이그레이션하는 동안 애플리케이션의 보안 경계를 강화합니다.

## VPC 엔드포인트 정책 고려 사항
<a name="apigateway-vpc-endpoint-policies-considerations"></a>

다음은 VPC 엔드포인트 정책에 대한 고려 사항입니다.
+ 호출자의 ID는 `Authorization` 헤더 값을 기반으로 평가됩니다. VPC 엔드포인트 정책이 먼저 평가된 후 API Gateway가 메서드 요청에 구성된 권한 부여 유형에 따라 요청을 평가합니다. 다음 표는 `Authorization` 헤더 값의 내용을 기반으로 VPC 엔드포인트 정책이 평가되는 방법을 보여줍니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)
+ 액세스 제어가 Lambda 또는 Amazon Cognito 권한 부여자와 같은 보유자 토큰 사용에 의존하는 경우 [리소스의 속성](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-properties)을 사용하여 보안 경계를 제어할 수 있습니다.
+  권한 부여 제어에서 IAM 권한 부여를 사용하는 경우 [리소스의 속성](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-properties)과 [보안 주체의 속성](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resource-principal)을 사용하여 보안 경계를 제어할 수 있습니다.
+ VPC 종단점 정책은 API Gateway 리소스 정책과 함께 사용할 수 있습니다. API Gateway 리소스 정책은 API에 액세스할 수 있는 보안 주체를 지정합니다. 엔드포인트 정책은 VPC에 액세스할 수 있는 사용자와 VPC 엔드포인트에서 직접적으로 호출할 수 있는 API를 지정합니다. 프라이빗 API에는 리소스 정책이 필요하지만 사용자 지정 VPC 엔드포인트 정책을 생성할 필요는 없습니다.

## VPC 엔드포인트 정책 예제
<a name="apigateway-vpc-endpoint-policies-examples"></a>

Amazon API Gateway에 대한 Amazon Virtual Private Cloud 엔드포인트 정책을 생성하여 다음을 지정할 수 있습니다.
+ 작업을 수행할 수 있는 보안 주체.
+ 수행할 수 있는 작업.
+ 작업을 수행할 수 있는 리소스.

이는 권한 부여 헤더의 내용에 따라 달라질 수 있습니다. 자세한 내용은 [VPC 엔드포인트 정책 고려 사항](#apigateway-vpc-endpoint-policies-considerations) 섹션을 참조하세요. 추가 정책 예제는 GitHub 웹사이트의 [Data perimeter policy examples](https://github.com/aws-samples/data-perimeter-policy-examples)를 참조하세요.

VPC 종단점에 정책을 첨부하려면 VPC 콘솔을 사용해야 합니다. 자세한 정보는 [VPC 종단점을 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)를 참조하세요.

## 예제 1: 두 API에 대한 액세스 권한을 부여하는 VPC 종단점 정책
<a name="apigateway-vpc-endpoint-policies-example-1"></a>

다음 예제 정책은 정책이 첨부된 VPC 종단점을 통해 두 개의 특정 API로만 액세스 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*",
                "arn:aws:execute-api:us-east-1:123412341234:aaaaa11111/*"
            ]
        }
    ]
}
```

------

## 예제 2: GET 메서드에 대한 액세스 권한을 부여하는 VPC 종단점 정책
<a name="apigateway-vpc-endpoint-policies-example-2"></a>

다음 예제 정책은 해당 정책이 연결된 VPC 종단점을 통해 특정 API에 대한 `GET` 메서드에 대한 액세스 권한을 사용자에게 부여합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/stageName/GET/*"
            ]
        }
    ]
}
```

------

## 예제 3: 특정 API에 특정 사용자 액세스 권한을 부여하는 VPC 종단점 정책
<a name="apigateway-vpc-endpoint-policies-example-3"></a>

다음 예제 정책은 정책이 연결된 VPC 종단점을 통한 특정 API에 대한 특정 사용자 액세스 권한을 부여합니다.

이 경우 정책에서 특정 IAM 보안 주체에 대한 액세스를 제한하기 때문에 메서드의 `authorizationType`을 `AWS_IAM` 또는 `NONE`으로 설정해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123412341234:user/MyUser"
                ]
            },
            "Action": [
                "execute-api:Invoke"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*"
            ]
        }
    ]
}
```

------

## 예제 4: 사용자에게 특정 사용자 지정 도메인 이름과 도메인에 매핑된 모든 API에 대한 액세스 권한을 부여하는 VPC 엔드포인트 정책
<a name="apigateway-vpc-endpoint-policies-example-4"></a>

다음 예제 정책은 해당 정책이 연결된 VPC 엔드포인트를 통해 특정 사용자 지정 도메인 이름에 대한 액세스 권한을 사용자에게 부여합니다. 이 정책을 사용하면 사용자가 VPC 엔드포인트와 사용자 지정 도메인 이름 간에 도메인 이름 액세스 연결을 생성하고 사용자 지정 도메인 이름과 사용자 지정 도메인 이름에 매핑된 프라이빗 API를 간접적으로 호출할 수 있는 액세스 권한이 부여되는 한, 사용자는 이 사용자 지정 도메인 이름에 매핑된 모든 API를 간접적으로 호출할 수 있습니다. 자세한 내용은 [API Gateway의 프라이빗 API에 대한 사용자 지정 도메인 이름](apigateway-private-custom-domains.md) 섹션을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "*"
      ],
       "Condition": {
        "ArnEquals": {
          "execute-api:viaDomainArn": "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.test.com+f4g5h6",
        }
      }
    }
  ]
}
```

------

## 예제 5: 특정 API 및 도메인 리소스에 대한 액세스 권한을 부여하거나 거부하는 VPC 엔드포인트 정책
<a name="apigateway-vpc-endpoint-policies-example-5"></a>

다음 예제 정책은 사용자에게 특정 API 및 도메인 리소스에 대한 액세스 권한을 부여합니다. 이 정책을 사용하면 사용자가 VPC 엔드포인트와 사용자 지정 도메인 이름 간에 도메인 이름 액세스 연결을 생성하고 사용자 지정 도메인 이름 및 사용자 지정 도메인 이름에 매핑된 프라이빗 API를 간접적으로 호출할 수 있는 액세스 권한이 부여되는 한 사용자는 허용된 프라이빗 API 및 도메인 리소스를 간접적으로 호출할 수 있습니다. 자세한 내용은 [API Gateway의 프라이빗 API에 대한 사용자 지정 도메인 이름](apigateway-private-custom-domains.md) 섹션을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:us-west-2:111122223333:/domainnames/private.test.com+f4g5h6",
        "arn:aws:execute-api:us-west-2:111122223333:a1b2c3d4e5/*"
      ]
    },
    {
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:us-west-2:111122223333:a1b2c3d4e5/admin/*",
        "arn:aws:execute-api:us-west-2:111122223333:bcd123455/*"
      ]
    }
  ]
}
```

------

## 예제 6: 조직에 속한 위탁자 및 리소스별로 액세스 권한을 부여하거나 거부하는 VPC 엔드포인트 정책
<a name="apigateway-vpc-endpoint-policies-example-6"></a>

다음 예제 정책은 조직에 속한 위탁자 및 리소스에 대한 액세스 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceOrgID": "o-abcd1234",
                    "aws:PrincipalOrgID": "o-abcd1234"
                }
            },
            "Action": "*",
            "Resource": "*",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Sid": "AllowRequestsByOrgsIdentitiesToOrgsResources"
        }
    ]
}
```

------