Open1

Cognito でのロール単位の操作権限の制御

jimiijimii

ユーザーの権限管理の制御について

ユーザーごとに操作できる権限の制御を行いたい。
とおもって、調べたときに見た資料などを残しとく。

前提条件

  • SPAのWebアプリケーション
  • ユーザー管理はCognitoを使用しAmplifyを使用してサインイン/サインアップの処理を実装
  • 基本的にサーバーとのデータの処理は、フロントエンド→CloudFront→API Gatewayの流れ
  • APIの認可方式はCognito Authorizer (今は)

ユーザーグループにIAMロールを割り当ててそのロールを使う方法

https://aws.amazon.com/jp/blogs/news/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/

https://qiita.com/GoogIeSensei/items/46b000d20a8da2fee848#3-idpool作成

https://tech.opst.co.jp/2021/08/23/cognitoユーザープールでグループ毎にリソース制御を/

https://tech.opst.co.jp/2021/08/10/api-gatewayでiam認証を行う/

  • API GatewayのIAM認証は一時的認証情報を使用した呼び出し
  • Cognito Authorizerとはリクエスト方法が異なる。
    • Cognito Authorizer: ユーザープールによって発行されたIDトークンをAuthorizationヘッダに付与
    • IAM認証: 一時認証情報を使用してHostヘッダ等に署名をする
  • CloudFrontがHostヘッダをオリジンに転送する際にHostヘッダは書き換えても署名は書き換えないため、API Gatewayは不正な署名として扱い401エラーとなってしまう

Amazon Verified Permissions

割とよさそう。

  • Lambda Authorizer to Amazon Verified Permissions の構成でやれそう
  • 独自のCedarという独自言語でポリシーを書くらしい

https://zenn.dev/ncdc/articles/72cfc6f17a67a9

https://speakerdeck.com/nemops/yahariporisi-dot-dot-dot-porisihaquan-tewojie-jue-suru-dot-dot-dot-opa-deshi-meru-policy-as-code?slide=49