

# IAM 권한을 사용하여 REST API에 대한 액세스 제어
<a name="permissions"></a>

 다음 두 API Gateway 구성 요소 프로세스에 대한 액세스를 제어하여 [IAM 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html)을 통해 Amazon API Gateway API에 대한 액세스를 제어합니다.
+  API Gateway에서 API를 생성, 배포, 관리하려면 API 개발자에게 API Gateway의 API 관리 구성 요소에서 지원되는 필수 작업을 수행할 수 있는 권한을 부여해야 합니다.
+  배포된 API를 호출하거나 API 캐시를 새로 고치려면 API Gateway의 API 실행 구성 요소에서 지원되는 필요한 IAM 작업을 수행할 권한을 API 호출자에게 부여해야 합니다.

 두 프로세스에 대한 액세스 제어에는 다음에 설명하는 서로 다른 권한 모델이 포함됩니다.

## API 생성 및 관리를 위한 API Gateway 권한 모델
<a name="api-gateway-control-access-iam-permissions-model-for-managing-api"></a>

 API 개발자가 API Gateway에서 API를 생성하고 관리할 수 있도록 허용하려면 지정된 API 개발자가 필수 [API 엔터티](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)를 생성, 업데이트, 배포, 보기 또는 삭제할 수 있도록 허용하는 [IAM 권한 정책을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)해야 합니다. 사용자, 역할 또는 그룹에 권한 정책을 연결합니다.

액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요.
+ AWS IAM Identity Center의 사용자 및 그룹:

  권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)의 지침을 따릅니다.
+ ID 제공업체를 통해 IAM에서 관리되는 사용자:

  ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용자 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
+ IAM 사용자:
  + 사용자가 맡을 수 있는 역할을 생성합니다. *IAM 사용자 설명서*에서 [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따릅니다.
  + (권장되지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. *IAM 사용 설명서*에서 [사용자(콘솔)에 권한 추가](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)의 지침을 따릅니다.

이 권한 모델을 사용하는 방법에 대한 자세한 내용은 [API Gateway 자격 증명 기반 정책](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies) 단원을 참조하세요.

## API 호출을 위한 API Gateway 권한 모델
<a name="api-gateway-control-access-iam-permissions-model-for-calling-api"></a>

API 호출자가 API를 호출하거나 캐싱을 새로 고치도록 허용하려면 지정된 API 호출자에게 사용자 인증이 사용되는 API 메서드를 호출하도록 허용하는 IAM 정책을 생성해야 합니다. API 개발자는 메서드의 `authorizationType` 속성을 `AWS_IAM`으로 설정하여 인증받을 사용자의 보안 인증 정보를 제출하도록 호출자에게 요구합니다. API Gateway는 사용자의 자격 증명을 인증하기 위해 Signature Version 4a(SigV4a) 및 Signature Version 4(SigV4)를 지원합니다. 자세한 내용은 [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)를 참조하세요. 그런 다음 정책을 사용자, 역할 또는 그룹에 연결할 수 있습니다.

이 IAM 권한 정책 설명에서, IAM `Resource` 요소는 지정된 HTTP 동사와 API Gateway [리소스 경로](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)로 식별할 수 있는 배포된 API 메서드 목록을 포함합니다. IAM `Action` 요소는 필요한 API Gateway API 실행 작업을 포함합니다. 이러한 작업은 `execute-api:Invoke` 또는 `execute-api:InvalidateCache`를 포함합니다. 여기서 `execute-api`는 API Gateway의 기본 API 실행 구성 요소를 지정합니다.

이 권한 모델을 사용하는 방법에 대한 자세한 내용은 [API 호출을 위한 액세스 제어](api-gateway-control-access-using-iam-policies-to-invoke-api.md) 단원을 참조하세요.

 API가 백엔드에서 AWS 서비스(예: AWS Lambda)와 통합될 경우 API Gateway에도 API 호출자를 대신하여 통합된 AWS 리소스(예: Lambda 함수 호출)에 액세스할 권한이 있어야 합니다. 이러한 권한을 부여하려면 **API Gateway용 AWS 서비스** 유형의 IAM 역할을 생성합니다. IAM 관리 콘솔에서 이 역할을 생성하면 이 결과 역할에는 API Gateway를 역할을 수임하도록 허용되는 신뢰할 수 있는 개체로 선언하는 다음 IAM 신뢰 정책이 포함됩니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

CLI [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 명령 또는 동등한 SDK 메서드를 호출하여 IAM 역할을 생성할 경우 `assume-role-policy-document`의 입력 파라미터로 상기 신뢰 정책을 제공해야 합니다. IAM 관리 콘솔에서 직접, 또는 AWS CLI [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) 명령 또는 동등한 SDK 메서드를 호출하여 그러한 정책을 생성하려 하지 마세요.

API Gateway가 통합된 AWS 서비스를 호출하려면, 이 역할에 통합된 AWS 서비스를 호출하는 데 적절한 IAM 권한 정책도 연결해야 합니다. 예를 들어 Lambda 함수를 호출하려면 IAM 역할에 다음 IAM 권한 정책을 포함해야 합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "*"
        }
    ]
}
```

------

Lambda는 신뢰 정책과 권한 정책을 결합한 리소스 기반 액세스 정책을 지원합니다. API Gateway 콘솔을 사용하여 API를 Lambda 함수와 통합할 경우 콘솔에서 사용자의 동의를 받아 Lambda 함수에 대한 리소스 기반 권한을 자동으로 설정하므로 이 IAM 역할을 명시적으로 설정하라는 메시지가 표시되지 않습니다.

**참고**  
 AWS 서비스에 대한 액세스 제어를 적용하려면 권한 정책이 호출자의 사용자 또는 그룹에 직접 연결되는 호출자 기반 권한 모델을 사용하거나 권한 정책이 API Gateway에서 가정할 수 있는 IAM 역할에 연결되는 역할 기반 권한 모델을 사용할 수 있습니다. 두 모델의 권한 정책은 다를 수 있습니다. 예를 들어 호출자 기반 정책에서는 액세스를 차단하고 역할 기반 정책에서는 액세스를 허용할 수 있습니다. 이를 활용하여 사용자에게 API Gateway API를 통해서만 AWS 서비스에 액세스하도록 요구할 수 있습니다.

# 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)를 참조하세요.

# API 실행 권한에 대한 IAM 정책 예
<a name="api-gateway-iam-policy-examples-for-api-execution"></a>

권한 모델 및 기타 배경 정보는 [API 호출을 위한 액세스 제어](api-gateway-control-access-using-iam-policies-to-invoke-api.md) 단원을 참조하세요.

다음 정책 설명은 사용자에게 `mydemoresource` 경로를 따라 `test` 단계에서 식별자가 `a123456789`인 API에 대해 POST 메서드를 호출할 수 있는 권한을 부여합니다. 여기서는 해당 API가 AWS 리전(us-east-1)에 배포된 것으로 가정합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:*:a123456789/test/POST/my-demo-resource-path/*"
      ]
    }
  ]
}
```

------

다음 예제 정책 설명은 사용자에게 모든 단계의 `petstorewalkthrough/pets` 리소스 경로에서 해당 API가 배포된 `a123456789` 리전에서 식별자가 AWS인 API에 대해 모든 메서드를 호출할 수 있는 권한을 부여합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:*:*:a123456789/*/*/petstorewalkthrough/pets"
      ]
    }
  ]
}
```

------