このトピックでは、アプリケーションが SDK を使用して Key Management Service (KMS) インスタンスにアクセスする際によくある問題について説明します。
問題リスト
-
アプリケーションアクセスポイント経由での KMS インスタンスへのアクセス時に「Forbidden.NoPermission」エラーが発生する
-
シークレット値の取得時に「This operation for key-xxxxxx is forbidden by permission system」エラーが発生する
-
KMS インスタンスへのアクセス時に「unable to find valid certification path to requested target」エラーが発生する
-
ack-secret-manager を使用して ACK が KMS シークレットを同期する際に「QPS Limit Exceeded」エラーが発生する
-
専用ゲートウェイを使用して暗号操作の OpenAPI オペレーションを呼び出すと「MissingParameter」エラーが発生する
「no such host」または「not known」エラー
問題
-
アプリケーションが Go 用 KMS インスタンス SDK を使用して KMS インスタンスにアクセスすると、次のエラーが返されます:
kst-xxx.cryptoservice.kms.aliyuncs.com: no such host。 -
アプリケーションが Java 用 KMS インスタンス SDK を使用して KMS インスタンスにアクセスすると、次のエラーが返されます:
kst-xxx.cryptoservice.kms.aliyuncs.com: nodename nor servname provided, or not known。
原因
KMS インスタンスは専用のキーおよびシークレット管理サービスであり、関連付けられた Virtual Private Cloud (VPC) からのみアクセスできます。
ソリューション
-
アプリケーションが実行されている VPC と KMS インスタンスが同じリージョンにある場合は、VPC を KMS インスタンスに関連付けます。詳細については、「同一リージョン内の複数の VPC から KMS インスタンスにアクセスする」をご参照ください。
ご利用の KMS インスタンスに関連付けられている VPC を確認するには、「KMS インスタンスの詳細の表示」をご参照ください。
-
アプリケーションが実行されている VPC と KMS インスタンスが異なるリージョンにある場合は、2 つの VPC 間にネットワーク接続を確立します。
AAP 使用時の「Forbidden.NoPermission」エラー
問題
KMS インスタンスにアクセスすると、エラーの説明または SDK の例外メッセージに次の内容が含まれます:Forbidden.NoPermission : This operation is forbidden by permission system.
ソリューション
このエラーは、アプリケーションアクセスポイント (AAP) の権限ポリシーで、RBAC Permissions および Accessible Resources に必須のキーまたはシークレット権限が付与されていないために発生します。詳細については、「アプリケーションアクセスポイントを作成する」をご参照ください。
シークレット取得時の「...forbidden by permission system」エラー
問題
シークレット値を取得すると、KMS から返されるエラーの説明または SDK の例外メッセージに次の内容が含まれます:This operation for key-xxxxxx is forbidden by permission system。
次のコードは、Java 用 KMS インスタンス SDK からの例外メッセージのサンプルです。
Connected to the target VM, address: '127.0.xxx', transport: 'socket'
Exception in thread "main" com.aliyun.tea.TeaException Create breakpoint : This operation for key-hzz6xxx xxx is forbidden by permission system.
at com.aliyun.dkms.gcs.openapi.Client.doRequest(Client.java:159)
at com.aliyun.dkms.gcs.sdk.Client.getSecretValueWithOptions(Client.java:190)
at com.aliyun.dkms.gcs.sdk.Client.getSecretValue(Client.java:213)
at com.yqn.center.user.config.RdsSecretSampleCode.main(RdsSecretSampleCode.java:209)
Disconnected from the target VM, address: '127.0.xxx', transport: 'socket'
Process finished with exit code 1
原因
ご利用のアプリケーションには、復号にキーを使用する権限がありません。
シークレットを作成する際、暗号化のために同じ KMS インスタンス内のキーを選択します。シークレットを取得するには、ご利用のアプリケーションがシークレットにアクセスする権限だけでなく、復号のために対応するキーを使用する権限も持っている必要があります。
ソリューション
-
シナリオ 1:ClientKey を使用してアプリケーションアクセスポイント (AAP) 経由で KMS にアクセスする
AAP の権限ポリシーを編集して、アプリケーションにキーを復号に使用する権限を付与します。
Key Management Service コンソールにログインします。上部のナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、を選択します。
-
対象の AAP の名前をクリックして、詳細 ページに移動します。
-
権限ポリシーの操作 列で、Modify をクリックします。 次のパラメーターを設定し、[更新] をクリックします。
-
RBAC の権限: CryptoServiceKeyUser を選択します。
-
アクセス可能のリソース: 利用可能なリソース セクションで、キーを選択し、
アイコンをクリックします。または、選択中のリソース の横にある
アイコンをクリックして、key/key_id形式でキーを追加します。例:key/key-hzz6xxxxxx。
-
-
シナリオ 2:RAM ユーザーの AccessKey ペアを使用するか、RAM ロールを引き受けて KMS にアクセスする
RAM 権限ポリシーを編集して、アプリケーションにキーを復号に使用する権限を付与します。
-
RAM コンソールにログインします。
-
左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。
-
RAM ユーザーまたは RAM ロールにアタッチされている権限ポリシーを見つけて、ポリシー名をクリックします。
-
[ポリシードキュメント] タブで、[ポリシードキュメントの変更] をクリックします。次のスクリプトを
Statementセクションに追加し、[基本情報の編集を続行] をクリックします。{ "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "acs:kms:${region}:${account}:key/keyId-example" }権限ポリシーの詳細については、「Key Management Service のカスタム権限ポリシー」をご参照ください。
-
「Forbidden.KeyNotFound」エラー
原因:ほとんどの場合、リクエストで指定されたリージョン、キー ID、またはエイリアスが、暗号化に使用されたものと一致しません。
ソリューション:復号に使用するリージョン、キー ID、またはエイリアスが、暗号化に使用されたものと一致していることを確認してください。
「UnsupportedOperation」エラー
-
不正なネットワークアクセス構成
-
原因:ご利用のアプリケーションが、KMS 固有の SDK ではなく、標準の Alibaba Cloud SDK を使用して、KMS インスタンスのキーに対して暗号操作を実行しています。
-
ソリューション:
Key Management Service コンソールにログインします。トップナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、を選択します。
-
インスタンスリストで、ターゲットインスタンスの ID をクリックします。 詳細ページで、RD Multi-Account セクションの「パブリックネットワークアクセス」スイッチをオンにします。
説明KMS インスタンスが複数の Alibaba Cloud アカウント間で共有されている場合、各アカウントのパブリックネットワークアクセス権限を設定できます。
-
インスタンスの詳細ページの Basic Information タブで、パブリックエンドポイントを探します。エンドポイントは、パブリックネットワークアクセスを有効にすると表示され、
kms.cn-hangzhou.aliyuncs.comのような形式になります。
-
-
不正なキータイプ
-
原因:ご利用のアプリケーションが、SDK を介して Encrypt、Decrypt、GenerateDataKey などの暗号 API オペレーションを呼び出すときにサービスキーを使用しています。
-
ソリューション:暗号操作には、他のクラウドサービスによって管理されるサービスキーではなく、カスタマーマスターキー (CMK) を直接使用してください。
-
-
キーアルゴリズムと API の不一致
-
シナリオ 1:暗号化、復号、データキーの生成
-
GenerateDataKey オペレーションを呼び出すとき、カスタマーマスターキー (CMK) のキーアルゴリズムは RSA、ECC などの非対称アルゴリズムです。
-
ソリューション:CMK のキーアルゴリズムが AES などの対称アルゴリズムであり、キーの用途が ENCRYPT/DECRYPT であることを確認してください。
-
-
シナリオ 2:署名と検証
-
「Unable to find valid certification path」エラー
考えられる原因 1:間違った KMS インスタンスの CA 証明書を選択した
Key Management Service コンソールにログインします。上部のナビゲーションバーで、リージョンを選択します。左側のナビゲーションウィンドウで、を選択します。
-
インスタンス管理 ページで、インスタンスCA証明書 列の ダウンロード をクリックします。
-
インスタンスCA証明書 ダイアログボックスで、インスタンス ID を選択し、ダウンロード をクリックして、証明書を安全な場所に保管します。
デフォルトでは、ダウンロードされた CA 証明書の名前は PrivateKmsCA_kst-******.pem です。この証明書を SDK に統合して、KMS インスタンスサービスの SSL 証明書の信頼性と有効性を検証できます。
考えられる原因 2:不正なバージョンの SDK がインストールされている
最新バージョンの SDK をインストールすることを推奨します。以下は、SDK のオープンソースリポジトリアドレスのリストです:
-
説明
tea 依存関係はバージョン 1.2.3 以降である必要があります。
KMS インスタンスのドメイン名を解決できない
問題
KMS インスタンスが属する VPC または関連付けられた VPC 内で、アプリケーションが KMS インスタンスのドメイン名にアクセスできません。たとえば、ping kst-hzz62****.cryptoservice.kms.aliyuncs.com コマンドがドメイン名を解決できず、返されるメッセージに「cannot resolve」が含まれます。
ソリューション
ご利用のサーバーの DNS 構成が、デフォルトの Alibaba Cloud DNS サーバーである 100.100.2.136 と 100.100.2.138 を使用しているかどうかを確認してください。詳細については、「PrivateZone を使用するためにサーバーの DNS 構成を変更する必要がありますか?」をご参照ください。
「Incorrect ClientKey password」エラー
問題
-
Java 用 KMS インスタンス SDK を使用して KMS インスタンスにアクセスすると、次のエラーが返されます:
java.io.IOException: keystore password was incorrect。 -
PHP 用 KMS インスタンス SDK を使用して KMS インスタンスにアクセスすると、次のエラーが返されます:
Could not decrypt the privateKey of clientKey, the password is incorrect,or it is not a valid pkcs12。 -
Go 用 KMS インスタンス SDK を使用して KMS インスタンスにアクセスすると、次のエラーが返されます:
panic: pkcs12: decryption password incorrect。 -
Python 用 KMS インスタンス SDK を使用して KMS インスタンスにアクセスすると、次のエラーが返されます:
OpenSSL.crypto.Error: [('PKCS12 routines', '', 'mac verify failure')]。
原因
指定された ClientKey のパスワードが正しくありません。
ソリューション
-
ClientKey のパスワードがフォーマット要件を満たしているか確認してください。満たしていない場合は、新しい ClientKey を作成する必要があります。詳細については、「ClientKey の作成」をご参照ください。
ClientKey のパスワードは 8~64 文字で、数字 (0-9)、小文字 (a-z)、大文字 (A-Z)、特殊文字 (
~!@#$%^&*?_-) のうち少なくとも 2 種類を含める必要があります。 -
ファイルから ClientKey のパスワードを読み取る場合は、ファイルがパスワードの 1 行のみを含むプレーンテキストファイルであることを確認してください。ファイルには改行やタブなどの余分な文字を含めることはできません。
HTTP 413 ステータスコード
Protocol Buffers でエンコードされた後のリクエストボディは 3 MB を超えることはできません。この制限を超えるリクエストは、HTTP 413 ステータスコードで拒否されます。
-
暗号化と復号:対称キーの場合は操作あたり 6 KB、非対称キーの場合は 1 KB を超えないようにすることを推奨します。より大きなデータ量の場合は、エンベロープ暗号化を使用してください。
-
署名と検証:署名するメッセージが大きい場合、アプリケーションがローカルでメッセージのダイジェストを生成し、
SignまたはVerifyオペレーションを呼び出してダイジェストに署名または検証することを推奨します。
「UnknownHostException」エラー
問題
ご利用のアプリケーションが Java 用 KMS インスタンス SDK を使用して KMS インスタンスにアクセスすると、次のエラーが返されます:Caused by: java.net.UnknownHostException: kst-hzz664da459rvtjtd****.cryptoservice.kms.aliyuncs.com。
ソリューション
-
ご利用のアプリケーション環境が KMS インスタンスの VPC へのネットワーク接続を持っていることを確認してください。
ご利用のアプリケーションの VPC と KMS インスタンスが同じリージョンにある場合は、VPC を KMS インスタンスに関連付けます。詳細については、「同一リージョン内の複数の VPC から KMS インスタンスにアクセスする」をご参照ください。その他のシナリオについては、以下のソリューションをご参照ください。
-
VPC 間相互接続ソリューション
Cloud Enterprise Network (CEN)、VPN ゲートウェイ、VPC ピアリング接続、または PrivateLink を使用して、VPC 間のプライベート通信を有効にできます。これらのソリューションの機能と構成については、「VPC 相互接続」をご参照ください。
-
VPC のインターネットへの接続
ECS インスタンスの固定パブリック IP アドレス、EIP、NAT ゲートウェイ、または Server Load Balancer (SLB) を使用して、VPC 内のクラウドリソースがインターネットにアクセスしたり、インターネットからアクセスされたりできるようにすることができます。詳細については、「パブリックネットワークアクセス」をご参照ください。
-
VPC とオンプレミスデータセンターの接続
VPN ゲートウェイ、Express Connect 回線、または Smart Access Gateway を使用して、オンプレミスデータセンターをクラウド上の VPC に接続し、ハイブリッドクラウドを構築できます。詳細については、「VPC をオンプレミスデータセンターまたは他のクラウドに接続する」をご参照ください。
-
-
KMS VPC ドメイン名の名前解決が正しく構成されていることを確認してください。DNS 名前解決の設定については、「内部 DNS 名前解決の概要」をご参照ください。
KMS シークレット管理は Android でサポートされていますか?
いいえ、現在、シークレット管理機能は Android ではサポートされていません。
KMS エンドポイントにアクセスできない
この問題は通常、SDK を使用して KMS にアクセスする際に HTTPS プロトコルが有効になっていないために発生します。
データセキュリティを確保するため、KMS エンドポイントは HTTPS プロトコルのみをサポートしています。SDK を使用して KMS エンドポイントにアクセスする際は、次のコードを実行して KMS で HTTPS が有効になっていることを確認してください。
req.setProtocol(ProtocolType.HTTPS);
オンプレミスデータセンターが KMS インスタンスにアクセスできない
問題
オンプレミスデータセンターが Alibaba Cloud VPC に接続されています。追加の構成なしでは、オンプレミスデータセンターは PrivateZone で構成されたドメイン名 kms.aliyuncs.com を使用して KMS インスタンスにアクセスできません。
ソリューション
-
Express Connect ルーターで、100.100.2.136 と 100.100.2.138 のルートセグメントを許可し、オンプレミスデータセンターが 100.100.2.136 と 100.100.2.138 に PING できるようにします。Express Connect ルーターの構成に関する質問については、ネットワークソリューションアーキテクトにご相談いただくか、次のドキュメントをご参照ください:クラウドとオンプレミスネットワークの相互接続、Express Connect 回線を介してオンプレミスデータセンターを VPC に接続する、ルートエントリの追加と管理、Express Connect 回線を介して Message Queue for Apache RocketMQ を使用してオンプレミスデータセンターからのメッセージを処理する。
重要オンプレミスデータセンターが Alibaba Cloud CEN または Express Connect 回線で接続されていない場合は、ネットワークプロバイダーにルーターの構成についてお問い合わせください。
-
ローカル DNS のプライマリ設定ファイル named.conf を変更して、KMS ドメイン名 (kms.aliyuncs.com) の DNS クエリを Alibaba Cloud DNS に転送して解決するようにします。次のコードは設定例です:
zone "kms.aliyuncs.com" { type forward; forwarders { 100.100.2.136;100.100.2.138;}; };説明ルート転送の構成は、DNS ソフトウェアによって異なります。詳細については、ご利用の DNS ソフトウェアのドキュメントをご参照ください。
ACK がシークレットを同期する際の 'QPS Limit Exceeded' エラー
原因
多数の KMS シークレットを同期すると、サービスのスロットリングポリシーがトリガーされ、同期が失敗する可能性があります。
ソリューション
この問題は ack-secret-manager バージョン 0.5.2 で修正されています。バージョン 0.5.2 以降にアップグレードしてください。
専用ゲートウェイでの「MissingParameter」エラー
問題
Alibaba Cloud SDK を使用して専用ゲートウェイ経由で暗号操作の OpenAPI オペレーションを呼び出すと、次のエラーが返されます:MissingParamter AParamter x-kms-acccesskeyid does not exist in http header or body "$430c76cd-******。
原因
KMS インスタンスのイメージバージョンが 3.0.0 より前です。専用ゲートウェイを使用して暗号操作の OpenAPI オペレーションを呼び出すには、KMS インスタンスのイメージバージョンが 3.0.0 以降である必要があります。
ソリューション
インスタンス管理 ページでインスタンスの詳細にあるイメージバージョンを確認し、Upgrade をクリックして KMS インスタンスのイメージバージョンをスペックアップします。詳細については、「KMS インスタンスのイメージバージョンをスペックアップする」をご参照ください。
サードパーティ ISV の証明書検証の問題
パブリックアクセスを有効にすると、サードパーティ ISV は共有ゲートウェイ経由で接続できます。共有ゲートウェイは、信頼された認証局 (CA) によって署名された証明書を使用します。
Key Management Service コンソールにログインします。 上部のナビゲーションバーで、リージョンを選択します。 左側のナビゲーションウィンドウで、を選択します。
-
インスタンスリストで、ターゲットインスタンスの ID をクリックします。詳細ページで、RD Multi-Account セクションのパブリックネットワークアクセススイッチをオンにします。
説明KMS インスタンスが複数の Alibaba Cloud アカウント間で共有されている場合、各アカウントのパブリックネットワークアクセス権限を設定できます。
-
インスタンス詳細ページのBasic Informationタブで、パブリックエンドポイントを確認します。 このエンドポイントは、パブリックネットワークアクセスを有効にすると表示され、
kms.cn-hangzhou.aliyuncs.comのようなフォーマットになります。