

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CloudHSM クライアント SDK 5 の PKCS \#11 ライブラリを使用して属性を取得する
<a name="pkcs11-attributes-retrieve"></a>

アプリケーションがキーまたは証明書オブジェクトから属性を読み取ると、PKCS \#11 ライブラリは`C_GetAttributeValue`呼び出しごとに 1 つのリクエストをクラスターに送信します。テンプレート内の属性の数は、リクエストの数を変更しません。10 個の属性をリクエストする 1 つの呼び出しは、1 つのリクエストを送信します。各リクエストで 1 つの属性が 10 個のリクエストを送信する 10 個の呼び出し。

各呼び出しは、1 つのリクエストでクラスターからオブジェクトの属性を読み取り、テンプレートがリクエストする値をコピーします。PKCS \#11 ライブラリは値をキャッシュしないため、すべての呼び出しが新しいリクエストを送信します。

アプリケーションが送信するリクエストの数を減らすには、次の推奨事項に従ってください。
+ 1 つのテンプレートで必要なすべての属性をリクエストします。必要なすべての属性を含む単一のテンプレートを構築し、1 回の`C_GetAttributeValue`呼び出しに渡します。次の例では、1 回の呼び出しでキーの 3 つの属性を読み取ります。

  ```
  CK_OBJECT_CLASS obj_class;
  CK_BYTE label[128];
  CK_BYTE id[128];
  
  CK_ATTRIBUTE attrs[] = {
          {CKA_CLASS, &obj_class, sizeof(obj_class)},
          {CKA_LABEL, label,       sizeof(label)},
          {CKA_ID,    id,          sizeof(id)},
  };
  
  rv = funcs->C_GetAttributeValue(session, object, attrs,
                                  sizeof(attrs) / sizeof(CK_ATTRIBUTE));
  ```

  詳細については、GitHub ウェブサイトの[「キー属性を一覧表示](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/)する」を参照してください。
+ オブジェクトがサポートし、読み取れる属性のみをリクエストします。テンプレートがオブジェクトにない属性に名前を付けると、 はその属性`CK_UNAVAILABLE_INFORMATION`の `ulValueLen`を `C_GetAttributeValue`に設定し、 を返します`CKR_ATTRIBUTE_TYPE_INVALID`。機密属性は同じように動作し、 を返します`CKR_ATTRIBUTE_SENSITIVE`。どちらの場合も、テンプレート内の他の属性は引き続き値を受け取ります。呼び出しの戻り値のみではなく、各属性`ulValueLen`を確認します。各オブジェクトタイプがサポートする属性と、機密性の高い属性については、「」を参照してください[AWS CloudHSM クライアント SDK 5 の PKCS \#11 ライブラリ属性テーブル](pkcs11-attributes-interpreting.md)。
+ 言語バインディングが行う呼び出しの数を確認します。Python や Java などの言語の PKCS \#11 バインディングは、送信する`C_GetAttributeValue`呼び出しの数を決定します。一部のバインディングは属性ごとに 1 つの呼び出しを送信し、一部のバインディングは 2 つの呼び出しを送信します。複数の属性を一度に読み取るためにバインディングが提供するインターフェイスを使用し、アプリケーションが送信する呼び出しを測定します。
+ アプリケーションで属性値をキャッシュします。オブジェクトの属性を 1 回読み、アプリケーションに必要な値を保存します。キャッシュされた値は、オブジェクトが変更されるまで再利用できます。他のアプリケーションまたはユーザーがオブジェクトを変更できる場合は、変更後にキャッシュを更新します。
+ 属性を読み取る前にバッファを割り当てます。PKCS \#11 標準は、可変長の値の 2 パスパターンを記述します。アプリケーションは を `pValue`に設定`C_GetAttributeValue`して `NULL_PTR`を呼び出して長さを学習し、再度呼び出して値を読み込みます。どちらの呼び出しもリクエストを送信します。予想される値を保持するバッファサイズがわかっている場合は、まずバッファを割り当て、1 回の呼び出しで値を読み取ります。

  バッファが小さすぎると、その属性`CKR_BUFFER_TOO_SMALL`に対して が返され、呼び出しは引き続きリクエストを送信します。予想される値に対して十分な余裕のあるバッファサイズを選択します。などのテンプレートを保持する属性には`CKA_WRAP_TEMPLATE`、引き続き 2 パスパターンが必要です。

**注記**  
これらの推奨事項は、キーオブジェクトと証明書オブジェクトの両方に適用され、それぞれに異なる制限が適用されます。証明書ストレージには固定読み取りレート制限があり、証明書オブジェクトの`C_GetAttributeValue`呼び出しごとに 1 回の読み取りオペレーションが使用されます。キーオブジェクトの場合、HSMsリング属性は、固定レートではなく容量に達すると読み取ります。PKCS \#11 ライブラリは、これらのリクエストを自動的に再試行します。送信するリクエストの数を減らすと、アプリケーションが両方の制限内に収まるようになります。詳細については、「[証明書ストレージの制限](pkcs11-certificate-storage-limits.md)」および「[HSM スロットリング](troubleshoot-hsm-throttling.md)」を参照してください。