

# 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}}/*"
            ]
        }
    ]
}
```

------