ネットワークおよびAPIゲートウェイ関連リソースへのアクセスを制御するポリシーの作成
APIゲートウェイで使用するポリシーの作成方法をご紹介します。
ユーザーがAPIゲートウェイ・サービスを使用してAPIゲートウェイを作成し、APIをデプロイする前に、テナンシ管理者として、APIゲートウェイ関連およびネットワーク・リソースへのアクセス権を付与する多数のOracle Cloud Infrastructureポリシーを作成する必要があります。
APIゲートウェイ関連リソースおよびネットワーク・リソースへのアクセス権を付与するには、次を行う必要があります:
-
APIゲートウェイ関連リソース、ネットワーク・リソースおよび(オプションで)ファンクション・リソースへのアクセス権をユーザーに付与します。具体的には、次を実行する必要があります:
- 必要に応じて、APIゲートウェイ・ユーザーがカスタム・ドメイン名を設定するときに、証明書サービス証明書リソースをAPIゲートウェイに関連付けることができるようにします。APIゲートウェイ・ユーザーが証明書アソシエーションを作成できるようにするポリシーの作成を参照してください。
- 必要に応じて、APIゲートウェイ・ユーザーがカスタム・トラスト・ストアを設定するときに、証明書サービスの認証局(CA)またはCAバンドルをAPIゲートウェイに関連付けることができるようにします。APIゲートウェイ・ユーザーがCAおよびCAバンドルを管理できるようにするポリシーの作成を参照してください。
-
必要に応じて、OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイに付与します。APIゲートウェイ・ユーザーがAPIバック・エンドとしてOCIファンクションのサーバーレス・ファンクションを使用して新しいAPIゲートウェイを定義した場合、APIゲートウェイ・サービスは新しいAPIゲートウェイが指定のファンクションにアクセスできるかどうかを検証します。アクセスを提供するには、OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイに付与するポリシーを作成する必要があります。APIゲートウェイにファンクションへのアクセス権を付与するポリシーの作成を参照してください。
- 必要に応じて、APIゲートウェイにVaultサービスのボールトに格納されているシークレットへのアクセス権を付与します。APIゲートウェイ・ユーザーが、レスポンス・データを外部キャッシュ・サーバー(Redisサーバーなど)にキャッシュするAPIゲートウェイを定義する場合、キャッシュ・サーバーで認証する資格証明をVaultサービスに格納する必要があります。同様に、APIゲートウェイ・ユーザーが、認可サーバーのイントロスペクション・エンドポイントにアクセスしてトークンを検証するAPIゲートウェイを定義する場合、認可サーバーにアクセスするための資格証明をVaultサービスに格納する必要があります。APIゲートウェイにVault Serviceのシークレットとして格納された資格証明へのアクセス権を付与するポリシーの作成を参照してください。
ポリシーの詳細は、APIゲートウェイの詳細を参照してください。
APIゲートウェイ・ユーザーのAPIゲートウェイ関連リソースへのアクセス権を付与するポリシーの作成
APIゲートウェイ・ユーザーが新しいAPIゲートウェイおよび新しいAPIデプロイメントを定義する場合、それらのAPIゲートウェイ関連リソースのコンパートメントを指定する必要があります。ユーザーは、所属するグループがアクセス権を付与されているコンパートメントのみ指定できます。ユーザーがコンパートメントを指定できるようにするには、グループへのアクセス権を付与するアイデンティティ・ポリシーを作成する必要があります。
リソースを所有するコンパートメント内のAPIゲートウェイ関連リソースにユーザーがアクセスできるようにするポリシーを作成するには:
- テナンシ管理者としてコンソールにログインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
- 左側のリストからAPIゲートウェイ関連リソースを所有するコンパートメントを選択します。
- 「ポリシーの作成」をクリックします。
-
次を入力します:
- 名前: ポリシーに対して意味のある名前(たとえば、
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
- タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に連絡してください。タグは後で適用できます。
- 名前: ポリシーに対して意味のある名前(たとえば、
- 「作成」をクリックして、APIゲートウェイ・ユーザーにコンパートメント内のAPIゲートウェイ関連リソースへのアクセス権を付与するポリシーを作成します。
通常、APIゲートウェイおよびAPIデプロイメントは同じコンパートメントに作成されます。ただし、多くのAPI開発者がいる大規模な開発チームでは、APIゲートウェイおよびAPIデプロイメント用に別個のコンパートメントを作成すると便利な場合があります。これにより、これらのリソースに対する適切なアクセス権を様々なユーザー・グループに付与できます。
APIゲートウェイ・ユーザーにネットワーク・リソースへのアクセス権を付与するポリシーの作成
APIゲートウェイ・ユーザーが新しいAPIゲートウェイを定義する場合、VCNと、APIゲートウェイを作成するサブネットを指定する必要があります。ユーザーは、自分が属するグループがアクセス権を付与されているVCNおよびサブネットのみを指定できます。ユーザーがVCNおよびサブネットを指定できるようにするには、グループに対するアクセス権を付与するアイデンティティ・ポリシーを作成する必要があります。また、ユーザーがパブリックAPIゲートウェイを作成できるようにする場合、アイデンティティ・ポリシーで、グループがネットワーク・リソースを所有するコンパートメント内のパブリックIPアドレスを管理することを許可する必要があります。
APIゲートウェイ・ユーザーにネットワーク・リソースへのアクセス権を付与するポリシーを作成するには:
- テナンシ管理者としてコンソールにログインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
- ネットワーク・リソースを所有するコンパートメントを左側のリストから選択します。
- 「ポリシーの作成」をクリックします。
-
次を入力します:
- 名前: ポリシーに対して意味のある名前(たとえば、
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
- タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に連絡してください。タグは後で適用できます。
- 名前: ポリシーに対して意味のある名前(たとえば、
- 「作成」をクリックして、APIゲートウェイ・ユーザーにコンパートメント内のネットワーク・リソースおよびパブリックIPアドレスへのアクセス権を付与するポリシーを作成します。
ファンクションへのAPIゲートウェイ・ユーザー・アクセスを提供するポリシーの作成
APIゲートウェイ・ユーザーが新しいAPIゲートウェイを定義する場合、オプションとして、OCIファンクションで定義されたサーバーレス・ファンクションをAPIバック・エンドとして指定します。ユーザーは、属しているグループがアクセス権を付与されているファンクションのみを指定できます。ユーザーがAPIバック・エンドとしてファンクションを指定できるようにする場合は、グループに対してアクセス権を付与するアイデンティティ・ポリシーを作成する必要があります。ユーザー・グループに対するこのポリシーに加えて、ユーザーがAPIバック・エンドとしてファンクションを指定できるようにするには、APIゲートウェイにOCIファンクションへのアクセス権を付与するポリシーを作成する必要もあります(ファンクションへのAPIゲートウェイ・アクセスを提供するポリシーの作成を参照)。
グループにOCIファンクションへのアクセス権を付与するアイデンティティ・ポリシーを作成するもう1つの理由は、ユーザーが(JSONファイルではなく)コンソールを使用して認証リクエスト・ポリシーを定義し、OCIファンクションで定義された認可プロバイダ・ファンクションを指定できるようにする場合です(「認可プロバイダ・ファンクションへのトークンの渡しによるAPIデプロイメントへの認証および認可の追加」を参照)。
OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイ・ユーザーに付与するポリシーを作成するには:
- テナンシ管理者としてコンソールにログインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
- 左側のリストからファンクションを所有するコンパートメントを選択します。
- 「ポリシーの作成」をクリックします。
-
次を入力します:
- 名前: ポリシーに対して意味のある名前(たとえば、
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
- タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に連絡してください。タグは後で適用できます。
- 名前: ポリシーに対して意味のある名前(たとえば、
- 「作成」をクリックして、APIゲートウェイ・ユーザーにコンパートメント内のファンクションへのアクセス権を付与するポリシーを作成します。
APIゲートウェイ・ユーザーが証明書アソシエーションを作成できるようにするポリシーの作成
APIゲートウェイ・ユーザーは、証明書サービス証明書リソースを使用して、APIゲートウェイのカスタム・ドメイン名を設定できます。ユーザーが証明書サービス証明書リソースをAPIゲートウェイに関連付けることができるようにするには、ユーザーが属するグループに証明書アソシエーションの作成を許可するアイデンティティ・ポリシーを作成する必要があります。
APIゲートウェイ・ユーザーが証明書サービス証明書リソースをAPIゲートウェイに関連付けることができるようにするポリシーを作成するには:
- テナンシ管理者としてコンソールにログインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
- 左側のリストからAPIゲートウェイを所有するコンパートメントを選択します。
- 「ポリシーの作成」をクリックします。
-
次を入力します:
- 名前:ポリシーに対して意味のある名前(たとえば、
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
- タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に連絡してください。タグは後で適用できます。
- 名前:ポリシーに対して意味のある名前(たとえば、
- 「作成」をクリックして、APIゲートウェイ・ユーザーが証明書サービス証明書リソースをコンパートメント内のAPIゲートウェイに関連付けることができるポリシーを作成します。
APIゲートウェイ・ユーザーがCAおよびCAバンドルを管理できるようにするポリシーの作成
APIゲートウェイ・ユーザーは、デフォルトの認証局(CA)およびCAバンドルに加えて、他のCAのルート証明書およびその他のCAバンドル(カスタムCAおよびカスタムCAバンドルと呼ばれる)をAPIゲートウェイのトラスト・ストアに追加することを選択できます。カスタムCAまたはCAバンドルを追加してAPIゲートウェイのトラスト・ストアをカスタマイズするには、ユーザーはまず証明書サービスにCAリソースまたはCAバンドル・リソースを作成する必要があります。「TLS証明書検証のためのトラスト・ストアのカスタマイズ」を参照してください。
ユーザーがカスタムCAおよびカスタムCAバンドルをカスタム・トラスト・ストアに追加できるようにするには、ユーザーが属するグループが証明書サービスの認証局の管理を許可するアイデンティティ・ポリシーを作成する必要があります。
APIゲートウェイ・ユーザーがカスタムCAおよびカスタムCAバンドルをカスタム・トラスト・ストアに追加できるようにするポリシーを作成するには:
- テナンシ管理者としてコンソールにログインします。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。表示しているコンパートメント内のポリシーのリストが表示されます。
- 左側のリストからAPIゲートウェイを所有するコンパートメントを選択します。
- 「ポリシーの作成」をクリックします。
-
次を入力します:
- 名前:ポリシーに対して意味のある名前(たとえば、
acme-apigw-developers-custom-ca-bundle
)。この名前は、テナンシ内のすべてのポリシー間で一意である必要があります。これは後で変更できません。機密情報の入力は避けてください。 - 説明:わかりやすい説明(
Gives api-gateway developers the ability to add custom CAs and CA bundles
など)。これは必要に応じて後で変更できます。 -
ステートメント:グループがコンパートメント内のAPIゲートウェイのカスタム・トラスト・ストアにカスタムCAおよびカスタムCAバンドルを追加できるようにするには、次のポリシー・ステートメントを使用します:
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
- タグ: リソースの作成権限がある場合は、そのリソースにフリーフォーム・タグを適用する権限もあります。定義済のタグを適用するには、タグ・ネームスペースを使用する権限が必要です。タグ付けの詳細は、リソース・タグを参照してください。タグを適用するかどうかがわからない場合は、このオプションをスキップするか、管理者に連絡してください。タグは後で適用できます。
- 名前:ポリシーに対して意味のある名前(たとえば、
- 「作成」をクリックして、APIゲートウェイ・ユーザーがカスタムCAおよびカスタムCAバンドルをカスタム・トラスト・ストアに追加できるようにするポリシーを作成します。
APIゲートウェイにファンクションへのアクセス権を付与するポリシーの作成
APIゲートウェイ・ユーザーが新しいAPIゲートウェイを定義する場合、オプションとして、OCIファンクションで定義されたサーバーレス・ファンクションをAPIバック・エンドとして指定します。APIゲートウェイ・サービスは、APIゲートウェイを作成する前に、新しいAPIゲートウェイがIAMポリシーを介して指定されたファンクションにアクセスできるかどうかを検証します。
APIゲートウェイに対するこのポリシーに加えて、ユーザーがAPIバック・エンドとしてファンクションを指定できるようにするには、ユーザーにOCIファンクションへのアクセス権を付与するポリシーも作成する必要があります(ファンクションへのAPIゲートウェイ・ユーザー・アクセスを提供するポリシーの作成を参照)。
APIゲートウェイにOCIファンクションで定義されたファンクションへのアクセス権を付与するポリシーを作成するには:
- テナンシ管理者としてコンソールにログインします。
-
新しいポリシーを作成して、OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイに提供します:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
- アクセス権を付与するファンクション関連リソースを含むコンパートメントを選択します。リソースが別のコンパートメントにある場合は、共通の親コンパートメント(たとえば、テナンシのルート・コンパートメント)を選択します。
- ポリシーを作成するにはの手順に従い、ポリシーに名前を付けます(たとえば、
acme-apigw-gateways-functions-policy
)。 -
ポリシー・ステートメントを入力して、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'}
- 「作成」をクリックして、OCIファンクションで定義されたファンクションへのアクセス権をAPIゲートウェイに付与するポリシーを作成します。
APIゲートウェイにVaultサービスのシークレットとして格納された資格証明へのアクセス権を付与するポリシーの作成
APIゲートウェイ・ユーザーが、レスポンス・データを外部キャッシュ・サーバー(Redisサーバーなど)にキャッシュするAPIゲートウェイを定義する場合、キャッシュ・サーバーで認証する資格証明をVaultサービスに格納する必要があります。同様に、APIゲートウェイ・ユーザーが、認可サーバーのイントロスペクション・エンドポイントにアクセスしてトークンを検証するAPIゲートウェイを定義する場合、認可サーバーで認証する資格証明をVaultサービスに格納する必要があります。APIゲートウェイがキャッシュ・サーバーまたは認可サーバーで認証できるようにするには、Vaultサービスのシークレットへのアクセス権をAPIゲートウェイに付与するポリシーを作成する必要があります。
APIゲートウェイにVaultサービスのシークレットへのアクセス権を付与するポリシーを作成するには:
- テナンシ管理者としてコンソールにログインします。
-
1つ以上のAPIゲートウェイで構成される新しい動的グループを作成します:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ドメイン」をクリックします。「アイデンティティ・ドメイン」で、「動的グループ」をクリックします。
- 動的グループを作成するにはの手順に従って、動的グループに名前を付けます(たとえば、
acme-apigw-dyn-grp
)。 -
動的グループのルールを指定する場合は、次の例について検討してください:
-
コンパートメント内のすべての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'}
-
- 「動的グループの作成」をクリックします。
1つ以上のAPIゲートウェイを含む動的グループを作成したら、動的グループに1つ以上のシークレットへのアクセス権を付与するポリシーを作成できるようになりました。
-
動的グループにVaultサービス内の1つ以上のシークレットへのアクセス権を付与する新しいポリシーを作成します:
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
- ポリシーを作成するにはの説明に従って、ポリシーに名前を付けます(たとえば、
acme-apigw-dyn-grp-policy
)。 -
ポリシー・ステートメントを指定する場合は、次の例について検討してください:
-
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'
-
- 「作成」をクリックして、動的グループ内のAPIゲートウェイにVaultサービスの指定されたシークレットへのアクセス権を付与する新しいポリシーを作成します。