このトピックでは、IDaaS 組み込み式エンジンで Machine-to-Machine (M2M) フェデレーション資格情報に高度な式を使用する方法について説明します。また、データモデルフィールド、関数、および関連する例についても説明します。
基本的な概念
IDaaS 組み込み式エンジンは、M2M シナリオで高度な式をサポートします。これらの式を使用して、フェデレーション資格情報プロバイダーの信頼条件と、アプリケーションフェデレーション資格情報の検証条件を定義できます。ターゲットアプリケーションが変換、連結、または論理評価を必要とする追加のパラメーターを処理する必要がある場合、式を使用して柔軟な構成を行うことができます。式は、2 つのコアコンポーネントで構成されます。
コンポーネント | 名前 | 説明 |
モデル | クライアント | クライアントプロパティに関連するデータ。 |
PKCS#7 フェデレーション資格情報モデル | PKCS#7 フォーマットの資格情報を処理します。 | |
PCA フェデレーション資格情報モデル | PCA フォーマットの資格情報を処理します。 | |
OIDC フェデレーション資格情報モデル | OIDC プロトコルに関連する資格情報を処理します。 | |
関数 | / | 論理演算を実行するために使用されます。 |
モデルの説明
1. Client (クライアントモデル)
IDaaS 式では、client.fieldname フォーマットを使用して Client データモデルのプロパティにアクセスできます。次の表に、Client データモデルがサポートするフィールドとその説明を示します。
フィールド名 | データ型 | 説明 |
clientId | String | アプリケーションの clientId。 |
applicationFederatedCredentialId | String | アプリケーションフェデレーション資格情報の ID。 |
activeSubjectUrn | String | applicationFederatedCredential のフィールドマッピングから生成される予約済みプロパティ。呼び出すことはできません。 |
2. PKCS#7 Federated Credential (PKCS#7 フェデレーション資格情報モデル)
IDaaS PKCS#7 フェデレーション資格情報モデルでは、pkcs7.fieldname フォーマットを使用して次のフィールドにアクセスできます。このデータモデルは、PKCS#7 フェデレーション信頼ソースの信頼に関する条件式と、PKCS#7 フェデレーション資格情報の検証に適用されます。
フィールド名 | データ型 | 説明 |
payload | object | / |
data | String | PKCS#7 から抽出された元のコンテンツ。 |
jsonData | JSON object |
|
signingTime | Long | 署名タイムスタンプ (秒単位)。このパラメーターは、フェデレーション ID プロバイダーが Amazon Web Services の場合にのみ返されます。 |
certificates | List<CertificateObject> | PKCS#7 署名に含まれる証明書チェーン。CertificateObject モデルのフィールドについては、このトピックの最後にある注記をご参照ください。 |
3. PCA Federated Credential (PCA フェデレーション資格情報モデル)
IDaaS PCA フェデレーション資格情報モデルでは、cert オブジェクトを介して次のフィールドにアクセスできます。たとえば、証明書発行者の Common Name (CN) フィールドを取得するには、`cert.issuer.subject.CN` という式を使用できます。このデータモデルは、PCA フェデレーション信頼ソースの信頼に関する条件式と、PCA フェデレーション資格情報の検証に適用されます。
プロパティ | データ型 | 説明 |
serialNumber | String | 証明書のシリアル番号 (16 進数フォーマット)。小文字で、コロンは含まれません。最上位ビットが 1 の場合、先行ゼロが追加されます。 例: 6d5a2816af467************f6e974f114a061e 00d******dc305a652 ASN.1 DER エンコーディングルールに従って、証明書のシリアル番号は次の要件に基づいてエンコードする必要があります。 シリアル番号の最上位ビット (左端のバイトの最上位ビット) が 1 の場合、シリアル番号が正の整数として正しくデコードされるように、先行バイト 0x00 を追加する必要があります。
|
issuer | CertificateSubjectObject | 証明書の発行者オブジェクト。例: `issuer.CN`、`issuer.C`。 |
subject | CertificateSubjectObject | 証明書オブジェクト。例: `subject.C`、`subject.O`、`subject.OU`。 |
fingerprint | String | 証明書のフィンガープリント (SHA256 フォーマット)。小文字で、コロンは含まれません。 |
certificateCaIssuerUrl | String | 発行者。 |
subjectKeyIdHex | String | サブジェクト ID。 |
signatureOid | String | 1.2.840.113549.1.1.11 (SHA256withRSA) |
notBefore | Long | 証明書の有効期間の開始時刻。この値は UNIX タイムスタンプ (秒単位) です。 |
notAfter | Long | 証明書の有効期間の終了時刻。この値は UNIX タイムスタンプ (秒単位) です。 |
ca | Boolean | 証明書が認証局 (CA) 証明書であるかどうかを示します。このフィールドは X.509 v3 証明書の拡張フィールドであり、主要な証明書フィールドではありません。 |
4. OIDC Federated Credential (OIDC フェデレーション資格情報モデル)
IDaaS OIDC フェデレーション資格情報モデルでは、jwt.fieldname フォーマットを使用して次のフィールドにアクセスできます。このデータモデルは、OIDC フェデレーション信頼ソースの信頼に関する条件式と、OIDC フェデレーション資格情報の検証に適用されます。次の表に、OIDC フェデレーション資格情報モデルの主要なフィールドとその説明を示します。
プロパティ | データ型 | 説明 |
iss | String | トークンの発行者。権限付与サーバーの URL を示し、 |
sub | String | トークンのサブジェクト。ユーザーの一意の識別子を示し、 |
aud | List<String> | トークンのオーディエンス。通常はリソースサーバーの識別子またはクライアント ID です。 説明 aud クレームは配列フォーマットをサポートします。aud を検証するには、式を次のように記述する必要があります。 aud フィールドは配列フォーマットをサポートします。aud フィールドを検証するには、式を
|
jti | String | トークンの一意の識別子。再利用を防ぐために使用されます。 |
exp | Long | 有効期限。この値は UNIX タイムスタンプ (秒単位) です。 |
nbf | Long | 有効期間の開始時刻。この値は UNIX タイムスタンプ (秒単位) です。 |
iat | Long | 発行時刻。この値は UNIX タイムスタンプ (秒単位) です。 |
claims | Map | すべてのプロパティ。 |
5. CertificateObject モデル
CertificateObject モデルは、証明書関連の検証シナリオを処理し、証明書のさまざまなフィールドへのアクセスを提供します。cert.fieldname フォーマットを使用して、次のフィールドにアクセスできます。このデータモデルは、証明書チェーンの検証、証明書プロパティの検証、証明書の有効期間のチェックなどのシナリオに適用されます。
プロパティ | データ型 | 説明 |
serialNumber | String | 証明書のシリアル番号 (16 進数フォーマット)。小文字で、コロンは含まれません。 |
issuer | CertificateSubjectObject | 証明書の発行者。例: `issuer.CN`、`issuer.C`。 |
subject | CertificateSubjectObject | 証明書オブジェクト。例: `subject.C`、`subject.O`、`subject.OU`。 |
fingerprint | String | 証明書のフィンガープリント (SHA256 フォーマット)。小文字で、コロンは含まれません。 |
certificateCaIssuerUrl | String | 発行者。 |
subjectKeyIdHex | String | サブジェクト ID。 |
signatureOid | String | 1.2.840.113549.1.1.11 (SHA256withRSA)。 |
notBefore | Long | 証明書の有効期間の開始時刻。この値は UNIX タイムスタンプ (秒単位) です。 |
notAfter | Long | 証明書の有効期間の終了時刻。この値は UNIX タイムスタンプ (秒単位) です。 |
ca | Boolean | このフィールドは、証明書が CA に属しているかどうかを示す X.509 v3 拡張フィールドです。値はブール値 (true/false) です。 |
CertificateSubjectObject モデルのフィールドは次のとおりです。
プロパティ | データ型 | 説明 |
country(C) | String | 国またはリージョンの名前。通常は 2 文字の ISO コードを使用します (例: 米国は「US」、中国は「CN」)。複数の C 値がサポートされており、スラッシュ (/) で区切られます。 |
organization(O) | String | 組織の名前。会社や機関の正式名称など。複数の O 値がサポートされており、スラッシュ (/) で区切られます。 |
organizationalUnit(OU) | String | 組織内の部門または部署。例:「IT 部門」、「セキュリティチーム」。複数の OU 値がサポートされており、スラッシュ (/) で区切られます (例: IT/fiance/HR)。 |
commonName(CN) | String | 証明書発行者の共通名。通常、特定のサーバーまたは個人を識別するために使用されます。 |
distinguishedNameQualifier | String | 同じ名前のエンティティを区別するために使用されます。 |
state(ST) | String | 州または省。複数の値がサポートされており、スラッシュ (/) で区切られます。 |
serialNumber | String | 組織内の一意の識別子。 |
locality(L) | String | 都市または地域の名前。複数の値がサポートされており、スラッシュ (/) で区切られます。 |
title(T) | String | 役職。例:「マネージャー」。 |
surname | String | 姓または名前。例:「John」または「Doe」。 |
givenName | String | ユーザーに表示される名前。例:「J. Doe」または「John Doe」。 |
initials | String | ユーザーに表示される名前のイニシャル。例:「J」または「J.D.」。 |
pseudonym | String | エイリアス。 |
generationQualifier | String | 世代名。例:「Jr.」(ジュニア) または「III」(3 世)。 |
domainComponent(DC) | String | ドメイン名コンポーネント。例:「example.com」。複数の値がサポートされており、スラッシュ (/) で区切られます。 |
oidMap | Map<String,Object> | OID マップオブジェクト。 |
関数の説明
一般的に使用される関数の詳細については、「関数の説明」をご参照ください。
式の例
上記のデータモデルのいずれかを式で使用するには、JSON セマンティクスに基づいて値を取得する必要があります。JSON キーにピリオド (.)、ハイフン (-)、アンダースコア (_) などの特殊文字が含まれている場合は、キーを単一引用符で囲む必要があります。
フェデレーション信頼ソースの信頼条件
PCA
// アップロードされた PCA 証明書から発行者の CN フィールドを取得して比較します。 // たとえば、証明書の発行者は C=cn, ST=sichuan, L=chengdu, O=example, OU=test, CN=test です。 Equals(cert.issuer.CN, "test") // 証明書が他の証明書を発行するために使用できる CA 証明書であるかどうかを判断します。 Equals(cert.ca, true)OIDC
// Kubernetes クラスターのサービスアカウント OIDC トークンのサブジェクトが正しいかどうかを判断します。 Equals(jwt.sub, "test") // 発行者とオーディエンスが同時に正しいかどうかを判断します。 And(Equals(jwt.iss, "https://example.com"), Equals(jwt.aud, "test_aud"))PKCS#7
PKCS#7 フェデレーション信頼ソースを選択した場合、信頼の条件式を入力する必要はありません。
フェデレーション資格情報の検証条件
フェデレーション資格情報検証の条件式を記述する方法は、フェデレーション信頼ソースの信頼の条件式を記述する方法と似ています。データモデルから対応するフィールドを取得して検証できます。IDaaS は、構成プロセスを簡素化するために基本的な検証式を自動的に生成するクイック構成モードを提供します。
PCA
// 検証条件モードが [証明書モード] で、共通名 (CN) が example の場合、生成される式は次のようになります: Equals(cert.subject.CN, "example") // 他の条件を検証する式をカスタマイズするには、[クライアント証明書フィールド式検証モード] を選択します。 // たとえば、クライアント証明書の発行者の国、場所、および州を検証する場合。 // たとえば、証明書の発行者は C=cn, ST=sichuan, L=chengdu, O=example, OU=test, CN=test です。 And(Equals(cert.issuer.C, "cn"), Equals(cert.issuer.L, "chengdu"), Equals(cert.issuer.ST, "sichuan")) // 証明書のシリアル番号を決定します。注: シリアル番号は 16 進数フォーマットで、小文字であり、コロンは含まれません。関数を使用して変換できます。 // たとえば、証明書のシリアル番号が 6d:5a:28:16:af:46:7f:40:d3:8b:e7:28:0f:6e:97:4f:11:4a:06:1e の場合、StringReplace() 関数を使用してコロンを削除します。式は次のようになります: // StringReplace("元の文字列","置き換えられる文字","置き換え文字") Equals(cert.serialNumber, StringReplace("6d:5a:28:16:af:46:7f:40:d3:8b:e7:28:0f:6e:97:4f:11:4a:06:1e",":","")) // シリアル番号が大文字の場合 (例: 6D:5A:28:16:AF:46:7F:40:D3:8B:E7:28:0F:6E:97:4F:11:4A:06:1E) // ToLower() 関数を使用して文字列を小文字に変換し、次に StringReplace() 関数を使用してコロンを削除します。 Equals(cert.serialNumber, StringReplace(ToLower("6D:5A:28:16:AF:46:7F:40:D3:8B:E7:28:0F:6E:97:4F:11:4A:06:1E"),":",""))OIDC
// [Kubernetes モード] が使用され、名前空間が test で、サービスアカウントが test の場合。 // 自動的に生成される式は次のようになります: And(Equals(jwt.claims.'kubernetes.io'.namespace, "test"), Equals(jwt.claims.'kubernetes.io'.serviceaccount.name, "test"), Equals(jwt.sub, "system:serviceaccount:test:test")) // [サブジェクト ID モード] が使用され、サブジェクト ID が https://sub.example.com の場合。 // 自動的に生成される式は次のようになります: Equals(jwt.sub, "https://sub.example.com") // 他の条件を検証する式をカスタマイズするには、[クレームフィールド式検証モード] を選択します。 // たとえば、現在の OIDC トークンの jti フィールドを検証する場合、式は次のようになります: Equals(jwt.jti, "test_XXX") // ユーザーが OIDC トークンのクレームに customValue という名前のカスタムフィールドを定義し、このフィールドを検証したい場合、式は次のようになります: Equals(jwt.claims.customValue, "XXX") // aud が正しいかどうかを判断するには、aud が配列フォーマットであるため、配列インデックスを使用して対応する aud 値を取得して比較する必要があります。 // フェデレーション資格情報の検証条件で検証するのではなく、OIDC フェデレーション信頼ソースの aud フィールドを検証することをお勧めします。 // aud に値が 1 つしかない場合、式は次のようになります: Equals(jwt.aud[0], "example_aud") // aud に複数の値がある場合、Or() 関数を使用して比較できます。これは、少なくとも 1 つの aud 値が一致すれば検証に合格することを示します。式は次のようになります: Or(Equals(jwt.aud[0], "https://example.com"), Equals(jwt.aud[1], "https://example2.com"))PKCS#7
// 現在のフェデレーション信頼ソースが Alibaba Cloud PKCS#7 で、検証条件モードが [ECS インスタンス指定モード] であり、ECS インスタンス ID が i-123 および i-456 の場合、生成される式は次のようになります: Or(Equals(pkcs7.payload.jsonData.'instance-id', "i-123"),Equals(pkcs7.payload.jsonData.'instance-id', "i-456")) // フェデレーション信頼ソースが AWS PKCS#7 で、検証条件モードが [ECS インスタンス指定モード] であり、ECS インスタンス ID が i-123 および i-456 の場合、生成される式は次のようになります: Or(Equals(pkcs7.payload.jsonData.instanceId, "i-123"),Equals(pkcs7.payload.jsonData.instanceId, "i-456")) // 他の条件を検証する式をカスタマイズするには、[署名値式検証モード] を選択します。 // たとえば、Alibaba Cloud PKCS#7 の署名値の region-id フィールドを検証する場合、式は次のようになります: Equals(pkcs7.payload.jsonData.'region-id', "cn-hangzhou")
付録
Alibaba Cloud PKCS#7 で利用可能なフィールド
プロパティ | タイプ | 説明 |
instance-id | String | ECS インスタンス ID。 |
region-id | String | リージョン ID。 |
owner-account-id | String | Alibaba Cloud アカウント ID。 |
audience | object | / |
aud | String | ユーザーが Alibaba Cloud PKCS#7 署名を取得する際のカスタム入力パラメーター。このパラメーターは、idaas_XXX などの IDaaS インスタンス ID のみをサポートします。 |
signingTime | Long | 署名時刻。この値は UNIX タイムスタンプ (秒単位) です。このフィールドは、現在の PKCS#7 の署名時刻を検証するために使用されます。 |
Amazon Web Services PKCS7 で利用可能なフィールド
プロパティ | タイプ | 説明 |
instanceId | String | EC2 インスタンス ID。 |
region | String | リージョン ID。 |
accountId | String | AWS アカウント ID。 |