このトピックでは、Security Token Service (STS) または署名付きURLによって提供される一時的なアクセス資格情報を使用して、Object Storage Service (OSS) リソースに一時的にアクセスする方法について説明します。
使用上の注意
一時アクセス資格情報と署名付きURLには、有効期間を指定する必要があります。 一時的なアクセス資格情報を使用して、オブジェクトのアップロードやダウンロードなどの操作を実行するために使用される署名付きURLを生成する場合、最小有効期間が優先されます。 たとえば、STSによって提供される一時的なアクセス資格情報の有効期間を1,200秒に設定し、資格情報を使用して生成された署名付きURLの有効期間を3,600秒に設定できます。 この場合、署名付きURLが有効期間内であっても、一時アクセス資格情報の有効期限が切れた後は、署名付きURLを使用してオブジェクトをアップロードすることはできません。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSのリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
この例では、OSSClientインスタンスはOSSドメイン名を使用して作成されます。 カスタムドメイン名またはSTSを使用してOSSClientインスタンスを作成する方法の詳細については、「初期化」をご参照ください。
STS を使用した一時的アクセス許可
STSを使用して、OSSへの一時アクセスを許可できます。 STSは、ユーザーに一時的なアクセストークンを提供するwebサービスです。 STSを使用して、管理されているサードパーティのアプリケーションまたはRAMユーザーに、カスタムの有効期間とカスタムのアクセス許可を持つ一時的なアクセス資格情報を付与できます。 STSの詳細については、「STSの概要」をご参照ください。
STSには次の利点があります。
一時的なアクセストークンを生成し、そのアクセストークンをサードパーティのアプリケーションに送信するだけで済みます。 サードパーティのアプリケーションにAccessKeyペアを提供する必要はありません。 トークンのアクセス権限と有効期間を指定できます。
トークンは、有効期間後に自動的に期限切れになります。 したがって、トークンのアクセス権限を手動で取り消す必要はありません。
STSが提供する一時的なアクセス資格情報を使用してOSSにアクセスするには、次の操作を実行します。
一時的なアクセス資格情報を取得します。
一時的なアクセス資格情報は、AccessKeyペアとセキュリティトークンで構成されます。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 一時的なアクセス資格情報の最小有効期間は900秒です。 一時的なアクセス資格情報の最大有効期間は、現在のロールに指定されている最大セッション期間です。 詳細については、「RAMロールの最大セッション期間の指定」をご参照ください。
次のいずれかの方法を使用して、一時的なアクセス資格情報を取得できます。
方法1:
AssumeRole操作を呼び出して、一時的なアクセス資格情報を取得します。
方法2:
STS SDKを使用して一時的なアクセス資格情報を取得します。 詳細については、「概要」をご参照ください。
一時的なアクセス資格情報を使用してオブジェクトをアップロードします。
'aliyun/sts' が必要です
'aliyun/oss' が必要です
sts = Aliyun::STS::Client.new( .)
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID '] 、
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET ']
)
# ロールのAlibaba Cloudリソース名 (ARN) とカスタムロールセッションの名前を指定します。
token = sts.assume_role('role-arn', 'session-name')
client = Aliyun::OSS::Client.new (
# この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
エンドポイント: 'https:// oss-cn-hangzhou.aliyuncs.com '、
# STSから取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。
access_key_id: 'token.access_key_id '、
access_key_secret: 'token.access_key_secret '、
# STSから取得したセキュリティトークンを指定します。
sts_token: 'token.security_token ')
# バケットの名前を指定します。 例: examplebucket.
bucket = client.get_bucket('examplebucket')
# オブジェクトをアップロードします。
bucket.put_object ('exampleobject.txt ', :file => 'D :\\ localpath\\examplefile.txt')
一時的なアクセス許可に署名付きURLを使用する
署名付きURLを生成し、一時的なアクセスのためにサードパーティのユーザーにURLを提供できます。 署名付きURLを生成するときに、URLの有効期間を指定して、サードパーティユーザーがOSSリソースにアクセスできる期間を制限できます。
次のサンプルコードを使用してプラス記号 (+) を含む署名付きURLを生成すると、そのURLを使用してOSSにアクセスできない場合があります。 この場合、URLのプラス記号 (+) を % 2Bに置き換えます。
次のコードでは、署名付きURLを生成し、署名付きURLを使用してオブジェクトをダウンロードする方法の例を示します。
署名付きURLを生成してオブジェクトをダウンロードします。
'aliyun/oss 'が必要です client = Aliyun::OSS::Client.new ( # この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 エンドポイント: 'https:// oss-cn-hangzhou.aliyuncs.com '、 # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 access_key_id: ENV['OSS_ACCESS_KEY_ID '] 、 access_key_secret: ENV['OSS_ACCESS_KEY_SECRET '] ) # バケットの名前を指定します。 例: examplebucket. bucket = client.get_bucket('examplebucket') # オブジェクトのダウンロードに使用される署名付きURLを生成し、URLの有効期間を3600に設定します。 単位は秒です。 puts bucket.object_url('my-object', true, 3600)
- モバイルデバイスまたはブラウザで署名付きURLを使用してオブジェクトをダウンロードします。
// 生成された署名付きURLを入力します。 文字列url = ""; OkHttpClient client = new OkHttpClient(); // 署名付きURLを使用してオブジェクトをダウンロードします。 Request getRequest = new Request.Builder() . url(url) . get() . build(); client.newCall(getRequest).enqueue(new Callback() { @オーバーライド public void onFailure (コールコール, IOException e) { e.printStackTrace(); } @オーバーライド public void onResponse (コールコール、レスポンスレスポンス) throws IOException { if (response.code() == 203 | | response.code() >= 300) { Log.d("ダウンロード" 、"失敗"); Log.d("download", response.body().string()); return; } // オブジェクトがダウンロードされます。 InputStream inputStream = response.body().byteStream(); byte[] buffer = new byte[2048]; int len; while ((len = inputStream.read(buffer)) ! = -1) { // ダウンロードしたデータを処理します。 たとえば、画像を表示したり、オブジェクトに書き込み操作を実行したりします。 } } });
// 署名付きURLを使用してオブジェクトをダウンロードします。 NSURL * url = [NSURL URLWithString:urlString]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSURLSession * session = [NSURLSession sharedSession]; NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (error) { NSLog(@ "ダウンロードエラー: % @" 、エラー); 戻る; } else if (((NSHTTPURLResponse *)response).statusCode == 203 | | ((NSHTTPURLResponse *) レスポンス) 。statusCode >= 300) { NSString * body = [[NSString alloc] initWithData: データエンコード: NSUTF8StringEncoding]; NSLog(@ "ダウンロードエラー: % @" 、本文); return; } NSLog(@ "ダウンロード成功"); }]; [sessionTask resume];
// web APIのHTMLページまたはwindow.openの <a> タグのダウンロード属性を使用して、オブジェクトURLを取得することもできます。
参考資料
一時的なアクセス許可にSTSを使用する方法の詳細については、「Alibaba Cloud OSS SDK For Ruby」をご参照ください。
URLに署名を追加し、署名されたURLをサードパーティに転送してアクセスを許可する方法の詳細については、「URLに署名を追加する」をご参照ください。