edit-icon download-icon

権限付与済みアクセス

最終更新日: May 31, 2017

STS サービスの一時的な権限付与の使用

注意:日本サイトにはまだ STS サービスが提供されていません、提供時期について後ほどホームページでお知らせします。

はじめに

Alibaba Cloud STS サービスにより、OSS はアクセスに対して一時的に権限を付与できます。Alibaba Cloud STS (Security Token Service) とは、クラウドコンピューティングユーザーに一時的なアクセストークンを提供する Web サービスです。STS を使用すると、権限と有効期間をカスタマイズしたアクセス資格情報をサードパーティ製のアプリケーションやフェデレーションユーザー (ユーザー ID を管理できます) に付与できます。サードパーティ製のアプリケーションやフェデレーションユーザーは、これらのアクセス資格情報を使用して、Alibaba Cloud プロダクトの API を直接呼び出したり、Alibaba Cloud プロダクトの SDK を使用してクラウドプロダクトの API にアクセスしたりできます。

  • サードパーティ製のアプリケーションに長期キー (AccessKey) を公開する必要はありません。アクセストークンを生成してサードパーティ製アプリケーションに送信するだけで済みます。このトークンのアクセス権限と有効期間はカスタマイズできます。
  • 権限の失効について気にかける必要もありません。アクセス資格情報は、有効期限が切れると自動的に無効になります。

アプリを例として、やり取りのプロセスを以下に示します。

このソリューションの詳細を以下に示します。

  1. アプリユーザーとしてログインします。アプリユーザーの ID はクライアントが管理します。クライアントは、ID 管理システムをカスタマイズすることも、外部の Web アカウントや OpenID を使用することもできます。AppServer で、有効なアプリユーザーごとに最小限のアクセス権限を細かく定義できます。
  2. AppServer が STS にセキュリティトークンをリクエストします。STS を呼び出す前に、アプリユーザーの最小限のアクセス権限 (ポリシー構文で記述) と権限付与の有効期限を決定する必要があります。
  3. STS から AppServer に有効なアクセス資格情報が返されます。このアクセス資格情報には、セキュリティトークン、一時的なアクセスキー (AccessKeyId と AccessKeySecret)、有効期限が含まれます。
  4. AppServer から ClientApp にアクセス資格情報が返されます。ClientApp はこの資格情報をキャッシュします。資格情報が無効になったら、AppServer に新しい有効なアクセス資格情報をリクエストする必要があります。たとえば、アクセス資格情報の有効期間が 1 時間である場合、AppServer にアクセス資格情報の更新を 30 分ごとにリクエストできます。
  5. ClientApp は、ローカルにキャッシュしたアクセス資格情報を使用して Alibaba Cloud サービスの API をリクエストします。ECS は、STS のアクセス資格情報を認識し、STS を使用して資格情報を検証して、ユーザーリクエストに適切に応答します。

ここでのポイントは、STS の ロールの引き受け (AssumeRole) インターフェイスを呼び出すだけで有効なアクセス資格情報を取得できることです。このメソッドは、STS DSK を使用して呼び出すこともできます。詳細については こちらをクリックしてください。

STS の資格情報を使用して署名付きリクエストを作成する

STS の一時的な資格情報を取得した後、ユーザーのクライアントは、含まれているセキュリティトークンと一時的なアクセスキー (AccessKeyId、AccessKeySecret) を使用して OSSClient を生成します。オブジェクトのアップロードを例として使用します。

  1. String accessKeyId = "<accessKeyId>";
  2. String accessKeySecret = "<accessKeySecret>";
  3. String securityToken = "<securityToken>"
  4. // Uses Hangzhou as an example
  5. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  6. var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret,securityToken);

URL 署名を使用したアクセス許可

署名付き URL の生成

署名付き URL を生成することにより、一時的なアクセス URL をユーザーに提供できます。URL を生成するときに、URL の有効期限を指定して、ユーザーがアクセスできる期間を制限できます。

署名付き URL の生成

コードは次のとおりです。

  1. Svar req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get);
  2. {
  3. Expiration = new DateTime().AddHours(1)
  4. }
  5. var uri = client.GeneratePresignedUri(req);

生成された URL はデフォルトで GET アクセスメソッドを使用します。このように、ブラウザーを直接使用して関連のコンテンツにアクセスできます。

他の HTTP メソッド URL の生成

ユーザーが他の操作 (オブジェクトのアップロードまたは削除など) を一時的に使用する場合は、別のメソッドで URL に署名する必要があります。例:

  1. // Generates a PUT method URL
  2. var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Put);
  3. {
  4. Expiration = new DateTime().AddHours(1),
  5. ContentType = "text/html"
  6. }
  7. var uri = client.GeneratePresignedUri(req);

署名付き URL を使用したリクエストの送信

現在、.NET SDK は Put Object と GET Object URL 署名リクエストをサポートしています。

putobject URL 署名メソッドの使用

  1. var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Put);
  2. var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest);
  3. var result = client.PutObject(signedUrl, fileToUpload);