Key Management Service (KMS) を使用して RAM ユーザーの AccessKey を管理した後、RAM シークレットプラグインをインストールできます。Alibaba Cloud SDK を使用する際、RAM シークレット名を参照することで API 認証に必要な AccessKey を取得できます。これにより、AccessKey の詳細情報の管理やシークレットのローテーション処理が不要になります。本トピックでは、RAM シークレットプラグインの仕組み、およびそのインストールと使用方法について説明します。
仕組み
RAM シークレットプラグインは、シークレット名に基づき KMS から RAM シークレット値を取得し、アプリケーションのメモリ内にキャッシュします。アプリケーションが Alibaba Cloud SDK を使用する際、プラグインのローカルキャッシュから取得した AccessKey を用いて Alibaba Cloud サービスへのリクエストを送信します。
キャッシュされた AccessKey が無効になった場合(例:シークレットのローテーションによるもの)、RAM シークレットプラグインは即座に KMS から最新のシークレットを取得し、ローカルキャッシュを更新します。設定されたリトライ動作に基づき、プラグインは新しい RAM シークレットを使用してサービス呼び出しを再試行します。デフォルトでは、プラグインは API 応答内の InvalidAccessKeyId および InvalidAccessKeyId.NotFound エラーコードを検出して、AccessKey が無効であることを識別します。
対応する Alibaba Cloud SDK
KMS は、以下の表に示す Alibaba Cloud SDK 用の RAM シークレットプラグインを提供しています。
RAM シークレットプラグインは、特定の Alibaba Cloud SDK 向けに開発されています。プラグインが要件を満たさない場合は、シークレットクライアントまたは標準の Alibaba Cloud SDK を使用してください。各 SDK の詳細については、「SDK リファレンス」をご参照ください。また、要件に応じてテクニカルサポートまでお問い合わせください。
Java 向け SDK(Java 8 以降のみ)
SDK 名 | プラグインモジュール名 |
Python 向け SDK
SDK 名 | プラグインモジュール名 | 説明 |
V1.0 のみ対応しています。V2.0 の場合は、シークレットクライアントまたは Alibaba Cloud SDK を使用してください。 | ||
該当なし。 |
Go 向け SDK
Go 向けシークレットプラグインは、InvalidAccessKeyId エラーが発生した際に自動的にリトライしません。自動ローテーションされたシークレットは、6 時間ごとに実行されるスケジュールされたリフレッシュ機構によって更新されます。手動でシークレットをローテーションする場合は、資格情報の有効期限切れによるタスク中断を防ぐため、最低でも 12 時間のローテーションウィンドウを設定してください。詳細については、「Go 向け RAM シークレットプラグインで資格情報の有効期限が切れた後に InvalidAccessKeyId エラーが報告された場合の対処方法」をご参照ください。
SDK 名 | プラグインモジュール名 | 説明 |
V1.0 のみ対応しています。V2.0 の場合は、シークレットクライアントまたは Alibaba Cloud SDK を使用してください。 | ||
該当なし。 |
ステップ 1:アクセス認証情報の作成
シナリオ 1:共有ゲートウェイ経由でのアクセス
このシナリオは、パブリックエンドポイントまたは VPC エンドポイントを使用する場合に適用されます。対応するアクセス認証情報には、ECS インスタンス RAM ロールおよび ClientKey が含まれます。
ECS インスタンス RAM ロール
ECS RAM ロールは ECS インスタンスに付与され、信頼できるサービスとして Elastic Compute Service (ECS) が指定されます。このロールにより、ECS インスタンス内で一時的なセキュリティ認証情報(STS トークン)を取得し、AccessKey の設定を行わずに KMS API を呼び出すことができます。
詳細については、「インスタンス RAM ロール」をご参照ください。
RAM コンソールにログインし、信頼できるエンティティが Alibaba Cloud サービスである RAM ロールを作成します。
信頼できるエンティティの種類: Elastic Compute Service を選択します。
プリンシパルを Elastic Compute Service (ECS) に設定します。
RAM ロールに KMS へのアクセス権限を付与します。
方法 1:ID ベースのポリシーを構成する
Key Management Service (KMS) には、組み込みのシステム権限ポリシーが用意されています。これらのポリシーを RAM ロールに直接アタッチできます。詳細については、「Key Management Service のシステム権限ポリシー」をご参照ください。また、カスタム権限ポリシーを作成することも可能です。

方法 2:リソースベースのポリシーを構成する
KMS では、個別のキーおよび認証情報に対するアクセス権限を設定するリソースベースのポリシーをサポートしています。これらのポリシーにより、どの Alibaba Cloud アカウント、RAM ユーザー、および RAM ロールが KMS キーおよび認証情報を管理または使用できるかを制御できます。詳細については、「キー ポリシー」および「シークレット ポリシー」をご参照ください。
ECS 管理コンソールにログインし、RAM ロールを ECS インスタンスに付与します。

ClientKey
共有ゲートウェイへのアクセス用 ClientKey を作成するには、「アプリケーションアクセスポイントの作成」で説明されている標準的な作成方法に従ってください。
ネットワークルールを設定する際、ネットワークタイプを パブリック または VPC に設定します。
権限ルールの範囲を設定する際、Shared KMS Gateway を選択します。
シナリオ 2:専用ゲートウェイ(推奨しません)
このシナリオは、KMS に対してプライベートネットワークを使用する場合に適用されます。アクセス認証情報として ClientKey のみがサポートされます。
ClientKey は、クイック作成および標準作成の 2 つの方法で作成できます。ClientKey の詳細については、「アプリケーションアクセスポイントの概要」および「アプリケーションアクセスポイントの作成」をご参照ください。
方法 1:クイック作成
この方法は迅速かつ効率的であり、テストおよび開発の初期段階に最適です。作成されたアクセス認証情報は、KMS インスタンス内のすべてのリソースへのアクセスを許可します。
Key Management Service コンソールにログインします。上部のナビゲーションバーからリージョンを選択し、左側のナビゲーションウィンドウで を選択します。
アプリケーションアクセス タブで、Create AAP をクリックします。Create AAP パネルで、以下のパラメーターを設定します。
パラメーター
説明
Mode
Quick Creation を選択します。
Scope (KMS Instance)
アプリケーションがアクセスする必要がある KMS インスタンスを選択します。
Application Access Point Name
アプリケーションアクセスポイントのカスタム名を入力します。
Authentication Method
デフォルト値は ClientKey であり、変更できません。
Default Permission Policy
デフォルト値は
key/*およびsecret/*であり、変更できません。これは、アプリケーションが指定された KMS インスタンス内のすべてのキーおよびシークレットにアクセスできることを意味します。OK をクリックします。ブラウザが自動的に ClientKey をダウンロードします。
ClientKey は、Credential(ClientKeyContent)および パスワード(ClientKeyPassword) で構成されます。デフォルトでは、Credential(ClientKeyContent)は
clientKey_****.jsonというファイル名で保存され、パスワード(ClientKeyPassword) はclientKey_****_Password.txtというファイル名で保存されます。
方法 2:標準作成
リソースに対する細かいアクセス権限を設定したい場合は、標準作成を使用します。詳細については、「アプリケーションアクセスポイントの作成」をご参照ください。
重要アプリケーションアクセスポイントを標準作成する場合、以下の点に注意してください:
ネットワークルールを設定する際、ネットワークタイプを プライベート に設定します。
権限ルールの範囲を設定する際、対応する KMS インスタンス ID を選択します。
ステップ 2:実行時パラメーターの構成
RAM シークレットプラグインは、構成ファイルを使用して実行時パラメーターを設定します。アプリケーションの実行時ディレクトリに managed_credentials_providers.properties という名前の構成ファイルを作成し、認証方式に応じて内容を追加します。
アプリケーションが managed_credentials_providers.properties ファイルを自動的に読み込めない場合は、コード例を参照して、コード内でファイルパスを指定する方法を確認してください。
ECS インスタンス RAM ロール
構成ファイルには、以下の内容を使用します。
credentials_type=ecs_ram_role
## ECS RAM ロールの名前。
credentials_role_name=#credentials_role_name#
## 関連付けられた KMS サービスのリージョン。
cache_client_region_id=[{"regionId":"#regionId#"}]ClientKey(共有ゲートウェイ)
KMS 共有ゲートウェイエンドポイントを介してシークレット値を取得するには、構成ファイルに以下の内容を使用します。
## アクセス認証情報の種類。
credentials_type=client_key
## ClientKey のパスワード。環境変数またはファイルから読み取ることができます。
## これは、アプリケーションアクセスポイント(AAP)で ClientKey を作成した際に保存した ClientKeyPassword です。
client_key_password_from_env_variable=#your_client_key_private_key_password_environment_variable_name#
client_key_password_from_file_path=#your_client_key_private_key_password_file_path#
# ClientKey ファイルのパス。
# ClientKey ファイルには、AAP で ClientKey を作成した際にダウンロードした ClientKeyContent が含まれます。
# デフォルトのファイル名は ClientKey_******.json です。
client_key_private_key_path=#your_client_key_private_key_file_path#
## 関連付けられた KMS サービスのリージョン。
cache_client_region_id=[{"regionId":"#regionId#"}]ClientKey(専用ゲートウェイ)
KMS 専用ゲートウェイエンドポイントを介してシークレット値を取得するには、構成ファイルに以下の内容を使用します。
構成パラメーターは cache_client_dkms_config_info です。cache_client_dkms_config_info は JSON 配列形式を使用します。複数の KMS インスタンスを構成することで、サービス可用性およびディザスタリカバリを向上させることができます。
方法 1:環境変数から ClientKey パスワードを取得
構成ファイルの内容は以下のとおりです:
cache_client_dkms_config_info=[{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromEnvVariable":"<YOUR_PASSWORD_ENV_VARIABLE>","clientKeyFile":"<your ClientKey file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]この方法では、認証情報パスワード(ClientKeyPassword) 用にカスタム名の環境変数を設定する必要があります。設定後、
<YOUR_PASSWORD_ENV_VARIABLE>を変数名に置き換えます。例:cache_client_dkms_config_info=[{"regionId":"cn-hangzhou","endpoint":"kst-hzz634e67d126u9p9****.cryptoservice.kms.aliyuncs.com","passwordFromEnvVariable":"passwordFromEnvVariable","clientKeyFile":"C:\RamSecretPlugin\src\main\resources\clientKey_KAAP.json","ignoreSslCerts":false,"caFilePath":"C:\RamSecretPlugin\src\main\resources\PrivateKmsCA_kst-hzz634e67d126u9p9****.pem"}]方法 2:ファイルから ClientKey パスワードを取得
デフォルトでは、ClientKey の 認証情報パスワード(ClientKeyPassword) 用にダウンロードされたファイルの名前は
clientKey_****_Password.txtです。ファイル名を変更した場合は、<your Client Key file path>を新しいファイルパスに置き換える必要があります。構成ファイルの内容は以下のとおりです:
cache_client_dkms_config_info=[{"regionId":"<your dkms regionId >","endpoint":"<your dkms endpoint>","passwordFromFilePath":"< your password file path >","clientKeyFile":"<your Client Key file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]例:
cache_client_dkms_config_info=[{"regionId":"cn-hangzhou","endpoint":"kst-hzz634e67d126u9p9****.cryptoservice.kms.aliyuncs.com","passwordFromFilePath":"C:\RamSecretPlugin\src\main\resources\clientKeyPassword.txt","clientKeyFile":"C:\RamSecretPlugin\src\main\resources\clientKey_KAAP.json","ignoreSslCerts":false,"caFilePath":"C:\RamSecretPlugin\src\main\resources\PrivateKmsCA_kst-hzz634e67d126u9p9****.pem"}]
各構成項目の説明:
構成項目 | パラメーターの説明 | 説明 |
リージョン ID | KMS インスタンスが配置されているリージョン ID。 | 具体的なリージョン ID については、「リージョンとゾーン」をご参照ください。 |
エンドポイント | KMS インスタンスのドメイン名。形式は | インスタンス管理 ページに移動します。インスタンスの詳細ページで、インスタンス VPC エンドポイント がエンドポイントです。 |
clientKeyFile | JSON 形式の ClientKey ファイルの絶対パスまたは相対パス。 |
重要 ClientKey ファイルと認証情報パスワードは 1 対 1 の対応関係にあります。これらは ClientKey を作成した際にのみ取得できます。作成時に保存しなかった場合は、AAP で新しい ClientKey を作成する必要があります。詳細については、「アプリケーションアクセスポイントの作成」をご参照ください。 |
passwordFromFilePath または passwordFromEnvVariable |
| |
SSL 証明書を無視 | KMS インスタンスの SSL 証明書の有効性チェックを無視するかどうかを指定します。KMS インスタンスには組み込みの SSL 証明書があり、SSL/TLS プロトコルを使用して認証および暗号化通信を行います。有効な値は以下のとおりです:
| 本番環境では、このパラメーターを false に設定する必要があります。 |
caFilePath | KMS インスタンスの CA 証明書ファイルの絶対パスまたは相対パス。 KMS インスタンスの CA 証明書は、KMS インスタンスの SSL 証明書の有効性を検証するために使用されます。たとえば、SSL 証明書が対応する CA によって発行されたものであるか、有効期間内であるか、KMS インスタンス(エンドポイント)のドメイン名に対応しているかなどを検証します。 | インスタンス管理 ページに移動します。インスタンスの詳細ページで、ダウンロード をクリックします(Instance CA Certificate セクション内)。 |
ステップ 3:RAM シークレットプラグインの使用
Java
Alibaba Cloud SDK for Java (V2.0)
Java 9+ 互換性
RAM シークレットプラグインを Maven 依存関係としてプロジェクトに追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-tea-openapi-sdk-managed-credentials-provider</artifactId> <version>[1.3.5,]</version> </dependency>説明プラグインの最新バージョンをインストールすることを推奨します。詳細については、ソースコードをご参照ください。
Alibaba Cloud SDK for Java クライアントを取得し、クラウドサービスを呼び出します。以下の例では、ECS の DescribeInstances 操作を呼び出す方法を示します。
ecs20140526 依存関係を追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>ecs20140526</artifactId> <version>7.1.0</version> </dependency>DescribeInstances 操作を呼び出します。
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DescribeInstancesResponse; import com.aliyun.kms.secretsmanager.plugin.tea.openapi.ProxyClientCreator; import com.google.gson.Gson; public class AliyunTeaOpenApiProviderSample { public static void main(String[] args) throws Exception { // ステップ 1:管理対象シークレットの名前(KMS で作成したシークレットの名前)を指定します。 String secretName = "your-secret-name"; /* アプリケーションがクラスパスまたは実行可能 JAR ファイルからデフォルトの構成ファイル(managed_credentials_providers.properties)を読み込めない場合、 またはカスタムファイル名を使用する必要がある場合は、以下のコードを呼び出します。 ファイルは以下の順序で読み込まれます: 1. "your-config-name" が絶対パスの場合、そのパスにあるファイルが読み込まれます。 2. "your-config-name" がファイル名のみの場合、まずクラスパスから、次に実行可能 JAR ファイルから読み込まれます。 */ //ConfigLoader.setConfigName("your-config-name"); // ステップ 2:OpenAPI クライアントを構成します。 com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); config.endpoint = "your-product-endpoint"; // 実際のサービスエンドポイントに置き換えます。 // ステップ 3:クライアントインスタンスを作成します。 Client client = ProxyClientCreator.createClient(config, Client.class, secretName); // ステップ 4:クラウドサービス API を呼び出します。 com.aliyun.ecs20140526.models.DescribeInstancesRequest request = new com.aliyun.ecs20140526.models.DescribeInstancesRequest(); request.setRegionId("cn-hangzhou"); // リージョン ID を設定します。 DescribeInstancesResponse response = client.describeInstances(request); // ステップ 5:結果を出力します。 System.out.println(new Gson().toJson(response.getBody())); } }
Alibaba Cloud SDK for Java (V1.0)
RAM シークレットプラグインを Maven 依存関係としてプロジェクトに追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>[4.3.2,5.0.0]</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core-managed-credentials-provider</artifactId> <version>[1.3.1,]</version> </dependency>説明プラグインの最新バージョンをインストールすることを推奨します。詳細については、ソースコードをご参照ください。
Alibaba Cloud SDK for Java クライアントを取得し、クラウドサービスを呼び出します。以下の例では、ECS の
DescribeInstanceStatus操作を呼び出す方法を示します。ECS の DescribeInstanceStatus 呼び出しを例として示します。
aliyun-java-sdk-ecs 依存関係を追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-ecs</artifactId> <version>5.11.20</version> </dependency>DescribeInstanceStatus操作を呼び出します。import com.aliyuncs.IAcsClient; import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusRequest; import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusResponse; import com.aliyun.kms.secretsmanager.plugin.sdkcore.ProxyAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; public class AliyunSdkProviderSample { public static void main(String[]args) { String secretName="******"; /* アプリケーションがクラスパスまたは実行可能 JAR ファイルからデフォルトの構成ファイル(managed_credentials_providers.properties)を読み込めない場合、 またはカスタムファイル名を使用する必要がある場合は、以下のコードを呼び出します。 ファイルは以下の順序で読み込まれます: 1. "your-config-name" が絶対パスの場合、そのパスにあるファイルが読み込まれます。 2. "your-config-name" がファイル名のみの場合、まずクラスパスから、次に実行可能 JAR ファイルから読み込まれます。 */ //ConfigLoader.setConfigName("your-config-name"); // 1. aliyun-java-sdk-managed-credentials-provider を使用して ACSClient を取得します。 IAcsClient client = null; try { client = new ProxyAcsClient("<the regionId of ECS>", secretName); } catch (ClientException e) { e.printStackTrace(); } // 2. ECS API を呼び出して操作を実行します。 DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest(); DescribeInstanceStatusResponse response; try { response = client.getAcsResponse(request); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } // 3. プラグインに関連付けられたリソースを解放するために、クライアントをシャットダウンします。 client.shutdown(); } }
OSS SDK の使用方法
RAM シークレットプラグインを Maven 依存関係としてプロジェクトに追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.17</version> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>[2.1.0,3.10.2]</version> <exclusions> <exclusion> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-kms</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-sdk-oss-managed-credentials-provider</artifactId> <version>[1.3.1,]</version> </dependency>説明プラグインの最新バージョンをインストールすることを推奨します。詳細については、ソースコードをご参照ください。
OSS SDK for Java クライアントを取得し、クラウドサービスを呼び出します。以下の例では、OSS の
listBuckets操作を呼び出す方法を示します:import com.aliyun.kms.secretsmanager.plugin.oss.ProxyOSSClientBuilder; import com.aliyun.oss.OSS; import com.aliyun.oss.model.Bucket; import java.util.List; public class OssProviderSample { public static void main(String[] args) throws Exception { String secretName = "******"; String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; /* アプリケーションがクラスパスまたは実行可能 JAR ファイルからデフォルトの構成ファイル(managed_credentials_providers.properties)を読み込めない場合、 またはカスタムファイル名を使用する必要がある場合は、以下のコードを呼び出します。 ファイルは以下の順序で読み込まれます: 1. "your-config-name" が絶対パスの場合、そのパスにあるファイルが読み込まれます。 2. "your-config-name" がファイル名のみの場合、まずクラスパスから、次に実行可能 JAR ファイルから読み込まれます。 */ //ConfigLoader.setConfigName("your-config-name"); // OSS クライアントを取得します。 OSS ossClient = new ProxyOSSClientBuilder().build(endpoint, secretName); // 業務ロジック:Alibaba Cloud OSS サービスを呼び出して操作を実行します。 List<Bucket> buckets = ossClient.listBuckets(); for (Bucket bucket : buckets) { if (bucket != null) { // ... } } // プラグインに関連付けられたリソースを解放するために、クライアントをシャットダウンします。 ossClient.shutdown(); } }
Python
Alibaba Cloud SDK for Python (V1.0)
pipコマンドを実行して、プロジェクト向けの RAM シークレットプラグインをインストールします。pip install aliyun-openapi-python-sdk-managed-credentials-provider説明プラグインのバージョンが 0.1.0 以降であることを確認してください。詳細については、ソースコードをご参照ください。
Alibaba Cloud SDK for Python クライアントを取得し、クラウドサービスを呼び出します。
from aliyun_sdk_secretsmanager_sdk_core_plugin.proxy_acs_client import ProxyAcsClient region="cn-hangzhou" secretName="******" # 1. ACSClient を取得します。 client = ProxyAcsClient(region_id=region, secret_name=secretName ) # 2. 業務ロジック:クライアントを使用して Alibaba Cloud サービスを呼び出します。他のコード変更は不要です。 ... # 3. プラグインに関連付けられたリソースを解放するために、クライアントをシャットダウンします。 client.shutdown()
OSS Python SDK
pipコマンドを実行して、プロジェクト向けの RAM シークレットプラグインをインストールします。pip install aliyun-oss-python-sdk-managed-credentials-provider説明プラグインのバージョンが 0.1.0 以降であることを確認してください。詳細については、ソースコードをご参照ください。
Alibaba Cloud OSS SDK for Python クライアントを取得し、クラウドサービスを呼び出します。
from aliyun_sdk_secretsmanager_oss_plugin.proxy_bucket import ProxyBucket from itertools import islice endpoint = "******" secret_name ="******" bucket_name = "******" bucket = ProxyBucket(secret_name=secret_name, endpoint=endpoint, bucket_name=bucket_name) objects = bucket.list_objects() for b in islice(objects.object_list, 10): print(b.key) bucket.shutdown()
Go
Alibaba Cloud SDK for Go (V1.0)
Alibaba Cloud SDK for Go 向けの RAM シークレットプラグインをインストールします。
重要プラグインの最新バージョンをインストールすることを推奨します。詳細については、ソースコードをご参照ください。
Go 向け RAM シークレットプラグインは、v1.63.0 未満の
alibaba-cloud-sdk-goバージョンを必要とします。潜在的な互換性の問題を回避するため、プラグインのgo.modファイルでバージョンを確認および確認してください。
方法 1:
go.modを使用して依存関係を管理します。依存関係をインストールするために、
go.modファイルに以下の内容を追加します。require ( github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/alibaba-cloud-sdk-go-managed-credentials-provider vX.X.X )方法 2:
go getコマンドを使用してリモートパッケージを取得します。go get -u github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/alibaba-cloud-sdk-go-managed-credentials-provider
Alibaba Cloud SDK for Go クライアントを取得し、クラウドサービスを呼び出します。
以下の例では、ECS の
DescribeInstances操作を呼び出す方法を示します:package sample import ( "fmt" "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" sdkcoreprovider "github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/alibaba-cloud-sdk-go-managed-credentials-provider/sdk" ) func main() { secretName := "********" regionId := "cn-hangzhou" client, err := sdkcoreprovider.GetClient(&ecs.Client{}, regionId, secretName) if err != nil { fmt.Println(err) return } ecsClient := client.(*ecs.Client) request := ecs.CreateDescribeInstancesRequest() instancesResponse, err := ecsClient.DescribeInstances(request) if err != nil { fmt.Println(err) return } for _, instance := range instancesResponse.Instances.Instance { // instance に対して何か処理を行います } }
OSS Go SDK
OSS SDK for Go 向けの RAM シークレットプラグインをインストールします。
重要プラグインの最新バージョンをインストールすることを推奨します。詳細については、ソースコードをご参照ください。
Go 向け RAM シークレットプラグインは、v1.63.0 未満の
alibaba-cloud-sdk-goバージョンを必要とします。潜在的な互換性の問題を回避するため、プラグインのgo.modファイルでバージョンを確認および確認してください。
方法 1:
go.modを使用して依存関係を管理します。依存関係パッケージをインストールするために、
go.modファイルに以下の内容を追加します。require ( github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/aliyun-oss-go-sdk-managed-credentials-provider vX.X.X )方法 2:
go getコマンドを使用してリモートコードパッケージを取得します。go get -u github.com/aliyun/aliyun-sdk-managed-credentials-providers-go/aliyun-sdk-managed-credentials-providers/aliyun-oss-go-sdk-managed-credentials-provider
Alibaba Cloud OSS SDK for Go クライアントを取得し、クラウドサービスを呼び出します。
package sample import ( "fmt" ossprovider "aliyun-oss-go-sdk-managed-credentials-provider/sdk" ) func main() { secretName := "********" endpoint := "https://oss-cn-hangzhou.aliyuncs.com" // Proxy OSS クライアントを取得します。 client, err := ossprovider.New(endpoint, secretName) if err != nil { fmt.Println(err) return } result, err := client.ListBuckets() if err != nil { fmt.Println(err) return } for _, bucket := range result.Buckets { // 業務ロジックをここに記述します。 } // プラグインに関連付けられたリソースを解放するために、クライアントをシャットダウンします。 client.Shutdown() }
よくある質問
Go 向け RAM シークレットプラグインで資格情報の有効期限が切れた後に InvalidAccessKeyId エラーが報告された場合の対処方法を教えてください。
原因
Go 向け認証情報プラグインは、
InvalidAccessKeyIdエラーが発生した際に自動的にリトライしません。短いローテーションウィンドウ(例:10 分)でシークレットを手動ローテーションした場合、クライアントの AccessKey がローカルキャッシュのリフレッシュ前に有効期限切れになる可能性があります。
解決策
自動リフレッシュを待つ: 自動ローテーションされたシークレットの場合、プラグインのスケジュールされたリフレッシュ機構(6 時間ごとに実行)が新しいシークレットを取得します。
オンデマンドリフレッシュ: 認証情報が無効になった場合、例外をキャッチして
sdk.RefreshSecretInfo(secretName)メソッドを呼び出して、RAM シークレットを手動でリフレッシュします。スケジュールされたリフレッシュ:
sdk.RefreshSecretInfo(secretName)をカスタム頻度で呼び出す定期タスクを設定します。これにより、現在のシークレットの有効期限が切れる前に新しいシークレットを取得できます。ローテーションウィンドウの調整: 手動ローテーションされた RAM シークレットの場合、最低でも 12 時間のローテーションウィンドウを使用します。