ネットワークおよびAPIゲートウェイ関連リソースへのアクセスを制御するポリシーの作成

APIゲートウェイで使用するポリシーの作成方法を確認します。

ユーザーがAPIゲートウェイ・サービスを使用してAPIゲートウェイを作成し、APIをデプロイする前に、テナンシ管理者としてAPIゲートウェイ関連リソースおよびネットワーク・リソースへのアクセス権を付与する多数のOracle Cloud Infrastructureポリシーを作成する必要があります。

APIゲートウェイ関連リソースおよびネットワーク・リソースへのアクセス権を付与するには、次を行う必要があります:

ポリシーの詳細は、APIゲートウェイの詳細を参照してください。

APIゲートウェイ・ユーザーのAPIゲートウェイ関連リソースへのアクセス権を付与するポリシーの作成

APIゲートウェイ・ユーザーが新しいAPIゲートウェイおよび新しいAPIデプロイメントを定義する場合、これらのAPIゲートウェイ関連リソースに対応するコンパートメントを指定する必要があります。ユーザーは、所属するグループがアクセス権を付与されているコンパートメントのみ指定できます。ユーザーがコンパートメントを指定できるようにするには、グループへのアクセス権を付与するアイデンティティ・ポリシーを作成する必要があります。

リソースを所有するコンパートメント内のAPIゲートウェイ関連リソースにユーザーがアクセスできるようにするポリシーを作成するには:

  1. テナンシ管理者としてコンソールにログインします。
  2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
  3. 左側のリストからAPIゲートウェイ関連リソースを所有するコンパートメントを選択します。
  4. 「ポリシーの作成」をクリックします。
  5. 次を入力します:

    • 名前: ポリシーに対して意味のある名前(たとえば、acme-apigw-developers-manage-access)。この名前は、テナンシ内のすべてのポリシー間で一意である必要があります。これは後で変更できません。機密情報の入力は避けてください。
    • 説明: 意味のある説明(たとえば、Gives api-gateway developers access to all resources in the acme-apigw-compartment)。これは必要に応じて後で変更できます。
    • ステートメント: 次のポリシー・ステートメントは、グループに対してコンパートメント内のすべてのAPIゲートウェイ関連リソースへのアクセス権を付与します:

      ステートメント1:では、次のポリシー・ステートメントを入力し、グループに対するアクセス権をコンパートメント内のすべてのAPIゲートウェイ関連リソースに付与します:

      Allow group <group-name> to manage api-gateway-family in compartment <compartment-name>

      例:

      Allow group acme-apigw-developers to manage api-gateway-family in compartment acme-apigw-compartment
    • タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に問い合せてください。タグは後から適用できます。
  6. 「作成」をクリックして、APIゲートウェイ・ユーザーにコンパートメント内のAPIゲートウェイ関連リソースへのアクセス権を付与するポリシーを作成します。
ヒント

通常、APIゲートウェイおよびAPIデプロイメントは同じコンパートメントに作成されます。ただし、多くのAPI開発者がいる大規模な開発チームでは、APIゲートウェイおよびAPIデプロイメント用に別個のコンパートメントを作成すると便利な場合があります。これにより、これらのリソースに対する適切なアクセス権を様々なユーザー・グループに付与できます。

APIゲートウェイ・ユーザーにネットワーク・リソースへのアクセス権を付与するポリシーの作成

APIゲートウェイ・ユーザーが新しいAPIゲートウェイを定義する場合、VCNと、APIゲートウェイを作成するサブネットを指定する必要があります。ユーザーは、自分が属するグループがアクセス権を付与されているVCNおよびサブネットのみを指定できます。ユーザーがVCNおよびサブネットを指定できるようにするには、グループに対するアクセス権を付与するアイデンティティ・ポリシーを作成する必要があります。また、ユーザーがパブリックAPIゲートウェイを作成できるようにする場合、アイデンティティ・ポリシーで、グループがネットワーク・リソースを所有するコンパートメント内のパブリックIPアドレスを管理することを許可する必要があります。

APIゲートウェイ・ユーザーにネットワーク・リソースへのアクセス権を付与するポリシーを作成するには:

  1. テナンシ管理者としてコンソールにログインします。
  2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
  3. ネットワーク・リソースを所有するコンパートメントを左側のリストから選択します。
  4. 「ポリシーの作成」をクリックします。
  5. 次を入力します:

    • 名前: ポリシーに対して意味のある名前(たとえば、acme-apigw-developers-network-access)。この名前は、テナンシ内のすべてのポリシー間で一意である必要があります。これは後で変更できません。機密情報の入力は避けてください。
    • 説明: 意味のある説明(たとえば、Gives api-gateway developers access to all network resources in the acme-network compartment)。これは必要に応じて後で変更できます。
    • ステートメント: 次のポリシー・ステートメントは、グループに対してコンパートメント内のネットワーク・リソースへのアクセス権を付与します(パブリックIPアドレスを管理する機能を含む):

      Allow group <group-name> to manage virtual-network-family in compartment <compartment-name>

      例:

      Allow group acme-apigw-developers to manage virtual-network-family in compartment acme-network
    • タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に問い合せてください。タグは後から適用できます。
  6. 「作成」をクリックして、APIゲートウェイ・ユーザーにコンパートメント内のネットワーク・リソースおよびパブリックIPアドレスへのアクセス権を付与するポリシーを作成します。

ファンクションへのAPIゲートウェイ・ユーザー・アクセスを提供するポリシーの作成

APIゲートウェイ・ユーザーが新しいAPIゲートウェイを定義する場合、オプションの1つは、OCIファンクションで定義されたサーバーレス・ファンクションをAPIバック・エンドとして指定することです。ユーザーは、属しているグループがアクセス権を付与されているファンクションのみを指定できます。ユーザーがAPIバック・エンドとしてファンクションを指定できるようにする場合は、グループに対してアクセス権を付与するアイデンティティ・ポリシーを作成する必要があります。ユーザー・グループのこのポリシーに加えて、ユーザーがAPIバック・エンドとしてファンクションを指定できるようにするには、APIゲートウェイにOCIファンクションへのアクセス権を付与するポリシーも作成する必要があること(ファンクションへのAPIゲートウェイ・アクセスを提供するポリシーの作成を参照)。

グループに対してOCI関数へのアクセス権を付与するアイデンティティ・ポリシーを作成するもう1つの理由は、ユーザーが(JSONファイルではなく)コンソールを使用して認証リクエスト・ポリシーを定義し、OCI関数で定義されている認可プロバイダ・ファンクションを指定できるようにする場合です(認証および認可をAPIデプロイメントに追加するためのトークン・ファンクションの受渡しを参照)。

OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイ・ユーザーに付与するポリシーを作成するには:

  1. テナンシ管理者としてコンソールにログインします。
  2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
  3. 左側のリストからファンクションを所有するコンパートメントを選択します。
  4. 「ポリシーの作成」をクリックします。
  5. 次を入力します:

    • 名前: ポリシーに対して意味のある名前(たとえば、acme-apigw-developers-functions-access)。この名前は、テナンシ内のすべてのポリシー間で一意である必要があります。これは後で変更できません。機密情報の入力は避けてください。
    • 説明: 意味のある説明(たとえば、Gives api-gateway developers access to all functions in the acme-functions-compartment)。これは必要に応じて後で変更できます。
    • ステートメント:次のポリシー・ステートメントは、グループに対してコンパートメント内のファンクションへのアクセス権を付与します:

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

      例:

      Allow group acme-apigw-developers to use functions-family in compartment acme-functions-compartment
    • タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に問い合せてください。タグは後から適用できます。
  6. 「作成」をクリックして、APIゲートウェイ・ユーザーにコンパートメント内のファンクションへのアクセス権を付与するポリシーを作成します。

APIゲートウェイ・ユーザーが証明書アソシエーションを作成できるようにするポリシーの作成

APIゲートウェイのユーザーは、証明書サービス証明書リソースを使用して、APIゲートウェイのカスタム・ドメイン名を設定できます。ユーザーが証明書サービス証明書リソースをAPIゲートウェイに関連付けることができるようにするには、ユーザーが属するグループに証明書アソシエーションの作成を許可するアイデンティティ・ポリシーを作成する必要があります。

APIゲートウェイ・ユーザーが証明書サービス証明書リソースをAPIゲートウェイに関連付けることができるようにするポリシーを作成するには:

  1. テナンシ管理者としてコンソールにログインします。
  2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
  3. 左側のリストから、APIゲートウェイを所有するコンパートメントを選択します。
  4. 「ポリシーの作成」をクリックします。
  5. 次を入力します:

    • 名前:ポリシーに対して有効な名前(たとえば、acme-apigw-developers-certificate-association)。この名前は、テナンシ内のすべてのポリシー間で一意である必要があります。これは後で変更できません。機密情報の入力は避けてください。
    • 説明:わかりやすい説明(Gives api-gateway developers the ability to create certificate associationsなど)。これは必要に応じて後で変更できます。
    • ステートメント:グループが証明書サービス証明書リソースをコンパートメント内のAPIゲートウェイに関連付けることができるようにする次のポリシー・ステートメント:

      Allow group <group-name> to manage certificate-associations in compartment <compartment-name>

      例:

      Allow group acme-apigw-developers to manage certificate-associations in compartment acme-apigw-compartment
    • タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に問い合せてください。タグは後から適用できます。
  6. 「作成」をクリックして、APIゲートウェイ・ユーザーが証明書サービス証明書リソースをコンパートメント内のAPIゲートウェイに関連付けることができるポリシーを作成します。

APIゲートウェイ・ユーザーがCAおよびCAバンドルを管理できるようにするポリシーの作成

デフォルトの認証局(CA)およびCAバンドルの他に、APIゲートウェイ・ユーザーは、他のCAのルート証明書、およびその他のCAバンドル(カスタムCAおよびカスタムCAバンドルと呼ばれる)をAPIゲートウェイのトラスト・ストアに追加することを選択できます。カスタムCAまたはCAバンドルを追加してAPIゲートウェイのトラスト・ストアをカスタマイズするには、最初に証明書サービスにCAリソースまたはCAバンドル・リソースを作成する必要があります。TLS証明書検証のためのトラスト・ストアのカスタマイズを参照してください。

ユーザーがカスタムCAおよびカスタムCAバンドルをカスタム信頼ストアに追加できるようにするには、ユーザーが属するグループが証明書サービスで認証局を管理できるようにするアイデンティティ・ポリシーを作成する必要があります。

APIゲートウェイ・ユーザーがカスタムCAおよびカスタムCAバンドルをカスタム信頼ストアに追加できるようにするポリシーを作成するには:

  1. テナンシ管理者としてコンソールにログインします。
  2. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
  3. APIゲートウェイを所有するコンパートメントを左側のリストから選択します。
  4. 「ポリシーの作成」をクリックします。
  5. 次を入力します:

    • 名前:ポリシーに対して有効な名前(たとえば、acme-apigw-developers-custom-ca-bundle)。この名前は、テナンシ内のすべてのポリシー間で一意である必要があります。これは後で変更できません。機密情報の入力は避けてください。
    • 説明:わかりやすい説明(Gives api-gateway developers the ability to add custom CAs and CA bundlesなど)。これは必要に応じて後で変更できます。
    • ステートメント:グループがカスタムCAおよびカスタムCAバンドルをコンパートメント内のAPIゲートウェイのカスタム・トラスト・ストアに追加できるようにする、次のポリシー・ステートメント:

      Allow group <group-name> to manage certificate-authority-family in compartment <compartment-name>

      例:

      Allow group acme-apigw-developers to manage certificate-authority-family in compartment acme-apigw-compartment
    • タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に問い合せてください。タグは後から適用できます。
  6. 「作成」をクリックして、APIゲートウェイ・ユーザーがカスタムCAおよびカスタムCAバンドルをカスタム信頼ストアに追加できるようにするポリシーを作成します。

APIゲートウェイにファンクションへのアクセス権を付与するポリシーの作成

APIゲートウェイ・ユーザーが新しいAPIゲートウェイを定義する場合、オプションの1つは、OCIファンクションで定義されたサーバーレス・ファンクションをAPIバック・エンドとして指定することです。APIゲートウェイ・サービスは、APIゲートウェイを作成する前に、新しいAPIゲートウェイがIAMポリシーを介して指定されたファンクションにアクセスできるかどうかを検証します。

APIゲートウェイのこのポリシーに加えて、ユーザーがAPIバック・エンドとしてファンクションを指定できるようにするには、OCIファンクションへのアクセス権をユーザーに付与するポリシーを作成する必要もあります(ファンクションへのアクセス権をAPIゲートウェイ・ユーザーに付与するポリシーの作成を参照)。

OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイに付与するポリシーを作成するには:

  1. テナンシ管理者としてコンソールにログインします。
  2. OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイに付与する新しいポリシーを作成します:

    1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
    2. アクセス権を付与するファンクション関連リソースを含むコンパートメントを選択します。リソースが別のコンパートメントにある場合は、共通の親コンパートメント(たとえば、テナンシのルート・コンパートメント)を選択します。
    3. ポリシーを作成するにはの手順に従い、ポリシーに名前を付けます(たとえば、acme-apigw-gateways-functions-policy)。
    4. OCIファンクションで定義されたファンクションを含むコンパートメントへのアクセス権をAPIゲートウェイに付与するポリシー・ステートメントを入力します:

      ALLOW any-user to use functions-family in compartment <functions-compartment-name> where ALL {request.principal.type= 'ApiGateway', request.resource.compartment.id = '<api-gateway-compartment-OCID>'}

      ここでは:

      • <functions-compartment-name>は、APIゲートウェイのバック・エンドとして使用するファンクションを含むコンパートメントの名前です。
      • <api-gateway-compartment-OCID>は、ファンクションにアクセスするAPIゲートウェイを含むコンパートメントのOCIDです。

      例:

      ALLOW any-user to use functions-family in compartment acme-functions-compartment where ALL {request.principal.type= 'ApiGateway', request.resource.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa7______ysq'}
    5. 「作成」をクリックして、OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイに付与するポリシーを作成します。

Vaultサービスのシークレットとして格納された資格証明へのAPIゲートウェイ・アクセス権を付与するポリシーの作成

APIゲートウェイ・ユーザーが外部キャッシュ・サーバー(Redisサーバーなど)でレスポンス・データをキャッシュするAPIゲートウェイを定義する場合、キャッシュ・サーバーで認証する資格証明をVaultサービスに格納する必要があります。同様に、APIゲートウェイ・ユーザーが認可サーバーのイントロスペクション・エンドポイントにアクセスしてトークンを検証するAPIゲートウェイを定義する場合、認可サーバーで認証する資格証明はVaultサービスに格納する必要があります。APIゲートウェイがキャッシュ・サーバーまたは認可サーバーで認証されるようにするには、APIゲートウェイにVaultサービスのシークレットへのアクセス権を付与するポリシーを作成する必要があります。

APIゲートウェイにVaultサービスのシークレットへのアクセス権を付与するポリシーを作成するには:

  1. テナンシ管理者としてコンソールにログインします。
  2. 1つ以上のAPIゲートウェイで構成される新しい動的グループを作成します。

    1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「動的グループ」をクリックします。
    2. 動的グループを作成するにはの手順に従って、動的グループに名前を付けます(たとえば、acme-apigw-dyn-grp)。
    3. 動的グループのルールを指定する場合は、次の例について検討してください:

      • コンパートメント内のすべてのAPIゲートウェイがシークレットにアクセスできるようにする場合は、次のようなルールを入力します。これにより、指定したコンパートメントOCIDを持つコンパートメント内のすべてのAPIゲートウェイが動的グループに追加されます:

        ALL {resource.type = 'ApiGateway', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
      • 特定のAPIゲートウェイがシークレットにアクセスできるようにする場合は、次のようなルールを入力して、指定したOCIDのAPIゲートウェイを動的グループに追加します:

        ALL {resource.type = 'ApiGateway', resource.id = 'ocid1.apigateway.oc1.iad.aaaaaaaab______hga'}
    4. 「動的グループの作成」をクリックします。

    1つ以上のAPIゲートウェイを含む動的グループを作成したら、動的グループに1つ以上のシークレットへのアクセス権を付与するポリシーを作成できるようになりました。

  3. 動的グループにVaultサービスの1つ以上のシークレットへのアクセス権を付与する新しいポリシーを作成します:

    1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
    2. ポリシーを作成するにはの手順に従って、ポリシーを指定します(たとえば、acme-apigw-dyn-grp-policy)。
    3. ポリシー・ステートメントを指定する場合は、次の例について検討してください:

      • acme-apigw-dyn-grpのAPIゲートウェイがコンパートメント内のすべてのシークレットにアクセスできるようにする場合は、次のようなポリシー・ステートメントを入力します:

        allow dynamic-group acme-apigw-dyn-grp to read secret-bundles in compartment acme-apigw-compartment
      • acme-apigw-dyn-grpのAPIゲートウェイが特定のシークレットにアクセスできるようにする場合は、次のようなポリシー・ステートメントを入力します:

        allow dynamic-group acme-apigw-dyn-grp to read secret-bundles in compartment acme-apigw-compartment where target.secret.id='ocid1.vaultsecret.oc1.iad.amaaaaaa______qia'
    4. 「作成」をクリックして、動的グループ内のAPIゲートウェイにVaultサービス内の指定されたシークレットへのアクセス権を付与する新しいポリシーを作成します。