ネットワークおよびファンクション関連リソースへのアクセスを制御するポリシーの作成

ネットワークおよびファンクション関連のリソースに対する、ユーザーとOCIファンクション・サービスの両方のアクセスを制御するポリシーを作成する方法をご紹介します。

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

「ポリシー・ユースケース」として「ファンクション」を選択し、「ユーザーによるファンクションおよびアプリケーションの作成、デプロイおよび管理」ポリシー・テンプレートを選択して、ポリシー・ビルダーを使用して適切なポリシーを作成します。このポリシー・テンプレートには、OCIファンクションを使用するために必要なすべてのポリシー・ステートメントが含まれています。ポリシー・ビルダーを使用したポリシー・ステートメントの記述を参照してください。

または、ポリシー・ステートメントを含むポリシーを1つ以上作成できます(ポリシーを作成するにはの手順に従います)。

ポリシー・ステートメント

OCIファンクション・ユーザーにOracle Cloud Infrastructure Registryリポジトリへのアクセス権を付与するためのポリシー・ステートメント
目的: 作成場所: 文:
ユーザーがテナンシのオブジェクト・ストレージ・ネームスペース文字列を取得できるようにします ルート・コンパートメント Allow group <group-name> to read objectstorage-namespaces in tenancy
Oracle Cloud Infrastructure Registry内のリポジトリへのアクセス権をユーザーに付与します リポジトリを所有するコンパートメント、またはルート・コンパートメント Allow group <group-name> to manage repos in tenancy|<compartment-name>

OCI Functionsユーザーがファンクションを使用する場合は、Oracle Cloud Infrastructure Registryのリポジトリにアクセスする必要があります。ユーザーは、自分が属するグループがアクセス権を付与されているリポジトリにのみアクセスできます。ユーザーがリポジトリにアクセスするには、ポリシー・ステートメントによって、そのリポジトリへのアクセス権がグループに付与される必要があります。

ポリシー・ステートメントAllow group <group-name> to read objectstorage-namespaces in tenancyを使用すると、ユーザーは、Oracle Cloud Infrastructure Registryへのログインに必要な、テナンシの自動生成されたオブジェクト・ストレージ・ネームスペース文字列を取得できます。このポリシー・ステートメントでは、Oracle Cloud Infrastructure Object Storageのストレージ・バケットに格納されたファンクション・ログへのアクセスも提供されます(ファンクション・ログの格納および表示を参照)。

ポリシー・ステートメントAllow group <group-name> to manage repos in tenancyを使用して、Oracle Cloud Infrastructure Registryのリポジトリへのアクセス権をユーザーに付与する場合、このポリシー・ステートメントは、テナンシ内のすべてのリポジトリを管理する権限をグループに付与することに注意してください。これでは許容性が高すぎると思われる場合、manage repos文にwhere句を含めることで、グループがアクセスできるリポジトリを制限できます。Where句を含める場合、グループがテナンシ内のすべてのリポジトリを調査できるようにするために、ポリシーに2番目の文も含める必要があります(コンソールを使用する場合)。たとえば、次のポリシー・ステートメントは、'acme-web-app'で始まる名前のリポジトリのみにアクセスするようにグループを制限しますが、テナンシ内のすべてのリポジトリをグループが検査できるようにもします:

Allow group acme-functions-developers to inspect repos in tenancy
Allow group acme-functions-developers to manage repos in tenancy where all {target.repo.name=/acme-web-app*/ }
OCIファンクション・ユーザーにファンクション関連リソースへのアクセス権を付与するポリシー・ステートメント
目的: 作成場所: 文:
ファンクション関連リソースへのアクセス権をユーザーに付与します。 ファンクション関連のリソースを所有するコンパートメント Allow group <group-name> to manage functions-family in compartment <compartment-name>
OCI Functionsによって生成されたメトリックへのアクセス権をユーザーに付与します ファンクション関連のリソースを所有するコンパートメント Allow group <group-name> to read metrics in compartment <compartment-name>

OCI Functionsユーザーがファンクションおよびアプリケーションを作成するとき、これらのファンクション関連リソース(OCI Functionsが生成するメトリックを含む)のコンパートメントを指定する必要があります。ユーザーは、所属するグループがアクセス権を付与されているコンパートメントのみ指定できます。ユーザーがコンパートメントを指定できるようにするには、ポリシー・ステートメントはそのコンパートメントへのアクセス権をグループに付与する必要があります。

ポリシー・ステートメントAllow group <group-name> to manage functions-family in compartment <compartment-name>は、ユーザーにファンクション関連リソースへのアクセス権を付与します。

ポリシー・ステートメントAllow group <group-name> to read metrics in compartment <compartment-name>は、OCIファンクションによって生成されたメトリックへのアクセス権をユーザーに付与します。

OCIファンクション・ユーザーにロギング・リソースへのアクセス権を付与するポリシー・ステートメント
目的: 作成場所: 文:
ユーザーにロギング・リソースへのアクセス権を付与します。 ルート・コンパートメント

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

OCI Functionsユーザーがアプリケーションを定義すると、ロギングを有効化して、Oracle Cloud Infrastructure Loggingサービスでファンクション・ログを格納および表示できます。ユーザーは、自分が属するグループがアクセス権を付与されているログのみを表示できます。Oracle Cloud Infrastructure Loggingサービスでユーザーがファンクション・ログを格納および表示できるようにするには、ポリシー・ステートメントによって、ロギング・リソースへのアクセス権がグループに付与されている必要があります。

ポリシー・ステートメントAllow group <group-name> to manage logging-family in compartment <compartment-name>は、ロギング・リソースを所有するコンパートメント内のロギング・リソースへの完全なアクセス権をユーザーに付与します

OCI Functionsユーザーにネットワーク・リソースへのアクセスを提供するポリシー・ステートメント
目的: 作成場所: 文:
ネットワーク・リソースへのアクセス権をユーザーに付与します ネットワーク・リソースを所有するコンパートメント Allow group <group-name> to use virtual-network-family in compartment <compartment-name>

OCI Functionsのユーザーは、ファンクションまたはアプリケーションを作成する場合、作成するVCNおよびサブネットを指定する必要があります。ユーザーは、属しているグループがアクセス権を付与されているコンパートメントにあるVCNおよびサブネットのみを指定できます。ユーザーがVCNおよびサブネットを指定できるようにするには、ポリシー・ステートメントがグループにコンパートメントへのアクセス権を付与する必要があります。

OCI Functionsユーザーは、NSGを使用して特定のアプリケーションのすべての関数に適用されるイングレスおよびエグレス・ルールを定義する場合、そのNSGにアプリケーションを追加できます。NSGにアプリケーションを追加するには、同様のポリシー・ステートメントで、NSGが属するコンパートメントへのアクセス権をユーザーが属するグループに付与する必要があります。NSGは、ファンクションのサブネットとは異なるコンパートメントに属している可能性があることに注意してください。詳細は、ネットワーク・セキュリティ・グループ(NSG)へのアプリケーションの追加を参照してください。

OCI FunctionsサービスおよびOCI Functionsユーザーにトレース・リソースへのアクセス権を付与するポリシー・ステートメント
目的: 作成場所: 文:
OCI Functionsサービスにトレース・リソースへのアクセス権を付与します トレース・リソースまたはルート・コンパートメントを所有するコンパートメント

Allow service faas to use apm-domains in tenancy|compartment <compartment-name>

トレース・リソースへのアクセス権をユーザーに付与します。 トレース・リソースまたはルート・コンパートメントを所有するコンパートメント

Allow group <group-name> to use apm-domains in tenancy|compartment <compartment-name>

OCI Functionsユーザーは、ファンクションが予期したとおりに実行または実行されない理由を調査したい場合、トレースを使用して実行およびパフォーマンスの問題をデバッグできます。トレースを使用するには、関数を含むアプリケーションのトレースを有効にしてから、1つ以上の関数に対してトレースを有効にする必要があります。ユーザーは、Application Performance Monitoring (APM)トレース・エクスプローラでファンクション・トレースを表示できます。詳細は、関数の分散トレースを参照してください。

ユーザーは、所属するグループが既存のAPMドメインにアクセスできる(または新しいAPMドメインを作成できる)場合、およびOCI FunctionsがAPMドメインにアクセスできる場合にのみ、トレースを有効にできます。ユーザーがトレースをオンにしてトレースを表示できるようにするには、ポリシー・ステートメントによってグループおよびOCIファンクションにAPMドメインへのアクセス権が付与されている必要があります。

ポリシー・ステートメントAllow group <group-name> to use apm-domains in tenancy|compartment <compartment-name>は、コンパートメントまたはテナンシ全体のトレース・リソースへのアクセス権をユーザーに付与します。ユーザーが新しいAPMドメインを作成(およびAPMドメインを削除)できるようにする場合は、use apm-domainsのかわりにmanage apm-domainsを指定します。

ポリシー・ステートメントAllow service faas to use apm-domains in tenancy|compartment <compartment-name>は、OCI Functionsにコンパートメント内またはテナンシ全体のAPMドメインへのアクセス権を付与します。

OCI FunctionsサービスおよびOCI FunctionsユーザーにOracle Vaultリソースへのアクセス権を付与するポリシー・ステートメント
目的: 作成場所: 文:
Oracle Cloud Infrastructure Vaultでマスター暗号化キーを検証するためのOCI Functionsサービス・アクセス権を付与します ボールトまたはマスター暗号化キー(あるいはその両方)を所有するコンパートメント、またはルート・コンパートメントを所有するコンパートメント

Allow service faas to {KEY_READ} in tenancy|compartment <compartment-name> where request.operation='GetKeyVersion'

Allow service faas to {KEY_VERIFY} in tenancy|compartment <compartment-name> where request.operation='Verify'

(より限定的なポリシー・ステートメントが必要な場合は、次に例を示します)

OCI Functionsサービスに、Oracle Cloud Infrastructure Registryの署名付きイメージへのアクセス権を付与します ルート・コンパートメント

Allow service faas to read repos in tenancy where request.operation='ListContainerImageSignatures'

Oracle Cloud Infrastructure Vaultのボールトおよびマスター暗号化キーへのアクセス権をユーザーに付与します ボールトまたはマスター暗号化キー(あるいはその両方)を所有するコンパートメント、またはルート・コンパートメントを所有するコンパートメント

Allow group <group-name> to read vaults in tenancy|compartment <compartment-name>

Allow group <group-name> to use keys in tenancy|compartment <compartment-name>

(より限定的なポリシー・ステートメントが必要な場合は、次に例を示します)

Oracle Cloud Infrastructure Registry内の署名付きイメージへのアクセス権をユーザーに付与します ルート・コンパートメント

Allow group <group-name> to read repos in tenancy

ユーザーは、特定のマスター暗号化キーによって署名されたOracle Cloud Infrastructure Registryのイメージに基づくファンクションの作成、更新、デプロイメントおよび呼出しのみを許可するようにOCIファンクション・アプリケーションを構成できます。

署名検証ポリシーを作成し、署名付きファンクション・イメージを作成およびデプロイするには、ユーザーがOracle Cloud Infrastructure Vaultで定義されたボールトのマスター暗号化キーにアクセスできる必要があります。同様に、アプリケーションに対して定義された署名検証ポリシーを適用するには、OCI FunctionsサービスもOracle Cloud Infrastructure Vaultで定義されたマスター暗号化キーにアクセスできる必要があります。

ファンクション・イメージの署名および署名の検証に使用できるマスター暗号化キーを制限できます。たとえば、次のようなポリシーを使用します。

Allow service faas to {KEY_READ} in compartment <compartment-name> where target.key.id = '<ocid-of-key-in-verification-policy>' and request.operation = 'GetKeyVersion'
Allow service faas to {KEY_VERIFY} in compartment <compartment-name> where target.key.id = '<ocid-of-key-in-verification-policy>' and request.operation = 'Verify'
Allow group <groupname> to {KEY_READ} in compartment <compartment-name> where ALL {target.key.id = '<ocid-of-key-in-verification-policy>', ANY {request.operation = 'GetKey', request.operation = 'GetKeyVersion'}}
Allow group <groupname> to {KEY_VERIFY} in compartment <compartment-name> where target.key.id = '<ocid-of-key-in-verification-policy>' and request.operation = 'Verify'

詳細および例は、ファンクション・イメージの署名およびレジストリからの署名付きイメージの使用の強制を参照してください。