API7 Enterpriseの新機能:IAMによるきめ細かいアクセス制御
July 11, 2024
はじめに
以前のバージョンのAPI7 Enterpriseでは、シンプルで使いやすく、包括的なRBAC(ロールベースアクセス制御)管理メカニズムを提供していました。このメカニズムにより、システムのセキュリティを確保しつつ、ユーザーに柔軟なロール権限設定を提供していました。しかし、API7 Enterpriseのリソースタイプと機能が増えるにつれ、従来のRBAC管理は、権限の細かい制御において限界を露呈し始めました。さらに、多くの企業が複雑で変化するビジネスニーズに対応するため、より洗練された権限管理戦略を求めています。
API7 Enterpriseの権限管理機能をさらに強化するため、既存のロール権限システムを全面的にアップグレードし、より柔軟で強力なIAM(Identity and Access Management)ポリシーモデルを導入しました。このモデルは、ユーザーにより細かい権限制御と柔軟性を提供し、現代の企業の複雑で変化する権限管理ニーズにより適応します。
IAMポリシーモデルとは?
IAM(Identity and Access Management)ポリシーモデルは、より詳細で効率的な権限管理方法を表しています。これにより、管理者は特定のポリシーを定義でき、各ポリシーには一連のルール(Statements)が含まれます。これらのルールは、どのユーザーやロールがどのリソースに対してどのアクションを実行できるかを詳細に指定します。従来のRBACメカニズムと比較して、このモデルはより高い柔軟性と細かい制御を提供します。

IAMのRBACに対する利点:
-
細かい制御: IAMはリソースレベル、さらにはリソース内の特定の属性や操作に対する権限を制御できますが、RBACはロールに基づいて権限を割り当てるため、粒度が比較的粗いです。
-
柔軟性: IAMでは、管理者が直接ポリシーと権限を管理でき、間接的な権限割り当てのために多数のロールを作成・管理する必要がなく、設定がより直感的で柔軟です。
-
拡張性: システム機能が増え、リソースタイプが多様化するにつれ、IAMは新しいポリシーを追加することで新しい権限ニーズに対応しやすくなりますが、RBACでは多くのロールを調整または追加する必要があります。
API7 EnterpriseでIAMポリシーを使用する方法
1. 権限ポリシーの作成
API7 Enterpriseにログイン後、右上の**「Organization」ボタンをクリックし、ドロップダウンメニューから「Permission Policies」**メニュー項目を選択します。
Permission Policiesセクションでは、すべてのポリシーを管理できます。デフォルトでは、初期管理者用のsuper-admin-permission-policy
が存在します。
右上の**「Add Policy」**ボタンをクリックして、ポリシー作成フォームに入ります。ここでは、ポリシーの基本情報を入力し、ポリシーエディタで権限を設定します。これらはStatementsと呼ばれます。
Statementsはポリシーの核心部分で、1つ以上のステートメントで構成されます。各ステートメントは特定のアクセス権限ルールを定義します。
-
Effect: ステートメントの効果を指定します。通常は
"Allow"
または"Deny"
です。リソースは複数のポリシーの影響を受けることがあり、IAMシステムはステートメントの順序とロジックに基づいて最終的なアクセス権限を決定します。 -
Action: 許可または拒否される一連のアクションを定義します。例えば、
"gateway:DeleteGatewayGroup"
や"iam:GetUser"
などです。これらのアクションはリソース(Resource)と組み合わせて使用する必要があります。 -
Resource: ステートメントが適用されるリソースを指定します。例えば、特定のゲートウェイグループやサービスなどです。ワイルドカード(例:
<.*>
)を使用して複数のリソースにマッチさせることもできます。 -
Condition(オプション): ステートメントが有効になる条件を定義します。例えば、
"conditions": { "gateway_group_label": { "type": "MatchLabel", "options": { "key": "type", "operator": "exact_match", "value": "production" } } },
これは、ゲートウェイグループのラベルが「production」に設定されている場合にのみ、ステートメントで定義された操作が許可されることを意味します。
例えば、特定のゲートウェイグループ内の公開済みサービスを編集する権限のみをユーザーに制限するポリシーを作成する場合、以下のように記述できます:
{ "statement": [ { "resources": [ "arn:api7:gateway:gatewaygroup/{ゲートウェイグループID}" ], "actions": [ "<.*>Get<.*>" // 'Get'で始まるすべての操作を許可し、指定されたゲートウェイグループの「読み取り」権限を表します ], "effect": "allow" // 上記の操作を許可 // 注:このポリシーステートメントは、指定されたゲートウェイグループに対してすべての「Get」操作(ゲートウェイグループ情報の取得、ゲートウェイグループ内のサービスのリスト表示など)を許可します。 }, { "resources": [ "arn:api7:gateway:gatewaygroup/{ゲートウェイグループID}/publishedservice/<.*>", ], "actions": [ "<.*>" // すべての操作を許可 ], "effect": "allow" // 上記の操作を許可 // このポリシーステートメントは、指定されたゲートウェイグループ内の公開済みサービスに対してすべての操作(作成、読み取り、更新、削除など)を許可します。 } ] }
この例では、2つのリソースセット(ゲートウェイグループとゲートウェイグループ内の公開済みサービス)を定義し、それぞれに許可されるアクションを設定しました。一般的なポリシー設定例は、ドキュメントPermission Policy Examplesで確認できます。リソースとアクションの利用可能な値および対応するAPIについては、ドキュメントPermission Policy Actions and Resourcesを参照してください。
ポリシーを作成した後、直接ユーザーに割り当てることはできません。まず、ポリシーを特定のロールに割り当てる必要があります。
2. ロールの作成とポリシーの割り当て
API7 Enterpriseにログイン後、右上の**「Organization」ボタンをクリックし、ドロップダウンメニューから「Roles」**メニュー項目を選択します。

Rolesセクションでは、すべてのロールを管理できます。デフォルトでは、組み込みの管理者ロールとしてSuper Adminロールが存在します。
右上の**「Add Custom Role」**ボタンをクリックして、ロール作成フォームに入ります。ここでは、ロールの基本情報を入力します。作成後、ロール詳細ページに移動します。
ロール詳細ページで、**「Attach Policy」**ボタンをクリックして、以前に作成した権限ポリシーをロールに割り当てます。

作成されたポリシーは、複数のロールで再利用できます。ロールが複数のポリシーに関連付けられている場合、これらのポリシーはデフォルトで結合されます。つまり、ロールの権限は、関連付けられたすべてのポリシーで宣言された権限の合計となります。ロールを作成し、ポリシーを割り当てた後、特定のユーザーにロールを割り当てることができます。
3. ユーザーへのロール割り当て
API7 Enterpriseにログイン後、右上の**「Organization」ボタンをクリックし、ドロップダウンメニューから「Users」**メニュー項目を選択します。

Usersセクションでは、すべてのユーザーを管理できます。デフォルトでは、組み込みの管理者としてadminロールが存在します。
ロールリストの右側のアクション列で、**「Update Roles」**をクリックして、特定のユーザーのロールを更新するフォームドロワーを開きます。

1人のユーザーが複数のロールを持つことができます。ユーザーに複数のロールが割り当てられている場合、権限は結合されます。つまり、ユーザーはすべてのロールの権限の合計を持ちます。
簡素化されたロールマッピング
ユーザーロールモデルの最適化とアップグレードにより、SSOロールマッピングプロセスが簡素化されました。ログインオプションのロールマッピングを設定する際、各ロールごとにリソースレベルのマッチングルールを個別に設定する必要がなくなりました。リソースと操作の権限は、選択された組み込みロールから直接継承されるため、権限設定がより直感的になり、権限管理の複雑さが軽減されます。

まとめ
IAMポリシーの導入により、より柔軟な権限設定と管理が可能になりました。この調整は、システムのセキュリティを強化するだけでなく、ユーザーにカスタマイズの可能性を広げます。
今後、IAMポリシーがサポートするリソースタイプを拡張し、すべてのシステムリソースを細かい権限管理に含めることを目指します。また、ポリシー編集と管理インターフェースを継続的に最適化し、ユーザーにより包括的で効率的な権限管理体験を提供します。