すべてのプロダクト
Search
ドキュメントセンター

Key Management Service:AAPを使用したアクセス制御の実装

最終更新日:Jan 03, 2025

Key Management Service (KMS) は、ID認証とアクセス制御のためのアプリケーションアクセスポイント (AAP) を提供します。 自己管理型アプリケーションでは、アプリケーションがSDKを使用してキーまたはシークレットにアクセスする前に、IDおよび動作認証のためのAAPが必要です。

AAPの紹介

AAPには、権限ポリシーと資格情報という2つの重要な情報が含まれています。

重要

KMSにアクセスする必要があるアプリケーションごとにAAPを作成することを推奨します。 これにより、アプリケーションによってKMSリソースに対するアクセス権限が異なります。

権限ポリシー

権限ポリシーは、指定されたキーとシークレットへのアクセスを許可するアプリケーションを設定するために使用されます。 AAPごとに最大3つの権限ポリシーを設定できます。 権限ポリシーを作成するには、次の情報を設定します。

  • RBAC権限:

    • CryptoServiceKeyUser: KMSインスタンスでキーを使用できます。 インスタンスAPIの暗号化操作がサポートされています。 詳細については、「機能別操作一覧」をご参照ください。

    • CryptoServiceSecretUser: KMSインスタンスでシークレットを使用できます。 インスタンスAPIのシークレット関連の操作がサポートされています。 詳細については、「機能別操作一覧」をご参照ください。

    • SecretUser: 現在のアカウント内のすべてのシークレットを使用できます。 OpenAPIのGetSecretVaule操作がサポートされています。

  • アクセス可能なリソース: キーやシークレットなど、アクセスできるKMSリソース。

  • ネットワークアクセスルール: アクセスが許可されているソースIPアドレス。

資格情報

資格情報は、KMSリソースにアクセスするユーザーのIDと動作を認証するために使用されます。 次のタイプの資格情報がサポートされています。 このトピックでは、認証はクライアントキーに基づいています。

  • クライアントキー: クライアントキーは、アプリケーションからKMSに開始された要求に署名し、署名を検証するために使用されます。 クライアントキーには、Application Access Secret(ClientKeyContent)Passwordが含まれます。

    重要
    • KMSはクライアントキーを保存しません。 クライアントキーを保存しない場合、またはクライアントキーを紛失した場合は、古いクライアントキーを削除して別のクライアントキーを作成できます。

    • クライアントキーのデフォルトの有効期間は5年です。 クライアントキーを作成するときに、クライアントキーのカスタム有効期間を指定できます。 有効期間を1年に設定することを推奨します。 KMSへのアクセスを確保するには、クライアントキーの有効期限前にクライアントキーを変更する必要があります。 詳細については、「Change a client key」をご参照ください。 クライアントキーが変更された後、使用されなくなったクライアントキーをKMSから削除することを推奨します。

    • クライアントキーが開示されている場合は、既存のクライアントキーを削除し、別のクライアントキーを作成します。 AAP用に最大3つのクライアントキーを作成できます。

  • RAMロール: この方法は、アプリケーションがElastic Compute Service (ECS) インスタンス、Container Service for Kubernetes (ACK) クラスター、またはFunction Computeで実行され、アプリケーションがResource Access Management (RAM) ロールに関連付けられており、KMSエンドポイントを使用してシークレット値を取得する必要があるシナリオで使用できます。 KMSは、RAMを使用してOpenAPIリクエスタを認証します。

AAPを使用したアクセス制御の実装

AAPを使用すると、ネットワークアクセスルールを設定できます。 SDKを使用して暗号化操作を実行したり、シークレット値を取得したりする場合は、ネットワークアクセスルールを設定できます。 次の3つのカテゴリがサポートされています。

  • プライベート: アプリケーションがKMSインスタンスエンドポイントを使用してキーとシークレットにアクセスする必要がある場合は、このオプションを選択します。

  • パブリック: アプリケーションがKMSパブリックエンドポイントを使用してシークレットにアクセスする必要がある場合は、このオプションを選択します。

  • VPC: アプリケーションがKMS VPCエンドポイントを使用してシークレットにアクセスする必要がある場合、このオプションを選択します。 このオプションは、KMSインスタンスが中国 (杭州) 、中国 (上海) 、中国 (深セン) 、中国 (張家口) の各リージョンにある場合にのみサポートされます。

説明
  • 暗号化操作: KMSインスタンスSDKとKMSインスタンスエンドポイントを使用してKMSにアクセスする場合にのみ、暗号化操作を実行できます。 AAPを作成するときに、Network TypeパラメーターをPrivateに設定します。

  • シークレット値の取得: KMSインスタンスSDKまたはシークレットSDKを使用して、シークレット値を取得できます。 AAPを作成するときは、シークレットSDKを使用し、Network TypeパラメーターをPrivateに設定することを推奨します。 これにより、高いクエリ /秒 (QPS) と高いセキュリティを実現できます。

    • KMSインスタンスSDK: KMSインスタンスSDKを使用する場合、ネットワークタイプパラメーターをプライベートに設定し、許可された送信元IPアドレスパラメーターをAAPのKMSインスタンスに関連付けられている仮想プライベートクラウド (VPC) のIPアドレスに設定します。

    • Secret SDK: シークレットSDKを使用する場合は、AAPのNetwork TypeパラメーターをPrivate、Public、またはVPCに設定します。

次の例では、KMSインスタンスSDKを使用して暗号化操作を実行し、秘密値を取得します。

次のコンテンツは、図のAAPの説明を説明しています。

アプリケーションは、192.168.XX.XX.XX IPアドレスを介して、key-hzz660a5e7ensihzs **** およびkey-hzz660a5e8dq4iih6 **** キー、およびkst-hzz660a5c8ac57csp **** KMSインスタンスのtest_01およびtest_02シークレットにアクセスできます。

image

AAPのクライアントキーを作成すると、ブラウザは自動的にクライアントキーファイルとクライアントキーのパスワードファイルをダウンロードします。 SDKを初期化するときは、clientKeyFilePathとclientKeyPassを設定する必要があります。 clientKeyFilePathは、クライアントキーファイルへのパスを指定します。 clientKeyPassは、クライアントキーのパスワードを指定します。 次のサンプルコードは、KMS Instance SDK for Javaを初期化する方法の例を示しています。 詳細については、「KMSインスタンスSDK For Java」をご参照ください。

import com.aliyun.dkms.gcs.openapi.models.Config;
import com.aliyun.dkms.gcs.sdk.Client;

// The connection protocol. Set the value to https. KMS supports connections only over HTTPS. 
String protocol = "https";
// The endpoint of your KMS instance. Specify the value in the following format: <ID of your KMS instance >.cryptoservice.kms.aliyuncs.com. 
String endpoint = "<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com";

// The client key. 
String clientKeyFilePath = "<your client key file path>";
//String clientKey = "<your client key>";

// The password of the client key file. 
String clientKeyPass = "<your client key password>";

// The certificate authority (CA) certificate of the KMS instance. You can specify the path to the CA certificate file or enter the content of the CA certificate. 
String caCertPath = "<path/to/DKMSInstanceCACertificates>";
//String caCert = "<The DKMS instance CA certificates content>";

Client client = new Client(new Config()
                           .setProtocol(protocol)
                           .setEndpoint(endpoint)
                           .setCaFilePath(caCertPath) // The path to the CA certificate file or the content of the CA certificate. Configure this parameter based on your business requirements. 
                           //.setCa(caCert) // The content of the CA certificate. 
                           .setClientKeyFile(clientKeyFilePath)// The path to the client key file or the content of the client key file. Configure this parameter based on your business requirements. 
                           //.setClientKeyContent(clientKey)// The content of the client key file. 
                           .setPassword(clientKeyPass));

関連ドキュメント