

# IAM 권한 부여를 통해 WebSocket API에 대한 액세스 제어
<a name="apigateway-websocket-control-access-iam"></a>

WebSocket API에서 IAM 권한 부여는 [REST API](api-gateway-control-access-using-iam-policies-to-invoke-api.md)와 유사하지만 다음과 같은 예외가 있습니다.
+ `execute-api` 작업은기존 작업(`ManageConnections`, `Invoke`) 이외에 `InvalidateCache`를 지원합니다. `ManageConnections`는 @connections API에 대한 액세스를 제어합니다.
+ WebSocket 라우팅은 다른 ARN 형식을 사용합니다.

  ```
  arn:aws:execute-api:region:account-id:api-id/stage-name/route-key
  ```
+ `@connections` API는 REST API와 동일한 ARN 형식을 사용합니다.

  ```
  arn:aws:execute-api:region:account-id:api-id/stage-name/POST/@connections
  ```

**중요**  
[IAM 권한 부여](#apigateway-websocket-control-access-iam)를 사용하는 경우 [Signature Version 4(SigV4)](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html)로 서명해야 합니다.

예를 들어 클라이언트에 다음 정책을 설정할 수 있습니다. 이 예제는 모든 사람이 `Invoke` 스테이지에서 비밀 라우팅을 제외한 모든 라우팅에 대한 메시지(`prod`)를 보내도록 허용하고, 모든 사람이 모든 스테이지에 대해 연결된 클라이언트(`ManageConnections`)로 메시지를 보내는 것을 금지합니다.

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

****  

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

------