

# API 호출을 위한 액세스 제어
<a name="api-gateway-control-access-using-iam-policies-to-invoke-api"></a>

이 섹션에서는 IAM 권한을 사용하여 API에 대한 액세스를 제어하는 권한 모델에 대해 알아봅니다. IAM 권한 부여가 활성화된 경우 클라이언트는 Signature Version 4a(SigV4a) 및 Signature Version 4(SigV4)를 사용하여 AWS 자격 증명으로 요청에 서명해야 합니다. 자세한 내용은 [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)를 참조하세요.

이 섹션에서는 템플릿 IAM 정책 설명과 정책 설명 참조를 보여줍니다. 정책 설명 참조에는 API 실행 서비스와 관련된 `Action` 및 `Resource` 필드의 형식도 포함되어 있습니다. 이러한 참조를 사용하여 IAM 정책 설명을 생성합니다. IAM 정책 설명을 생성할 때 API Gateway 리소스 정책이 권한 부여 워크플로에 미치는 영향을 고려해야 할 수 있습니다. 자세한 내용은 [API Gateway 리소스 정책이 권한 부여 워크플로우에 미치는 영향](apigateway-authorization-flow.md) 섹션을 참조하세요.

프라이빗 API의 경우 API Gateway 리소스 정책과 VPC 종단점 정책을 조합하여 사용해야 합니다. 자세한 정보는 다음 주제를 참조하세요.
+ [API Gateway 리소스 정책을 사용하여 REST API에 대한 액세스 제어](apigateway-resource-policies.md)
+ [API Gateway의 프라이빗 API에 대한 VPC 종단점 정책 사용](apigateway-vpc-endpoint-policies.md)

## IAM 정책을 사용하여 API Gateway API 메서드를 호출할 수 있는 사용자 제어
<a name="api-gateway-who-can-invoke-an-api-method-using-iam-policies"></a>

 IAM 권한을 사용하여 배포된 API를 호출할 수 있는 사용자와 호출할 수 없는 사용자를 제어하려면 필요한 권한을 사용하여 IAM 정책 문서를 생성합니다. 그런 정책 문서에 대한 템플릿은 다음과 같습니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Permission",
      "Action": [
        "execute-api:Execution-operation"           
      ],
      "Resource": [
        "arn:aws:execute-api:region:123456789012:api-id/stage/METHOD_HTTP_VERB/Resource-path"
      ]
    }
  ]
}
```

------

 여기서 포함된 권한을 부여할지 취소할지 여부에 따라 `Permission`은 `Allow` 또는 `Deny`로 대체됩니다. `Execution-operation`은 API 실행 서비스에서 지원되는 작업으로 대체됩니다. `METHOD_HTTP_VERB`는 지정된 리소스에서 지원되는 HTTP 동사를 나타냅니다. `Resource-path`는 해당 `[Resource](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)`를 지원하는 배포된 API `METHOD_HTTP_VERB` 인스턴스의 URL 경로에 대한 자리 표시자입니다. 자세한 내용은 [API Gateway에서 API 실행을 위한 IAM 정책의 설명 참조](#api-gateway-calling-api-permissions) 단원을 참조하세요.

**참고**  
IAM 정책을 적용하려면 메서드의 `AWS_IAM` 속성에 대한 `[authorizationType](https://docs.aws.amazon.com/apigateway/latest/api/API_Method.html#authorizationType)`을 설정하여 API 메서드에서 IAM 인증을 활성화해야 합니다. 그렇지 않은 경우 API 메서드에 공개적으로 액세스할 수 있습니다.

 예를 들어 사용자에게 지정된 API 노출 반려 동물 목록을 볼 수 있는 권한을 부여하고, 목록에 반려 동물을 추가할 수 있는 권한을 거부하려면 IAM 정책에 다음 명령문을 포함하세요.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:111111111111:api-id/*/GET/pets"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "execute-api:Invoke"           
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:111111111111:api-id/*/POST/pets"
      ]
    }
  ]
}
```

------

사용자에게 `GET /pets/{petId}`로 구성된 API를 통해 공개된 특정 반려 동물을 볼 수 있는 권한을 부여하려면, IAM 정책에 다음 명령문을 포함합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": [
                "arn:aws:execute-api:us-east-1:111122223333:api-id/*/GET/pets/a1b2"
            ]
        }
    ]
}
```

------

## API Gateway에서 API 실행을 위한 IAM 정책의 설명 참조
<a name="api-gateway-calling-api-permissions"></a>

다음은 API 실행을 위한 액세스 권한에 대한 IAM 정책 설명의 작업 및 리소스 형식입니다.

### API Gateway의 API 실행 권한 작업 형식
<a name="api-gateway-iam-policy-action-format-for-executing-api"></a>

API 실행 `Action` 표현식의 일반적인 형식은 다음과 같습니다.

```
execute-api:action
```

여기서 *작업*은 사용 가능한 API 실행 작업입니다.
+ **\$1**는 다음의 모든 작업을 나타냅니다.
+ **호출**은 클라이언트 요청에 따라 API를 호출하는 데 사용됩니다.
+ **InvalidateCache**는 클라이언트 요청에 따라 API 캐시를 무효화하는 데 사용됩니다.

### API Gateway의 API 실행 권한 리소스 형식
<a name="api-gateway-iam-policy-resource-format-for-executing-api"></a>

API 실행 `Resource` 표현식의 일반적인 형식은 다음과 같습니다.

```
arn:aws:execute-api:region:account-id:api-id/stage-name/HTTP-VERB/resource-path-specifier
```

여기서 각 항목은 다음과 같습니다.
+ *region*은 메서드에 대해 배포된 API에 해당하는 AWS 리전(예: **us-east-1** 또는 **\$1**(모든 AWS 리전))입니다.
+ *account-id*는 REST API 소유자의 12자리 AWS 계정 ID입니다.
+ *api-id*는 API Gateway에서 메서드에 대한 API에 할당한 식별자입니다.
+ *stage-name*은 메서드와 연결된 스테이지의 이름입니다.
+ *HTTP-VERB*는 메서드에 대한 HTTP 동사입니다. GET, POST, PUT, DELETE, PATCH 중 하나일 수 있습니다.
+ *resource-path-specifier*는 원하는 메서드의 경로입니다.

**참고**  
와일드카드(`*`)를 지정하는 경우 `Resource` 표현식에서 표현식의 나머지에 와일드카드가 적용됩니다.

다음은 리소스 표현식의 몇 가지 예입니다.
+ **arn:aws:execute-api:\$1:\$1:\$1**는 모든 단계의 모든 리소스 경로와 모든 AWS 리전의 모든 API를 나타내며,
+ **arn:aws:execute-api:us-east-1:\$1:\$1**는 모든 단계의 모든 리소스 경로와 AWS의 `us-east-1` 리전의 모든 API를 나타내며,
+ **arn:aws:execute-api:us-east-1:\$1:*api-id*/\$1**는 모든 단계의 모든 리소스 경로와 AWS 리전(us-east-1)에서 식별자가 *api-id*인 API를 나타냅니다.
+ **arn:aws:execute-api:us-east-1:\$1:*api-id*/`test`/\$1**는 `test` 단계의 리소스 경로와 AWS 리전(us-east-1)에서 식별자가 *api-id*인 API를 나타냅니다.

자세한 내용은 [API Gateway Amazon 리소스 이름(ARN) 참조](arn-format-reference.md)를 참조하세요.