プラットフォーム サービスへのアクセス
Orchestrator のアセット、バケット、キュー、プロセスは、UiPath TypeScript SDK を通じて JavaScript 関数で利用可能で、委任された関数 ID と関数 ID のいずれかを選択できます。
JavaScript 関数は、 UiPath TypeScript SDK を介してプラットフォームのリソースにアクセスします。このパッケージには何もハードコードされていません。座標は ctx.platform から取得され、トークンはランタイムが提供する 2 つの ID のうちの 1 つから取得されます。
import { UiPath } from "@uipath/uipath-typescript/core";
import { Assets } from "@uipath/uipath-typescript/assets";
const { baseUrl, orgId, tenantId } = ctx.platform;
const sdk = new UiPath({
baseUrl,
orgName: orgId,
tenantName: tenantId,
secret: ctx.user.accessToken, // or ctx.robot.accessToken
});
import { UiPath } from "@uipath/uipath-typescript/core";
import { Assets } from "@uipath/uipath-typescript/assets";
const { baseUrl, orgId, tenantId } = ctx.platform;
const sdk = new UiPath({
baseUrl,
orgName: orgId,
tenantName: tenantId,
secret: ctx.user.accessToken, // or ctx.robot.accessToken
});
@uipath/uipath-typescript は devDependenciesではなく dependenciesに属します。デプロイされた関数は、運用環境の依存関係のみをインストールします。
ID の選択
| パターン | トークン | フォルダーへのアクセスが必要なユーザー |
|---|---|---|
| 委任されたアクセス許可 | ctx.user.accessToken | 呼び出し元のユーザーは、フォルダーに対する Assets.View が必要です。 |
| 関数 ID | ctx.robot.accessToken | 関数のサービス アカウントのみ。呼び出し元は何も必要としません |
Delegated が既定で選択されており、呼び出し元自身のアクセス許可が適用されるため、呼び出し元に付与されている以上の権限を表示するために関数を使用することはできません。関数自体の ID は、呼び出し元の手の届かないところに置いておく必要があるリソース、つまり関数のみが読み取ることができる制限されたフォルダー内の資格情報用です。
その場合、ハンドラーがフェッチする内容を制約する必要があります。呼び出し元から提供されたリソース名を読み取る特権バックエンドは、その ID が参照できるものをすべて引き渡します。
const READABLE = new Set(["PartnerApiCredential"]);
if (!READABLE.has(input.assetName)) {
throw new FunctionError(`"${input.assetName}" is not readable by this function.`, 403);
}
const READABLE = new Set(["PartnerApiCredential"]);
if (!READABLE.has(input.assetName)) {
throw new FunctionError(`"${input.assetName}" is not readable by this function.`, 403);
}
アセット
const response = await new Assets(sdk).getAll({
filter: `Name eq 'ApiBaseUrl'`,
folderId: 42,
});
const value = response.items[0]?.value;
const response = await new Assets(sdk).getAll({
filter: `Name eq 'ApiBaseUrl'`,
folderId: 42,
});
const value = response.items[0]?.value;
folderId は必須です。入力がない場合、呼び出しは空の値のメタデータを返します。
folderId はフォルダーの 数値 ID であり、キーではありません。フォルダー キーは GUID であり、数値 ID が属するフォルダー キーを渡すと、不正な識別子ではなく権限エラーとして拒否され、間違った場所を見てしまうことになります。ctx.platform.folderKey は、現在の呼び出しのキーを提供します。呼び出しで数値 ID が必要な場合、そこから数値 ID を解決します。
これらのエンドポイントでは、どのトークンでも、資格情報アセットのユーザー名とパスワードは返されません。読み取るには、関数自身の ID とロボット実行ルートが必要です。そのため、 ctx.robot.key はデプロイ済みの実行でのみ機能します。「 Orchestrator を呼び出す」をご覧ください。
Secret アセットの場合、値は [SecretValue] フィールドに到着します。StringValue、Text アセットの値を運ぶフィールドが Secret の場合は空です。このフィールドを読み取ると、間違ったフィールドではなく、破損した機能のように見えます。
アセットには、呼び出し元自身のトークンで値を読み取れるようにする AllowDirectApiAccess 設定もあります。この設定は拡張であり、有効化の手順ではありません。この設定は ID に依存しないため、サインインしているユーザーのトークンを保持するブラウザーを含め、フォルダー上で Assets.View を保持するすべての ID が値を読み取ることができます。この設定を有効にするよりも、関数自体の ID を使用する方が安全な選択です。
その他
同じクライアントで、バケット、キュー、ジョブ、プロセス、エンティティ、Integration Service のコネクションが公開されます。完全な表面については、 SDK リファレンス を参照してください。
資格情報とセキュリティ
- シークレットは Orchestrator のアセットに存在し、実行時に読み取られます。ハードコーディングしたり、プロジェクトにコミットしたりすることはありません。
- フォルダー レベルのロールベースのアクセス制御 (RBAC) により、各 ID が読み取ることができる内容を制御します。発信元のアクセスである委任されたパターンを使用します。関数独自の ID では、サービス アカウントの ID になります。
- できる限りシークレットではなく派生結果を返します。また、値はログに記録しません。