ファンクションを呼び出して管理するためのアクセス権の制御

OCI Functionsでユーザーが起動および管理できるファンクションを制御する方法を確認します。

ファンクション開発用にテナンシを構成する場合は、次のアイデンティティ・ポリシー・ステートメントを指定します(OCIファンクション・ユーザーにファンクション関連リソースへのアクセス権を付与するポリシー・ステートメントを参照)。

Allow group <group-name> to manage functions-family in compartment <compartment-name>

このアイデンティティ・ポリシーを使用すると、指定されたグループ内の認証済ユーザーは、名前付きコンパートメント内のファンクションおよびアプリケーションを管理(つまり、作成、更新および削除)でき、また、それらのユーザーがコンパートメント内のファンクションを呼び出すこともできます。このポリシーは、通常、組織内で複数のファンクションを開発およびテストするファンクション開発者の要件を満たします。

ただし、このアイデンティティ・ポリシーは、本番環境でのファンクションの呼出しおよび管理を制御するためにセキュリティ要件を満たすには寛大すぎる可能性があります。たとえば、本番環境では、ユーザーによるファンクションの呼出しを完全に防いだり、特定のアプリケーションのファンクションの呼出しのみ、または特定のファンクションの呼出しのみに制限したい場合があります。

ノート

アプリケーションのプライベート・サブネットを指定すると、アプリケーション内のファンクションの呼出しエンドポイントへのインターネットからのアクセスが妨げられることはありません。アイデンティティ・ポリシーを使用して、ファンクション呼出しエンドポイントへのアクセスを制御します(このトピックを参照)。

グループ内のユーザーが呼び出して管理できるファンクションを制御するには、次のアイデンティティ・ポリシーを設定します:

  1. ユーザーが呼び出して管理できるファンクションを制御するには、そのユーザーがmanage functions-family権限を付与されたグループ内に属していないことを確認します。

  2. グループ内のユーザーが、コンパートメント内のアプリケーションおよびファンクションを作成、更新および削除できるがファンクションは呼び出せないようにするには、次のポリシー・ステートメントを入力します:
    Allow group <group-name> to manage fn-app in compartment <compartment-name>
    Allow group <group-name> to manage fn-function in compartment <compartment-name>
  3. 特定のファンクションのみの起動、または特定のアプリケーションのファンクションのみの起動を許可する場合は、適切なポリシー・ステートメントに適切なファンクションおよびアプリケーションOCIDsを含めます。例:

    • ユーザーが特定のアプリケーションのすべてのファンクションを呼び出せるようにするには、次のフォーマットでポリシー・ステートメントを入力します:
      Allow group <group-name> to use fn-invocation in compartment <compartment-name> where target.app.id = '<application-OCID>'
    • ユーザーが1つの特定のファンクションを呼び出せるようにするには、次のフォーマットでポリシー・ステートメントを入力します:
      Allow group <group-name> to use fn-invocation in compartment <compartment-name> where target.function.id = '<function-OCID>'
    • ユーザーが1つの特定のアプリケーション内のファンクションを除くすべてのアプリケーション内のすべてのファンクションを呼び出せるようにするには、次のフォーマットでポリシー・ステートメントを入力します:
      Allow group <group-name> to use fn-invocation in compartment <compartment-name> where target.app.id != '<application-OCID>'
    • ユーザーが1つの特定のファンクションを除くコンパートメント内のすべてのファンクションを呼び出せるようにするには、次のフォーマットでポリシー・ステートメントを入力します:
      Allow group <group-name> to use fn-invocation in compartment <compartment-name> where target.function.id != '<function-OCID>'
    • ユーザーが2つの特定のファンクションを呼び出せるようにするには、次のフォーマットでポリシー・ステートメントを入力します:
      Allow group <group-name> to use fn-invocation in compartment <compartment-name> where ANY {target.function.id='<function-OCID>', target.function.id='<function-OCID>'}
    • ユーザーが特定のアプリケーションのすべてのファンクションとともに1つの特定のファンクションを呼び出せるようにするには、次のフォーマットでポリシー・ステートメントを入力します:
      Allow group <group-name> to use fn-invocation in compartment <compartment-name> where ANY {target.function.id='<function-OCID>', target.app.id='<application-OCID>'}
  4. 特定のIPアドレスからのファンクション呼出しおよび管理リクエストのみを許可する場合:

    1. 適切なネットワーク・ソースがまだ存在しない場合は、許可されたIPアドレスを指定するネットワーク・ソースを作成します(https://docs.oracle.com/iaas/Content/Identity/Tasks/managingnetworksources.htmを参照)。
    2. ネットワーク・ソース内のIPアドレスのみがファンクションを起動または管理できるようにするポリシー・ステートメントを追加します。例:

      • corpnetという名前のネットワーク・ソースで定義されたIPアドレスからのファンクション呼出しリクエストのみを許可するには、次の形式でポリシー・ステートメントを入力します:

        Allow group <group-name> to use fn-invocation in compartment <compartment-name> where request.networkSource.name='corpnet'
      • corpnetという名前のネットワーク・ソースで定義されたIPアドレスからのファンクション管理リクエストのみを許可するには、次の形式でポリシー・ステートメントを入力します:

        Allow group <group-name> to manage functions-family in compartment <compartment-name> where request.networkSource.name='corpnet'