tencent cloud

Cloud Object Storage

一時キーの生成と使用ガイド

Download
フォーカスモード
フォントサイズ
最終更新日: 2026-07-15 11:23:42
キーはCOSへのリクエストを送信する際の認証情報であり、一時キーと永続キーが含まれます。一時キーはフロントエンドでの直接アップロードなどの一時的な権限付与シナリオに適しており、永続キーは信頼できるユーザーやセキュリティ要件の高いシナリオに適しています。本記事では、一時キーの使用方法についてご紹介します。

一時キーの概要

一時キー(一時アクセス証明書)は、TencentCloud APIが提供するインターフェースを通じて取得される、権限が制限されたキーです。COS APIリクエストを送信する必要がある場合、一時キー取得インターフェースから返される情報の中のTmpSecretId、TmpSecretKey、Tokenの3つのフィールドを使用して、署名を計算します。一時キーの権限に関する説明については、一時キーを使用したCOSへのアクセスをご参照ください。
注意:
一時キーを使用してアクセス権限を付与する際は、業務の必要性に基づき、最小権限の原則に従って権限付与を行ってください。
すべてのリソース(resource:*)またはすべての操作(action:*)に対する権限を直接付与すると、権限範囲が広すぎることによるデータセキュリティリスクが存在します。
一時キーを申請する際にactionの権限範囲を指定した場合、取得した一時キーもその権限範囲内でのみ操作できます。例えば、一時キーを申請する際にバケットexamplebucket-1-1250000000へのファイルアップロードを許可する権限範囲を指定した場合、取得したキーはexamplebucket-2-1250000000へのファイルアップロードができず、またexamplebucket-1-1250000000からのファイルダウンロードもできません
一時キーを生成するインターフェースのデフォルトのリクエスト頻度は、600回/秒に制限されています。

一時キーの生成方法

一時キーを申請する過程で、権限ポリシーpolicyフィールドを設定することで、操作とリソースを制限し、権限を指定された範囲内に限定できます。
COS APIの権限ポリシーについては、以下をご参照ください:
一時キーは、以下の2つの方法で生成されます:
方式一:COS STS SDKは、開発言語シナリオに適用されます。
方式二:STS TencentCloud APIは、ユーザーがより便利かつ迅速にキーを生成するために使用できます。

方式一:COS STS SDK

COSはSTS向けにSDKとサンプルを提供しており、現在Java、Node.js、PHP、Python、Goなど、さまざまな言語のサンプルがあります。提供されているCOS STS SDK方式で一時キーを取得できます。各SDKの使用方法については、GitHub上のREADMEとサンプルをご参照ください。各言語のGitHubアドレスは以下の表の通りです:
注意:
STS SDKは、STSインターフェース自体のバージョン間の差異を吸収するため、戻り値パラメータの構造がSTSインターフェースと完全に一致しない場合があります。詳細については、Java SDKドキュメントをご参照ください。

方式二:STS TencentCloud API

STS TencentCloud APIを通じて一時キーを取得します。リクエストパラメータについては、連携アイデンティティ一時アクセス証明書の取得をご参照ください。サンプルパラメータは以下の通りです:
入力パラメータ
参考値
説明
必須
Region
華北地区(北京)ap-beijing
操作対象のリソースが属するリージョンは北京です。
はい
Name
test
カスタム呼び出し元の英語名はtestです。
はい
Policy
{"version":"2.0","statement":[{"effect":"allow","action":["name/cos:PutObject","name/cos:DeleteObject"],"resource":"*"}]}
ポリシー構文バージョンversionは「2.0」です。
宣言によって生じる結果effectは「許可」です。
許可される操作actionは「name/cos:PutObject」(オブジェクトのアップロード)、「name/cos:DeleteObject」(オブジェクトの削除)です。その他のインターフェースについては、CAMをサポートするCOS業務インターフェースをご参照ください。
権限付与の対象となる具体的なデータresource、および操作actionに対するすべてのリソースの操作権限を記述します。
はい
DurationSeconds
3600
一時キーの有効期間を3600秒に指定します。指定しない場合、デフォルトは1800秒です。
いいえ
入力パラメータで参照値を選択または入力した後、リクエストを送信をクリックすると、TmpSecretId、TmpSecretKey、Tokenを取得できます。


一時キー生成のコード例

Java SDKを使用している場合、まずJava SDKをダウンロードし、以下のコードを実行して一時キーのサンプルを取得してください:
// githubで提供されているmaven統合メソッドに従ってjava sts sdkをインポートし、3.1.1以降のバージョンを使用します。

import java.util.TreeMap;
import com.tencent.cloud.CosStsClient;
import com.tencent.cloud.Policy;
import com.tencent.cloud.Response;
import com.tencent.cloud.Statement;
import com.tencent.cloud.cos.util.Jackson;

public class demo {
public static void main(String[] args) {
TreeMap<String, Object> config = new TreeMap<String, Object>();
try {
//ここのSecretIdとSecretKeyは、一時キーを申請するために使用される永続的なアイデンティティ(メインアカウント、サブアカウントなど)を表しています。サブアカウントはバケットを操作する権限が必要です。
String secretId = System.getenv("secretId");//ユーザーのSecretIdです。サブアカウントキーの使用を推奨します。最小権限の原則に従って権限を付与することで、利用リスクを低減してください。サブアカウントキーの取得については、https://www.tencentcloud.com/document/product/598/32675をご参照ください。
String secretKey = System.getenv("secretKey");//ユーザーのSecretKeyです。サブアカウントキーの使用を推奨します。最小権限の原則に従って権限を付与することで、利用リスクを低減してください。サブアカウントキーの取得については、https://www.tencentcloud.com/document/product/598/32675をご参照ください。
// ご自身のTencentCloud apiキーSecretIdに置き換えてください。
config.put("secretId", secretId);
// ご自身のTencentCloud apiキーSecretKeyに置き換えてください。
config.put("secretKey", secretKey);

// policyを初期化します。
Policy policy = new Policy();

// ドメイン名を設定します:
// Tencent Cloud cvmを使用している場合、内部ドメイン名を設定できます。
//config.put("host", "sts.internal.tencentcloudapi.com");

// 一時キーの有効期間は秒単位で、デフォルトは1800秒です。現在、メインアカウントの最長有効期間は2時間(7200秒)、サブアカウントの最長有効期間は36時間(129600秒)です。
config.put("durationSeconds", 1800);
// ご自身のバケットに置き換えてください。
config.put("bucket", "examplebucket-1250000000");
// バケットの所在するリージョンに置き換えてください。
config.put("region", "ap-chongqing");

// 1つのstatementの構築を開始します。
Statement statement = new Statement();
// 宣言設定の結果は操作を許可します。
statement.setEffect("allow");
/**
* キーの権限リスト。ここで、今回の一時キーに必要な権限を指定する必要があります。
* 権限リストについては、https://www.tencentcloud.com/document/product/436/30580をご参照ください。
* ルールは {project}:{interfaceName} です。
* project:製品略称。cos関連の権限付与の値はcos、CI(データ処理)関連の権限付与の値はciです。
* すべてのインターフェースへの権限付与は*で表します。例えば、cos:*、ci:*です。
* 一連の操作権限を追加します:
*/
statement.addActions(new String[]{
"cos:PutObject",
// フォームアップロード、ミニプログラムアップロード
"cos:PostObject",
// マルチパートアップロード
"cos:InitiateMultipartUpload",
"cos:ListMultipartUploads",
"cos:ListParts",
"cos:UploadPart",
"cos:CompleteMultipartUpload",
// 処理関連のインターフェースは一般的にCI製品であり、権限ではciで始まります。
// MPSタスクを作成します。
"ci:CreateMediaJobs",
// ファイル圧縮
"ci:CreateFileProcessJobs"
});

/**
* ここを許可されたパスプレフィックスに変更します。自社ウェブサイトのユーザーログイン状態に基づいて、アップロードを許可する具体的なパスを判断できます。
* リソース式ルールは、cos(オブジェクトストレージ)とci(データ処理)の2種類に分かれます。
* データ処理および審査関連のインターフェースには、ciリソース権限を付与する必要があります。
* cos : qcs::cos:{region}:uid/{appid}:{bucket}/{path}
* ci : qcs::ci:{region}:uid/{appid}:bucket/{bucket}/{path}
* 典型的な{path}権限付与シナリオをいくつか挙げます:
* 1、すべてのオブジェクトへのアクセスを許可します:「*」
* 2、指定されたオブジェクトへのアクセスを許可します:「a/a1.txt」、「b/b1.txt」
* 3、指定されたプレフィックスを持つオブジェクトへのアクセスを許可します:「a*」、「a/*」、「b/*」
* 「*」を入力すると、ユーザーはすべてのリソースにアクセスできるようになります。業務上必要な場合を除き、最小権限の原則に従ってユーザーに適切なアクセス権限範囲を付与してください。
*
* 例:examplebucket-1250000000バケットディレクトリ内のすべてのリソースをcosとciに権限付与します。2つのResourceを権限付与します。
*/
statement.addResources(new String[]{
"qcs::cos:ap-chongqing:uid/1250000000:examplebucket-1250000000/*",
"qcs::ci:ap-chongqing:uid/1250000000:bucket/examplebucket-1250000000/*"});

// 1つのstatementをpolicyに追加します。
// 複数追加できます。
policy.addStatement(statement);
// PolicyのサンプルをStringに変換します。任意のjson変換方式を使用できますが、ここでは本SDKに組み込まれた推奨方式を使用します。
config.put("policy", Jackson.toJsonPrettyString(policy));

Response response = CosStsClient.getCredential(config);
System.out.println(response.credentials.tmpSecretId);
System.out.println(response.credentials.tmpSecretKey);
System.out.println(response.credentials.sessionToken);
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException("no valid secret !");
}
}
}
設定パラメータの説明は以下の通りです:
フィールド
参考値
説明
必須
secretId
実際に取得したSecretIdに準じます。
サブアカウントキーの取得については、サブアカウントアクセスキー管理をご参照ください。
はい
secretKey
実際に取得したSecretKeyに準じます。
サブアカウントキーの取得については、サブアカウントアクセスキー管理をご参照ください。
はい
durationSeconds
1800
一時キーの有効期間を1800秒に指定します。
いいえ
bucket
examplebucket-1250000000
実際のバケット名に準じてください。
はい
region
ap-guangzhou
実際のバケットの所在リージョンに準じてください。
はい
allowPrefixes
"*"
すべてのオブジェクトへのアクセスを許可します。業務上必要な場合を除き、最小権限の原則に従ってユーザーに適切なアクセス権限範囲を付与してください。
はい
allowActions
"cos:PutObject",
"cos:PostObject",
"cos:InitiateMultipartUpload",
"cos:ListMultipartUploads",
"cos:ListParts",
"cos:UploadPart",
"cos:CompleteMultipartUpload",
処理関連のインターフェースは、通常CI製品の権限であり、権限名は「ci」で始まります。
"ci:CreateMediaJobs",
"ci:CreateFileProcessJobs"
PutObject:オブジェクトをアップロードします。
PostObject:フォームによるオブジェクトのアップロード
InitiateMultipartUpload:マルチパートアップロードタスクを初期化します。
ListMultipartUploads:マルチパートアップロードタスクを検索します。
ListParts:アップロード済みのチャンクを検索します。
UploadPart:オブジェクトのチャンクをアップロードします。
CompleteMultipartUpload:マルチパートアップロードタスクを完了します。
CreateMediaJobs:MPSタスクを作成します。
CreateFileProcessJobs:ファイル圧縮
その他のインターフェースについては、cos actionCI actionをご参照ください。
はい

アプリケーション事例:一時キーを使用したCOSへのアクセス

COS APIで一時キーを使用してCOSサービスにアクセスする場合、x-cos-security-tokenフィールドを通じて一時sessionTokenを渡し、一時SecretIdとSecretKeyを使用して署名を計算します。
COS Java SDKを例として、一時キーを使用してCOSにアクセスする例は以下の通りです:
説明:
以下の例を実行する前に、GitHubプロジェクトにアクセスしてcos-java-sdk-v5インストールパッケージを取得してください。
// githubで提供されているmaven統合方式に従ってcos xml java sdkをインポートします。

import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.auth.BasicSessionCredentials; import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.exception.CosClientException; import com.qcloud.cos.exception.CosServiceException; import com.qcloud.cos.model.ObjectMetadata; import com.qcloud.cos.model.PutObjectRequest; import com.qcloud.cos.model.PutObjectResult; import com.qcloud.cos.region.Region; import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {

// ユーザー基本情報
String tmpSecretId = "COS_SECRETID"; // STSインターフェースから返された一時SecretIdに置き換えてください。
String tmpSecretKey = "COS_SECRETKEY"; // STSインターフェースから返された一時SecretKeyに置き換えてください。
String sessionToken = "Token"; // STSインターフェースから返された一時Tokenに置き換えてください。

// 1 ユーザー認証情報(secretId, secretKey)を初期化します。
COSCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);
// 2 bucketリージョンを設定します。詳細については、COSリージョン https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 をご参照ください。
ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
// 3 cosクライアントを生成します。
COSClient cosclient = new COSClient(cred, clientConfig);
// バケット名にはappidを含める必要があります。
String bucketName = "examplebucket-1250000000";

String key = "exampleobject";
// オブジェクトをアップロードします。20M以下のファイルにはこのインターフェースを使用することをお勧めします。
File localFile = new File("src/test/resources/text.txt");
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);

// x-cos-security-token headerフィールドを設定します。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSecurityToken(sessionToken);
putObjectRequest.setMetadata(objectMetadata);

try {
PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
// 成功の場合:putobjectResultはファイルのetagを返します。
String etag = putObjectResult.getETag();
} catch (CosServiceException e) {
//失敗の場合、CosServiceExceptionがスローされます。
e.printStackTrace();
} catch (CosClientException e) {
//失敗の場合、CosClientExceptionがスローされます。
e.printStackTrace();
}

// クライアントを閉じます。
cosclient.shutdown();

}
}
設定パラメータの説明は以下の通りです:
フィールド
参考値
説明
COS_SECRETID
実際に取得したSecretIdに準じます。
STSインターフェースから返された一時的なSecretIdに置き換えてください。
COS_SECRETKEY
実際に取得したSecretKeyに準じます。
STSインターフェースから返された一時的なSecretKeyに置き換えてください。
Token
実際に取得したTokenに準じます。
STSインターフェースから返された一時的なTokenに置き換えてください。
new Region
ap-guangzhou
実際のバケットの所在リージョンに準じてください。
bucketName
examplebucket-1250000000
実際のバケット名に準じてください。
key
exampleobject
例:/test/demo.txt、アップロード後のオブジェクトの位置は/testで、名前はdemo.txtです。
new File
src/test/resources/text.txt
アップロードするオブジェクトのローカル上の位置はsrc/test/resources/で、ファイル名はtest、形式はtxtです。

よくあるご質問

JSONObjectパッケージの競合によるNoSuchMethodError?

答:3.1.0以降のバージョンを使用します。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック