これまでのドキュメントでは、RAM ユーザー機能のみを使用していました。 RAM ユーザー機能のみを使用したユーザーアカウントは、長期的な通常の使用に用いられます。 情報が漏えいした場合、 RAM ユーザーのアクセス許可をすぐに無効にできないと、重大なリスクとなります。

前の例では、開発者のアプリがユーザーに対して、OSS バケット am-test-app へのデータのアップロードを許可しており、現在、アプリのユーザーは多数いると仮定しています。 この場合、アプリはどのようにしてデータのアップロード権限を多数のユーザーに安全に付与し、複数のユーザー間で確実にストレージをわけることができるのでしょうか。

そのようなシナリオでは、STS を使用して一時的なアクセスをユーザーに許可する必要があります。 STS を使用することで、指定したユーザーに最低限必要な権限を付与することにより、そのユーザーを制限する複雑なポリシーを指定することができます。

ロールの作成

前のドキュメントの例に基づき、アプリユーザーは個人データを保存するためのバケット、ram-test-app を持っているとします。 ロールは次のように作成されます。

  1. 前のドキュメントで示したプロセスを使用し、ram_test_app という名前の RAM ユーザーアカウントを作成します。 アカウントは引き受けるロールの権限を継承するため、このアカウントにはいかなる権限も付与しないようにします。
  2. ロールを作成します。ここでは、各ユーザーがそれぞれ読み取り操作を実行してファイルをアップロードするため、2 つのロールを作成する必要があります。
    • RAM コンソールにログインし、[ロール] > [新しいロール] とクリックします。 > .
    • ロールタイプを選択します。 ここではユーザーロールをクリックする必要があります。
    • ロールタイプ情報を入力します。 これは、このロールが自身の Alibaba Cloud アカウントによって使用されていたためです。 既定の設定を使用します。
    • ロールの基本情報の設定
  3. ロールが作成された時点では、権限はありませんでした。 そのため、前述のプロセスを使用し、カスタマイズ権限付与ポリシーを作成する必要があります。 権限付与ポリシーは次のとおりです。
    {
    "Version": "1",
    "Statement": [
     {
       "Effect": "allow ",
       "Action": [
         "oss:ListObjects",
         "Oss: GetObject"
       ],
       "Resource": [
         "acs:oss:*:*:ram-test-app",
         "acs:oss:*:*:ram-test-app/*"
       ]
     }
    ]
    }

    これは ram-test-app に対する読み取り専用の権限を示しています。

  4. ポリシーを作成した後、ロール管理ページで、RamTestAppReadOnly ロールに対して、ram-test-app の読み取り専用権限を付与します。
  5. 同じ手順を実行して、RamTestAppWrite ロールを作成し、カスタマイズ権限付与ポリシーを使用し、ram-test-app の書き込み権限を付与します。 権限付与ポリシーは次のとおりです。
    {
    "Version": "1",
    "Statement": [
     {
       "Effect": "Allow",
       "Action": [
         "oss:DeleteObject",
         "oss:ListParts",
         "oss:AbortMultipartUpload",
         "oss:PutObject"
       ],
       "Resource": [
         "acs:oss:*:*:ram-test-app",
         "acs:oss:*:*:ram-test-app/*"
       ]
     }
    ]
    }

    これで、RamTestAppReadOnly とRamTestAppWrite の 2 つのロールが作成されました。それぞれ、ram-test-app に対する読み取り専用権限および書き込み権限を持っています。

一時的なアクセス許可

ロールを作成したら、それらを使用して OSS への一時的なアクセス権を付与します。

準備

ロールを引き受けるには権限付与が必要です。権限付与を行わない場合、RAM ユーザーなら誰でもこれらのロールを引き受けることができてしまい、それが予測不可能なリスクにつながる可能性があります。 したがって、対応するロールを引き受けるため、RAM ユーザーは明示的に設定された権限を持っている必要があります。

  1. [カスタマイズ権限付与ポリシーの管理] にて、 2 つのカスタマイズ権限付与ポリシーを作成します。
    {
    "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Resource": "acs:ram::1894xxxxxx722283:role/ramtestappreadonly"
     }
    ],
    "Version": "1"
    }

    同じ方法で、別のカスタマイズ権限付与ポリシーを作成します。

    {
    "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Resource": "acs:ram::1894xxxxxx722283:role/ramtestappwrite"
     }
    ],
    "Version": "1"
    }

    ここでは、Resource の後に入力されたコンテンツがロール ID になります。 ロール ID は、[ロール] の [ロールの詳細] にあります。 >

  2. アカウント ram_test_app に 2 つの権限付与ポリシーを付与します。
STS を使用してアクセス許可を付与

これで、アクセス権限を付与するため、STS を正式に使用するためのプラットフォームの準備が整いました。

ここではシンプルな STS Python コマンドラインツール sts.py を使用します。 呼び出し方法は次のとおりです。

$python ./sts.py AssumeRole RoleArn=acs:ram::1894xxxxxx722283:role/ramtestappreadonly RoleSessionName=usr001 Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":["oss:ListObjects","oss:GetObject"],"Resource":["acs:oss:*:*:ram-test-app","acs:oss:*:*:ram-test-app/*"]}]}' DurationSeconds=1000 --id=id --secret=secret
  • RoleArn: 引き受けるロール ID を示します。 ロール ID は [ロール] の [ロールの詳細] で確認できます。 >
  • RoleSessionName: 一時的な認証情報の名前を示します。 一般的に、異なるアプリケーションユーザーを使用することで、RoleSessionName を分けることを推奨します。
  • Policy: ロールが引き受けられたときに追加される権限の制限を示します。
  • DurationSeconds: 一時的な認証情報の有効期限を秒レベルで示します。 最小値は 900、最大値は 3,600 です。
  • id and secret: ロールを引き受ける RAM ユーザーの AccessKey を示します。

ここでは、"Policy" が意味する内容について説明します。 ここで言及されているポリシーは、ロールが引き継がれた後、一時的な認証情報の許可を制限するために使用されます。 結局のところ、一時的な認証情報によって取得された権限は、ロールと渡されたポリシーとで重複する権限です。

ロールが引き受けられた場合、柔軟性を高めるためにポリシーを入力します。 たとえば、ファイルをアップロードするとき、ユーザーごとに異なるアップロードパス制限を追加します。 次の例で詳細を示します。

以下で、STS の機能をテストします。 バケットをテストするにあたり、まずコンソールを使用し、コンテンツ ststest を含む ram-test-app 内にファイル test.txt を移動させます。

まず、RAM ユーザーアカウント ram_test_app を使用してファイルに直接アクセスします。 次に、AccessKey をテストで使用する自分のアクセスキーに置き換えます。

[admin@NGIS-CWWF344M01C /home/admin/oss_test]
$./osscmd get oss://ram-test-app/test.txt test.txt --host=oss-cn-hangzhou.aliyuncs.com -i oOhue******Frogv -k OmVwFJO3qcT0******FhOYpg3p0KnA
Error Headers:
[('content-length', '229'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A94D444F4D8B2225E4AFE'), ('date', 'Tue, 17 Nov 2015 02:45:40 GMT'), ('content-type', 'application/xml')]
Error Body:
<?  xml version="1.0" encoding="UTF-8"? >
<Error>
  <Code>AccessDenied</Code>
  <Message>AccessDenied</Message>
  <RequestId>564A94D444F4D8B2225E4AFE</RequestId>
  <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
Error Status:
403
get Failed!
[admin@NGIS-CWWF344M01C /home/admin/oss_test]
$./osscmd put test.txt oss://ram-test-app/test.txt --host=oss-cn-hangzhou.aliyuncs.com -i oOhue******Frogv -k OmVwFJO3qcT0******FhOYpg3p0KnA
100% Error Headers:
[('content-length', '229'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A94E5B1119B445B9F8C3A'), ('date', 'Tue, 17 Nov 2015 02:45:57 GMT'), ('content-type', 'application/xml')]
Error Body:
<? xml version="1.0" encoding="UTF-8"? >
<Error> 
  <Code>AccessDenied</Code>
  <Message>AccessDenied</Message>
  <RequestId>564A94E5B1119B445B9F8C3A</RequestId>
  <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
Error Status:
403
put Failed!

アクセス権限がないと、RAM ユーザーアカウント ram_test_app を使用したアクセス試行は失敗します。

一時的な権限を使用したダウンロード

これより、STS を使用してファイルをダウンロードします。 理解しやすくするため、入力するポリシーとロールポリシーは同一にしてあります。 有効期限は 3,600 秒に設定されており、ここでのアプリユーザーは usr001です。 手順は次のとおりです。

  1. STS を使用して一時的な認証情報を取得します。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $python ./sts.py AssumeRole RoleArn=acs:ram::1894xxxxxx722283:role/ramtestappreadonly RoleSessionName=usr001 Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":["oss:ListObjects","oss:GetObject"],"Resource":["acs:oss:*:*:ram-test-app","acs:oss:*:*:ram-test-app/*"]}]}' --id=oOhue******Frogv --secret=OmVwFJO3qcT0******FhOYpg3p0KnA
     https://sts.aliyuncs.com/?SignatureVersion=1.0&Format=JSON&Timestamp=2015-11-17T03%3A07%3A25Z&RoleArn=acs%3Aram%3A%3A1894xxxxxx722283%3Arole%2Framtestappreadonly&RoleSessionName=usr001&AccessKeyId=oOhu******3Frogv&Policy=%7B%22Version%22%3A%221%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Action%22%3A%5B%22oss%3AListObjects%22%2C%22oss%3AGetObject%22%5D%2C%22Resource%22%3A%5B%22acs%3Aoss%3A%2A%3A%2A%3Aram-test-app%22%2C%22acs%3Aoss%3A%2A%3A%2A%3Aram-test-app%2F%2A%22%5D%7D%5D%7D&SignatureMethod=HMAC-SHA1&Version=2015-04-01&Signature=bshxPZpwRJv5ch3SjaBiXLodwq0%3D&Action=AssumeRole&SignatureNonce=53e1be9c-8cd8-11e5-9b86-008cfa5e4938
     {
       "AssumedRoleUser": {
         "Arn": "acs:ram::1894xxxxxx722283:role/ramtestappreadonly/usr001", 
         "AssumedRoleId": "317446347657426289:usr001"
       }, 
       "Credentials": {
         "AccessKeyId": "STS. 3mQEbNf******wa180Le", 
         "AccessKeySecret": "B1w7rCbR4dzGwNYJ******3PiPqKZ3gjQhAxb6mB", 
         "Expiration": "2015-11-17T04:07:25Z", 
         "SecurityToken": "CAESvAMIARKAASQQ******7683CGlhdGsv2/di8uI+X******DxM5FTd0fp5wpPK/7UctYH2MJ///c4yMN1PUCcEHI1zppCINmpDG2XeNA3OS16JwS6ESmI50sHyWBmsYkCJW15gXnfhz/OK+mSp1bYxlfB33qfgCFe97Ijeuj8RMgqFx0Hny2BzGhhTVFMuM21RRWJOZnR5Yzl1T3dhMTgwTGUiEjMxNzQ0NjM0NzY1NzQyNjI4OSoGdXNyMDAxMJTrgJ2RKjoGUnNhTUQ1QpsBCgExGpUBCgVBbG******CgxBY3Rpb25FcXVhbHMSBkFjdGlvbhogCg9vc3M6TGlzdE9iamVjdHMKDW9zczpHZXRPYmplY3QSUgoOUmVzb3VyY2VFcXVhbHMSCFJlc291cmNlGjYKGGFjczpvc3M6KjoqOnJhbS10ZXN0LWFwcAoaYWNzOm9zczoq******FtLXRlc3QtYXBwLypKEDE4OTQxODk3Njk3MjIyODNSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzE3NDQ2MzQ3NjU3NDI2Mjg5chJyYW10ZXN0YXBwcmVhZG9ubHk="
       }, 
       "RequestId": "8C009F64-F19D-4EC1-A3AD-7A718CD0B49B"
     }
  2. 一時的な認証情報を使用してファイルをダウンロードします。 ここでの sts_token は STS によって返された SecurityToken です。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd get oss://ram-test-app/test.txt test.txt --host=oss-cn-hangzhou.aliyuncs.com -i STS. 3mQEbNf******wa180Le -k B1w7rCbR4dzGwNYJ******3PiPqKZ3gjQhAxb6mB --sts_token=CAESvAMIARKAASQQ******7683CGlhdGsv2/di8uI+X******DxM5FTd0fp5wpPK/7UctYH2MJ///c4yMN1PUCcEHI1zppCINmpDG2XeNA3OS16JwS6ESmI50sHyWBmsYkCJW15gXnfhz/OK+mSp1bYxlfB33qfgCFe97Ijeuj8RMgqFx0Hny2BzGhhTVFMuM21RRWJOZnR5Yzl1T3dhMTgwTGUiEjMxNzQ0NjM0NzY1NzQyNjI4OSoGdXNyMDAxMJTrgJ2RKjoGUnNhTUQ1QpsBCgExGpUBCgVBbG******CgxBY3Rpb25FcXVhbHMSBkFjdGlvbhogCg9vc3M6TGlzdE9iamVjdHMKDW9zczpHZXRPYmplY3QSUgoOUmVzb3VyY2VFcXVhbHMSCFJlc291cmNlGjYKGGFjczpvc3M6KjoqOnJhbS10ZXN0LWFwcAoaYWNzOm9zczoq******FtLXRlc3QtYXBwLypKEDE4OTQxODk3Njk3MjIyODNSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzE3NDQ2MzQ3NjU3NDI2Mjg5chJyYW10ZXN0YXBwcmVhZG9ubHk=
     100% The object test.txt is downloaded to test.txt, please check.
     0.061(s) elapsed
  3. ご覧のとおり、一時的な認証情報を使用してファイルをダウンロードします。 次に、一時的な認証情報を使用してファイルをアップロードできるかどうかをテストします。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd put test.txt oss://ram-test-app/test.txt --host=oss-cn-hangzhou.aliyuncs.com -i STS. 3mQEbNf******wa180Le -k B1w7rCbR4dzGwNYJ******3PiPqKZ3gjQhAxb6mB --sts_token=CAESvAMIARKAASQQ******7683CGlhdGsv2/di8uI+X******DxM5FTd0fp5wpPK/7UctYH2MJ///c4yMN1PUCcEHI1zppCINmpDG2XeNA3OS16JwS6ESmI50sHyWBmsYkCJW15gXnfhz/OK+mSp1bYxlfB33qfgCFe97Ijeuj8RMgqFx0Hny2BzGhhTVFMuM21RRWJOZnR5Yzl1T3dhMTgwTGUiEjMxNzQ0NjM0NzY1NzQyNjI4OSoGdXNyMDAxMJTrgJ2RKjoGUnNhTUQ1QpsBCgExGpUBCgVBbG******CgxBY3Rpb25FcXVhbHMSBkFjdGlvbhogCg9vc3M6TGlzdE9iamVjdHMKDW9zczpHZXRPYmplY3QSUgoOUmVzb3VyY2VFcXVhbHMSCFJlc291cmNlGjYKGGFjczpvc3M6KjoqOnJhbS10ZXN0LWFwcAoaYWNzOm9zczoq******FtLXRlc3QtYXBwLypKEDE4OTQxODk3Njk3MjIyODNSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzE3NDQ2MzQ3NjU3NDI2Mjg5chJyYW10ZXN0YXBwcmVhZG9ubHk=        
     100% Error Headers:
     [('content-length', '254'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A9A2A1790CF0F53C15C82'), ('date', 'Tue, 17 Nov 2015 03:08:26 GMT'), ('content-type', 'application/xml')]
     Error Body:
     <? xml version="1.0" encoding="UTF-8"? >
     <Error> 
       <Code>AccessDenied</Code>
       <Message>Access denied by authorizer's policy.</Message> 
       <RequestId>564A9A2A1790CF0F53C15C82</RequestId>
       <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
     </Error>
     Error Status:
     403
     put Failed!

    ファイルのアップロードは失敗ししています。 原因は引き受けたロールにダウンロード権限しかないためです。

一時的な権限を使用したアップロード

これより、STS を使用してファイルをアップロードします。 手順は次のとおりです。

  1. STS の一時的な認証情報を取得します。 アプリユーザーは usr001 です。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $python ./sts.py AssumeRole RoleArn=acs:ram::1894xxxxxx722283:role/ramtestappwrite RoleSessionName=usr001 Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":["oss:PutObject"],"Resource":["acs:oss:*:*:ram-test-app/usr001/*"]}]}' --id=oOhue******Frogv --secret=OmVwFJO3qcT0******FhOYpg3p0KnA
     https://sts.aliyuncs.com/?SignatureVersion=1.0&Format=JSON&Timestamp=2015-11-17T03%3A16%3A10Z&RoleArn=acs%3Aram%3A%3A1894xxxxxx722283%3Arole%2Framtestappwrite&RoleSessionName=usr001&AccessKeyId=oOhu******3Frogv&Policy=%7B%22Version%22%3A%221%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Action%22%3A%5B%22oss%3APutObject%22%5D%2C%22Resource%22%3A%5B%22acs%3Aoss%3A%2A%3A%2A%3Aram-test-app%2Fusr001%2F%2A%22%5D%7D%5D%7D&SignatureMethod=HMAC-SHA1&Version=2015-04-01&Signature=Y0OPUoL1PrCqX4X6A3%2FJvgXuS6c%3D&Action=AssumeRole&SignatureNonce=8d0798a8-8cd9-11e5-9f49-008cfa5e4938
     {
       "AssumedRoleUser": {
         "Arn": "acs:ram::1894xxxxxx722283:role/ramtestappwrite/usr001", 
         "AssumedRoleId": "355407847660029428:usr001"
       }, 
       "Credentials": {
         "AccessKeyId": "STS.rtfx13******NlIJlS4U", 
         "AccessKeySecret": "2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM", 
         "Expiration": "2015-11-17T04:16:10Z", 
         "SecurityToken": "CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl  100%"
       }, 
       "RequestId": "19407707-54B2-41AD-AAF0-FE87E8870B0D"
     }
  2. アップロードとダウンロードに認証情報を使用できるかどうかをテストします。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd get oss://ram-test-app/test.txt test.txt --host=oss-cn-hangzhou.aliyuncs.com -i STS.rtfx13******NlIJlS4U -k 2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM --sts_token=CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl  100%
     Error Headers:
     [('content-length', '254'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A9C31FFFC811F24B6E7E3'), ('date', 'Tue, 17 Nov 2015 03:17:05 GMT'), ('content-type', 'application/xml')]
     Error Body:
     <?  xml version="1.0" encoding="UTF-8"? >
     <Error>
       <Code>AccessDenied</Code>
       <Message>Access denied by authorizer's policy.</Message> 
       <RequestId>564A9C31FFFC811F24B6E7E3</RequestId>
       <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
     </Error> 
     Error Status:
     403
     get Failed!
     [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd put test.txt oss://ram-test-app/test.txt --host=oss-cn-hangzhou.aliyuncs.com -i STS.rtfx13******NlIJlS4U -k 2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM --sts_token=CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl  100%
     100% Error Headers:
     [('content-length', '254'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A9C3FB8DE437A91B16772'), ('date', 'Tue, 17 Nov 2015 03:17:19 GMT'), ('content-type', 'application/xml')]
     Error Body:
     <?  xml version="1.0" encoding="UTF-8"? >
     <Error> 
       <Code>AccessDenied</Code>
       <Message>Access denied by authorizer's policy.</Message> 
       <RequestId>564A9C3FB8DE437A91B16772</RequestId>
       <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
     </Error> 
     Error Status:
     403
     put Failed!

    test.txt のアップロードは失敗しています。 本ページの冒頭で説明した、入力済みのポリシーは、次のようにフォーマットされています。

    {
         "Version": "1",
             "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "oss:PutObject"
                     ],
                 "Resource": [
                     "acs:oss:*:*:ram-test-app/usr001/*"
                     ]
             }
         ]
     }

    このポリシーは、ユーザーが "usr001/" のようなファイルを ram-test-app バケットにアップロードすることのみ許可されていることを示します。 アプリユーザーが usr002 の場合、ポリシーでは "usr002/" のようなファイルのアップロードのみを許可するように変更することができます。 各アプリユーザーにそれぞれ異なるポリシーを設定することで、アプリユーザーごとのストレージ容量を分けることができます。

  3. テストを再試行し、アップロード先を ram-test-app/usr001/test.txt として指定します。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd put test.txt oss://ram-test-app/usr001/test.txt --host=oss-cn-hangzhou.aliyuncs.com -i STS.rtfx13******NlIJlS4U -k 2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM --sts_token=CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl  100%
     100%  
     Object URL is: http://ram-test-app.oss-cn-hangzhou.aliyuncs.com/usr001%2Ftest.txt
     Object abstract path is: oss://ram-test-app/usr001/test.txt
     ETag is "946A0A1AC8245696B9C6A6F35942690B" 
     0.071(s) elapsed

    アップロードは成功しています。

まとめ

このセクションでは、STS を使用して OSS に対する一時的なアクセス許可をユーザーに付与する方法について説明しています。 一般的なモバイル開発のシナリオでは、多数のアプリユーザーがアプリにアクセスする必要がある場合、STS を使用することで OSS にアクセスするための一時的な許可を付与することができます。 一時的な許可では、権限の漏洩によって引き起こされるリスクを大幅に減らすため、有効期限を設定することができます。 一時的な許可を取得する場合、アプリのユーザーごとに異なる権限付与ポリシーを入力することで、アクセス許可を制限することができます。 たとえば、ユーザーがアクセス可能なオブジェクトパスの制限があります。 オブジェクトパスに制限をかけることにより、アプリユーザーごとのストレージスペースを分けることができます。