tencent cloud

Cloud Object Storage

最新情報とお知らせ
製品アップデート情報
製品のお知らせ
製品概要
製品概要
機能概要
応用シナリオ
製品の優位性
基本概念
リージョンとアクセスドメイン名
仕様と制限
製品の課金
課金概要
課金方式
課金項目
無料利用枠
記帳例
請求書の確認とダウンロード
お支払い遅れについて
よくある質問
クイックスタート
コンソールクイックスタート
COSBrowserクイックスタート
ユーザーガイド
リクエストの作成
バケット
オブジェクト
データ管理
バッチ処理
グローバルアクセラレーション
監視とアラーム
運用管理センター
データ処理
インテリジェントツールボックス使用ガイド
データワークフロー
アプリ統合
ツールガイド
ツール概要
環境のインストールと設定
COSBrowserツール
COSCLIツール
COSCMDツール
COS Migrationツール
FTP Serverツール
Hadoopツール
COSDistCpツール
HDFS TO COSツール
オンラインツール (Onrain Tsūru)
セルフ診断ツール
実践チュートリアル
概要
アクセス制御と権限管理
パフォーマンスの最適化
AWS S3 SDKを使用したCOSアクセス
データディザスタリカバリバックアップ
ドメイン名管理の実践
画像処理の実践
COSオーディオビデオプレーヤーの実践
データセキュリティ
データ検証
COSコスト最適化ソリューション
サードパーティアプリケーションでのCOSの使用
移行ガイド
サードパーティクラウドストレージのデータをCOSへ移行
データレークストレージ
クラウドネイティブデータレイク
メタデータアクセラレーション
データアクセラレーター GooseFS
データ処理
データ処理概要
画像処理
メディア処理
コンテンツ審査
ファイル処理
ドキュメントプレビュー
トラブルシューティング
RequestId取得の操作ガイド
パブリックネットワーク経由でのCOSへのファイルアップロード速度の遅さ
COSへのアクセス時に403エラーコードが返される
リソースアクセス異常
POST Objectの一般的な異常
セキュリティとコンプライアンス
データ災害復帰
データセキュリティ
クラウドアクセスマネジメント
よくある質問
よくあるご質問
一般的な問題
従量課金に関するご質問
ドメインコンプライアンスに関するご質問
バケット設定に関する質問
ドメイン名とCDNに関するご質問
ファイル操作に関するご質問
権限管理に関するご質問
データ処理に関するご質問
データセキュリティに関するご質問
署名付きURLに関するご質問
SDKクラスに関するご質問
ツール類に関するご質問
APIクラスに関するご質問
Agreements
Service Level Agreement
プライバシーポリシー
データ処理とセキュリティ契約
連絡先
用語集

一時キーの生成と使用

PDF
フォーカスモード
フォントサイズ
最終更新日: 2024-06-26 10:42:27
注意:
一時キーを使用してアクセス権限を付与する際は、必ず業務の必要性に応じて、最小権限の原則に従って権限を付与してください。すべてのリソース(resource:*)またはすべてのアクション(action:*)の権限を直接与えてしまうと、権限が大きすぎるためにデータセキュリティ上のリスクが生じます。
一時キーを申請する際、権限の範囲を指定していると、申請した一時キーも権限の範囲でしか操作を行うことができません。例えば一時キーを申請する際、バケットexamplebucket-1-1250000000にファイルをアップロードできるという権限の範囲を指定していた場合、申請したキーではファイルをexamplebucket-2-1250000000にアップロードすることも、examplebucket-1-1250000000からファイルをダウンロードすることもできません

一時キー

一時キー(一時アクセス証明書)はCAMのTencent Cloud APIによって提供されるインターフェースを通じて取得する、権限が限定されたキーです。 COS APIは一時キーを使用して署名を計算し、COS APIリクエストの送信に使用することができます。 COS APIリクエストは一時キーを使用して署名を計算する際、一時キー取得インターフェースから返された情報の中の、次の3つのフィールドを使用する必要があります。
TmpSecretId
TmpSecretKey
Token

一時キーを使用するメリット

Web、iOS、AndroidでCOSを使用する際、固定のキーによる署名計算方式では権限を有効に制御できず、またパーマネントキーをクライアントコードに含めることには極めて大きな漏洩リスクが伴います。一時キー方式を使用すると、権限制御の問題を便利かつ有効に解決することができます。 例えば、一時キー申請の過程で、権限ポリシーのpolicyフィールドを設定することで、操作およびリソースを制限し、権限を指定された範囲内に限定することができます。
COS API権限承認ポリシーに関しては、次をご参照ください。

一時キーの取得

一時キーは、提供されているCOS STS SDK方式で取得するか、またはSTS Cloud APIを直接リクエストする方式で取得することもできます。
注意:
例で使用しているのはJava SDKであり、GitHubでSDKコード(バージョン番号)を取得する必要があります。対応するSDKバージョン番号が見つからないと表示された場合は、GitHubで対応するバージョンのSDKを取得できないかを確認してください。

COS STS SDK

COSはSTS向けにSDKおよびサンプルを提供しています。現在はJava、Nodejs、PHP、Python、Goなどの複数の言語のサンプルがあります。具体的な内容についてはCOS STS SDKをご参照ください。各SDKの使用説明についてはGithubのREADMEとサンプルをご参照ください。各言語のGitHubアドレスは以下の表のとおりです。
注意:
STS SDKはSTSインターフェース自体のバージョン間の違いを非表示にするため、返されるパラメータの構造がSTSインターフェースと完全には一致しない場合があります。詳細については、Java SDKドキュメントをご参照ください。
例えばJava SDKをご利用中の場合、まずJava SDKをダウンロードした後、次の一時キー取得のサンプルを実行してください。

サンプルコード

// githubが提供するmaven統合メソッドによってjava sts sdkをインポートします。3.1.0以上のバージョンを使用します
public class Demo {
public static void main(String[] args) {
TreeMap<String, Object> config = new TreeMap<String, Object>();

try {
//ここでのSecretIdとSecretKeyは一時キーの申請に用いる永続的なID(ルートアカウント、サブアカウントなど)を表します。サブアカウントにはバケットの操作権限が必要です。
String secretId = System.getenv("secretId");//ユーザーのSecretIdです。サブアカウントのキーを使用し、権限承認は最小権限ガイドに従って行い、使用上のリスクを低減させることをお勧めします。サブアカウントキーの取得については、https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1をご参照ください
String secretKey = System.getenv("secretKey");//ユーザーのSecretKeyです。サブアカウントのキーを使用し、権限承認は最小権限ガイドに従って行い、使用上のリスクを低減させることをお勧めします。サブアカウントキーの取得については、https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1をご参照ください
// ご自身のCloud APIキーのSecretIdに置き換えます
config.put("secretId", secretId);
// ご自身のCloud APIキーのSecretKeyに置き換えます
config.put("secretKey", secretKey);

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

// 一時キーの有効期間の単位は秒であり、デフォルトでは1800秒です。現在はルートアカウントが最長2時間(7200秒)、サブアカウントが最長36時間(129600秒)までです
config.put("durationSeconds", 1800);

// ご自身のbucketに置き換えます
config.put("bucket", "examplebucket-1250000000");
// bucketの所在リージョンに置き換えます
config.put("region", "ap-guangzhou");

// ここを許可するパスのプレフィックスに変更します。ご自身のウェブサイトのユーザーログインセッションによって、アップロードを許可する具体的なパスを判断することができます
// いくつかの典型的なプレフィックスによる権限承認のケースを挙げます。
// 1、すべてのオブジェクトへのアクセスを許可する:"*"
// 2、指定のオブジェクトへのアクセスを許可する:"a/a1.txt", "b/b1.txt"
// 3、指定のプレフィックスを持つオブジェクトへのアクセスを許可する:"a*", "a/*", "b/*"
// 「*」を入力すると、ユーザーにすべてのリソースへのアクセスを許可することになります。業務上の必要がない限り、最小権限の原則に従って、対応する範囲のアクセス権限をユーザーに与えてください。
config.put("allowPrefixes", new String[] {
"exampleobject",
"exampleobject2"
});

// キーの権限リストです。ここで今回の一時キーに必要な権限を指定する必要があります。
// シンプルアップロード、フォームアップロード、マルチパートアップロードには次の権限が必要です。その他の権限リストについてはhttps://www.tencentcloud.com/document/product/436/30580をご参照ください
String[] allowActions = new String[] {
// シンプルアップロード
"name/cos:PutObject",
// フォームアップロード、ミニプログラムアップロード
"name/cos:PostObject",
// マルチパートアップロード
"name/cos:InitiateMultipartUpload",
"name/cos:ListMultipartUploads",
"name/cos:ListParts",
"name/cos:UploadPart",
"name/cos:CompleteMultipartUpload"
};
config.put("allowActions", allowActions);
/**
* conditionの設定(必要な場合)
//# 一時キーの発効条件、conditionに関する詳細な設定ルールおよびCOSがサポートするconditionのタイプについては https://www.tencentcloud.com/document/product/436/71307?from_cn_redirect=1をご参照ください
final String raw_policy = "{\\n" +
" \\"version\\":\\"2.0\\",\\n" +
" \\"statement\\":[\\n" +
" {\\n" +
" \\"effect\\":\\"allow\\",\\n" +
" \\"action\\":[\\n" +
" \\"name/cos:PutObject\\",\\n" +
" \\"name/cos:PostObject\\",\\n" +
" \\"name/cos:InitiateMultipartUpload\\",\\n" +
" \\"name/cos:ListMultipartUploads\\",\\n" +
" \\"name/cos:ListParts\\",\\n" +
" \\"name/cos:UploadPart\\",\\n" +
" \\"name/cos:CompleteMultipartUpload\\"\\n" +
" ],\\n" +
" \\"resource\\":[\\n" +
" \\"qcs::cos:ap-shanghai:uid/1250000000:examplebucket-1250000000/*\\"\\n" +
" ],\\n" +
" \\"condition\\": {\\n" +
" \\"ip_equal\\": {\\n" +
" \\"qcs:ip\\": [\\n" +
" \\"192.168.1.0/24\\",\\n" +
" \\"101.226.100.185\\",\\n" +
" \\"101.226.100.186\\"\\n" +
" ]\\n" +
" }\\n" +
" }\\n" +
" }\\n" +
" ]\\n" +
"}";

config.put("policy", raw_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 !");
}
}
}

よくあるご質問と回答

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

3.1.0以上のバージョンを使用してください。

一時キーを使用したCOSアクセス

COS APIが一時キーを使用してCOSサービスにアクセスする際、x-cos-security-tokenフィールドによって一時sessionTokenを渡し、一時SecretIdおよびSecretKeyによって署名を計算します。
COS Java SDKの例では、一時キーを使用したCOSアクセスのサンプルは次のようになります。
説明:
次のサンプルを実行する前に、GithubプロジェクトでJava SDKインストールパッケージを取得してください。
// githubが提供するmaven統合メソッドによってcos xml java sdkをインポートします
import com.qcloud.cos.*;
import com.qcloud.cos.auth.*;
import com.qcloud.cos.exception.*;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.*;
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 ユーザーID情報(secretId, secretKey)を初期化します
COSCredentials cred = new BasicCOSCredentials(tmpSecretId, tmpSecretKey);
// 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);
// bucket名にはappidを含める必要があります
String bucketName = "examplebucket-1250000000";

String key = "exampleobject";
// objectをアップロードします。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();

}
}

ヘルプとサポート

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

フィードバック