Oracle Cloud Infrastructureドキュメント

インスタンスからのサービスの呼び出し

このトピックでは、インスタンスがOracle Cloud Infrastructureでサービスを呼び出すことを認可する方法について説明します。

概要

この手順では、Oracle Cloud Infrastructureサービスでインスタンスを呼び出してAPI呼び出しを行う方法を説明します。 必要なリソースとポリシーを設定した後、インスタンス上で実行されているアプリケーションは、Oracle Cloud Infrastructureパブリック・サービスを呼び出して、ユーザー資格証明または構成ファイルを構成する必要がなくなります。

概念

動的グループ
動的グループを使用すると、ユーザー・グループと同様に、Oracle Cloud Infrastructureインスタンスをプリンシパル・アクターとしてグループ化できます。 これらのグループのインスタンスがOracle Cloud Infrastructureサービスに対してAPI呼び出しを行うことを許可するポリシーを作成できます。 グループのメンバーシップは、「マッチング・ルール」という定義した一連の基準によって決まります。
一致規則
動的グループを設定するときは、グループ内のメンバーシップのルールも定義します。 ルール基準に一致するリソースは、動的グループのメンバーです。 マッチング・ルールには、従う特定の構文があります。 「動的グループを定義するための一致ルールの作成」を参照してください。
インスタンス・プリンシパル
IAMサービス機能は、インスタンスがサービス・アクター(またはプリンシパル)にサービス・リソースに対するアクションを実行することを許可します。 各コンピュート・インスタンスは独自のアイデンティティを持ち、追加された証明書を使用して認証します。 これらの証明書は自動的に作成され、インスタンスに割り当てられ、ローテーションされるため、資格証明をホストに配布してローテーションする必要はありません。

インスタンスによるアクセスをサポートするサービス

以下のサービスは、インスタンスによるアクセスをサポートしています:

  • Block Volume
  • Compute
  • File Storage
  • IAM
  • Key Management
  • Load Balancing
  • Networking
  • Object Storage

セキュリティに関する考慮事項

インスタンスにアクセスできるユーザー(インスタンスにSSHできるユーザー)は、インスタンスに付与された権限を自動的に継承します。 このプロシージャを使用してインスタンスにアクセス権を付与する前に、そのアクセス権があること、およびインスタンスに許可しているアクセス権で認可する必要があることを確認してください。

プロセスの概要

次のステップでは、インスタンスをプリンシパルとして設定および使用するためのプロセス・フローを要約します。 以降のセクションでは詳細を説明します。

  1. 「動的グループ」を作成します。 動的グループ定義では、一致するルールを指定して、サービスに対してAPI呼び出しを行うインスタンスを指定します。

  2. テナンシ(またはコンパートメント)内のサービスにアクセスするための動的グループへのアクセス許可を与えるポリシーを作成します。

  3. 組織の開発者は、Oracle Cloud Infrastructure SDKを使用して構築されたアプリケーションを構成して、インスタンス・プリンシパル・プロバイダを使用して認証します。 開発者は、動的グループに属するすべてのインスタンスにアプリケーションとSDKをデプロイします。

  4. デプロイされたSDKは、ポリシーで許可されているAPIのOracle Cloud Infrastructureを呼び出します(API資格証明を構成する必要はありません)。

  5. インスタンスによって行われた各APIコールでは、「Auditサービス」がイベントを記録し、インスタンスのOCIDをイベント・ログにprincipalIdの値として記録します。

インスタンスを呼び出しサービスを有効にするステップ

インスタンスがサービスを呼び出せるようにするには、次のタスクを実行します:

動的グループと一致ルールの作成

動的グループのポリシーの作成

SDK、CLI、またはTerraformの構成

動的グループの作成と一致ルール

「動的グループの管理」を参照してください。

動的グループのポリシーの作成

動的グループを作成したら、動的グループがOracle Cloud Infrastructureサービスにアクセスできるようにするポリシーを作成する必要があります。

動的グループのポリシーは、「ポリシーの仕組み」で説明されている構文に従います。 基本的なポリシー機能を理解するには、そのトピックを参照してください。

コンパートメント内のリソースへの動的グループ・アクセスを許可する構文は次のとおりです:

Allow dynamic-group <dynamic-group_name> to <verb> <resource-type> in compartment <compartment_name>

テナンシへの動的グループ・アクセスを許可する構文は次のとおりです:

Allow dynamic-group <dynamic-group_name> to <verb> <resource-type> in tenancy

ポリシーの例をいくつか示します:

動的グループ(FrontEnd)が特定のコンパートメント(ProjectA)でロード・バランサを使用できるようにするには:

Allow dynamic-group FrontEnd to use load-balancers in compartment ProjectA

動的グループが特定のコンパートメントのインスタンスを起動できるようにするには:

Allow dynamic-group FrontEnd to manage instance-family in compartment ProjectA
Allow dynamic-group FrontEnd to use volume-family in compartment ProjectA
Allow dynamic-group FrontEnd to use virtual-network-family in compartment ProjectA

その他のサンプル・ポリシーについては、「共通ポリシー」を参照してください。

SDK、CLI、またはTerraformの構成

SDKの詳細は、「ソフトウェア開発キットとコマンドライン・インタフェース」を参照してください。

Java SDKの場合:

Java SDKで、InstancePrincipalsAuthenticationDetailsProviderオブジェクトを作成します。 次に例を示します。

public static void main(String[] args) throws Exception {

   InstancePrincipalsAuthenticationDetailsProvider provider =

      InstancePrincipalsAuthenticationDetailsProvider.builder().build();

   IdentityClient identityClient = new IdentityClient(provider);

...

Python SDKの場合:

Python SDKで、oci.auth.signers.InstancePrincipalsSecurityTokenSignerオブジェクトを作成します。 次に例を示します。

# By default this will hit the auth service in the region returned by http://169.254.169.254/opc/v1/instance/region on the instance.
			
signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()
identity_client = oci.identity.IdentityClient(config={}, signer=signer)

...

待機せずにトークンを更新するには、次のコマンドを使用します:

signer.refresh_security_token()

CLIのインスタンス・プリンシパル認可の有効化

CLIからインスタンス・プリンシパル認可を有効にするには、コマンドの認可オプション(--auth)を設定します。 次に例を示します。

oci os ns get --auth instance_principal

または、次の環境変数を設定することもできます:

OCI_CLI_AUTH=instance_principal

両方を設定すると、--authに設定された値が環境変数よりも優先されます。

CLIの使用方法については、「コマンド・ライン・インタフェースの開始」を参照してください。

Terraformのインスタンス・プリンシパル権限の有効化

Terraformでインスタンス主体認可を有効にするには、次のサンプルに示すように、プロバイダ定義のauth属性を"InstancePrincipal"に設定します:

variable "region" {}

provider "oci" {
   auth = "InstancePrincipal"  
   region = "${var.region}"

}

インスタンス主認可を使用する場合は、tenancy_ociduser_ocidfingerprint、およびprivate_key_path属性を含める必要はありません。

FAQ

期限切れの証明書を使用しようとするとどうなりますか?
証明書がローテーションされる頻度を変更することはできますか?
長時間実行されている操作の途中で証明書をローテーションするとどうなりますか?
インスタンス上のすべてのユーザーが証明書にアクセスできますか?
ダイナミック・グループからインスタンスを削除できますか?
コンパートメント内の特定のインスタンスを動的グループから除外できますか?