すべてのプロダクト
Search
ドキュメントセンター

Resource Access Management:STSトークンを使用してモバイルアプリにAlibaba Cloudリソースへのアクセスを許可する

最終更新日:Oct 31, 2024

このトピックでは、Alibaba Cloudリソースへのアクセスをモバイルアプリに許可するために、Resource Access Management (RAM) ロールのSecurity Token Service (STS) トークンを使用する方法について説明します。

背景情報

企業がモバイルアプリを開発し、Object Storage Service (OSS) を有効化します。 モバイルアプリはモバイルデバイスで実行されます。 これらのモバイルデバイスは企業によって制御されていません。 企業は、モバイルアプリに必要な権限を付与する必要があります。 その後、モバイルアプリはOSSにデータをアップロードしたり、OSSからデータをダウンロードしたりできます。

この企業での要件は以下のとおりです。

  • 直接データ送信: モバイルアプリはOSSにデータを直接アップロードまたはOSSからデータをダウンロードします。 企業のアプリサーバーは、モバイルアプリとOSSの間でデータを転送する必要はありません。

  • セキュリティ制御: AccessKeyペアはモバイルデバイスに保存されません。 モバイルデバイスはアプリユーザーによって制御され、信頼できるオペレーティング環境を提供できません。

  • リスク管理: セキュリティリスクを最小限に抑えます。 OSSへの直接アクセス中、各アプリクライアントは最小特権の原則に基づいて承認され、アクセス期間は厳密に制御されます。

解決策

モバイルアプリがOSSにデータを直接アップロードまたはOSSからデータをダウンロードする前に、モバイルアプリはアプリサーバーからアクセス資格情報を申請する必要があります。 アプリケーションサーバーがリクエストを受信すると、サーバーはRAMユーザーIDを使用してSTS AssumeRole操作を呼び出します。 呼び出しが成功すると、アプリケーションはSTSトークンを受信し、STSトークンをモバイルアプリに転送します。 その後、モバイルアプリはSTSトークンを使用してOSSにアクセスできます。

Authorize a mobile app to access Alibaba Cloud resources

  1. モバイルアプリは、アプリサーバーからSTSトークンを要求します。

  2. 企業はAlibaba Cloudアカウントを使用してRAMロールを作成し、ロールに必要な権限を付与します。

    詳細については、「RAMロールの作成と必要なポリシーのロールへのアタッチ」をご参照ください。

  3. エンタープライズは、Alibaba Cloudアカウントを使用してアプリサーバーのRAMユーザーを作成し、アプリサーバーがRAMロールを引き受けることを許可します。

    詳細については、「RAMユーザーの作成とRAMロールの引き受け許可」をご参照ください。

  4. アプリサーバーは、STS AssumeRole操作を呼び出して、RAMロールのSTSトークンを取得します。

    詳細については、「RAMロールのSTSトークンの取得」をご参照ください。

  5. アプリサーバーは、RAMロールにアタッチされたポリシーよりも少ない権限を持つSTSトークンを要求できます。 これにより、アプリサーバーはモバイルアプリからOSSへのアクセスを制御します。

  6. モバイルアプリはSTSトークンを使用して、OSSにデータを直接アップロードまたはOSSからデータをダウンロードします。

    詳細については、「STSトークンを使用したOSSへのアクセス」をご参照ください。

RAMロールを作成し、必要なポリシーをロールにアタッチする

このセクションで企業が使用するAlibaba CloudアカウントのIDは123456789012**** です。

  1. エンタープライズはAlibaba Cloudアカウントを使用して、oss-objectmanagerという名前のRAMロールを作成します。 Alibaba Cloudアカウントが信頼できるエンティティタイプとして選択されています。

    説明

    RAMロールが作成されると、現在のAlibaba Cloudアカウントが信頼できるアカウントとして選択されます。 これにより、アカウントに属するRAMユーザーのみがRAMロールを引き受けることができます。

    詳細については、「信頼できるAlibaba CloudアカウントのRAMロールの作成」をご参照ください。

    RAMロールが作成されると、エンタープライズは基本情報ページでロールに関する情報を表示できます。

    • この例では、RAMロールのAlibaba Cloudリソース名 (ARN) はacs:ram::123456789012****:role/oss-objectmanagerです。

    • 次のポリシーがRAMロールにアタッチされています。

      説明

      このポリシーは、企業のAlibaba Cloudアカウントに属するRAMユーザーのみがRAMロールを引き受けることができることを示します。

      {
          "Statement": [{
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "RAM": [
                      "acs:ram::123456789012****:root"
                  ]
              }
          }],
          "Version": "1"
      }
  2. Alibaba Cloudアカウントを使用して、AliyunOSSFullAccessポリシーをRAMロールoss-objectmanagerにアタッチします。 AliyunOSSFullAccessポリシーは、OSSの管理権限を付与します。

    詳細については、「RAMロールへの権限の付与」をご参照ください。

RAMユーザーを作成し、ユーザーがRAMロールを引き受けることを許可する

  1. 企業はAlibaba Cloudアカウントを使用して、appserverという名前のRAMユーザーを作成します。

    詳細については、「RAM ユーザーの作成」をご参照ください。

  2. Alibaba Cloudアカウントを使用して、AliyunSTSAssumeRoleAccessポリシーをRAMユーザーにアタッチします。 次に、RAMユーザーはRAMロールを引き受けることができます。

    詳細については、「RAM ユーザーへの権限の付与」をご参照ください。

RAMロールのSTSトークンの取得

  1. アプリサーバーは、RAMユーザーのAccessKeyペアを使用して、STSのAssumeRole操作を呼び出します。

    説明

    Alibaba Cloudアカウントではなく、RAMユーザーのAccessKeyペアを使用する必要があります。

    次の例は、Alibaba Cloud CLIを使用してAssumeRole操作を呼び出す方法を示しています。

    • リクエストの例

      aliyuncli sts AssumeRole --RoleArn acs:ram::123456789012****:role/oss-objectmanager --RoleSessionName client-001
    • レスポンスの例

      {
           "AssumedRoleUser": {
               "AssumedRoleId": "391578752573****:client-001", 
               "Arn": "acs:ram::123456789012****:role/oss-objectmanager/client-001"
           }, 
           "Credentials": {
               "AccessKeySecret": "93ci2umK1QKNEja6WGqi1Ba7Q2Fv9PwxZqtVF2Vy****", 
               "SecurityToken": "********", 
               "Expiration": "2016-01-13T15:02:37Z", 
               "AccessKeyId": "STS.F13GjskXTjk38dBY6YxJt****"
           }, 
           "RequestId": "E1779AAB-E7AF-47D6-A9A4-53128708B6CE"
       }
    説明

    この例では、Policyパラメーターが指定されていないため、返されたSTSトークンにはRAMロールoss-objectmanagerのすべての権限があります。 アプリサーバーは、RAMロールにアタッチされているポリシーよりも少ない権限を持つSTSトークンを要求することもできます。 詳細については、「RAMロールにアタッチされたポリシーよりも少ない権限を持つSTSトークンのリクエスト」をご参照ください。

  2. STSサービスはSTSトークンをアプリサーバーに送信します。 STSトークンには、AccessKeyIdAccessKeySecret、およびSecurityTokenの要素が含まれています。

    説明

    STSトークンSecurityTokenは短期間のみ有効です。 モバイルアプリがOSSへの長期間のアクセスを必要とする場合、アプリサーバーは定期的に新しいSTSトークンを要求する必要があります。 たとえば、アプリサーバーは1,800秒ごとに新しいSTSトークンを要求できます。

RAMロールにアタッチされたポリシーよりも少ない権限を持つSTSトークンをリクエストする

実際のシナリオでは、Policyパラメーターを指定して、RAMロールにアタッチされているポリシーよりも少ない権限でSTSトークンを付与することを推奨します。 最小の特権の原則に従ってください。 次に、Policyパラメーターを指定する例を示します。

この例では、返されたSTSトークンには、sample-bucket/2015/01/01/*.jpgパターンに一致するオブジェクトのみをダウンロードする権限があります。

  • リクエストの例

    aliyuncli sts AssumeRole --RoleArn acs:ram::123456789012****:role/oss-objectmanager --RoleSessionName client-002 --Policy "{\"Version\":\"1\", \"Statement\": [{\"Effect\":\"Allow\", \"Action\":\"oss:GetObject\", \"Resource\":\"acs:oss:*:*:sample-bucket/2015/01/01/*.jpg\"}]}"
    説明

    STSトークンのデフォルトの有効期間は3,600秒です。 DurationSecondsパラメーターを指定して、STSトークンの有効期間を制限できます。 詳細については、「AssumeRole」をご参照ください。

  • レスポンスの例

    {
       "AssumedRoleUser": {
           "AssumedRoleId": "391578752573****:client-002", 
           "Arn": "acs:ram::123456789012****:role/oss-objectmanager/client-002"
       }, 
       "Credentials": {
           "AccessKeySecret": "28Co5Vyx2XhtTqj3RJgdud4ntyzrSNdUvNygAj7x****", 
           "SecurityToken": "********", 
           "Expiration": "2016-01-13T15:03:39Z", 
           "AccessKeyId": "STS.FJ6EMcS1JLZgAcBJSTDG1****"
       }, 
       "RequestId": "98835D9B-86E5-4BB5-A6DF-9D3156ABA567"
    }

STSトークンを使用したOSSへのアクセス

  1. アプリサーバーはSTSトークンをモバイルアプリに送信します。

  2. モバイルアプリはSTSトークンを使用してOSSにアクセスします。

    次の例は、Alibaba Cloud CLIとSTSトークンを使用してOSSオブジェクトにアクセスする方法を示しています。

    • STSトークンの指定

      構文: aliyuncli oss Config -- host -- accessid -- accesskey -- sts_token

      aliyuncli oss Config --host oss.aliyuncs.com --accessid STS.FJ6EMcS1JLZgAcBJSTDG1**** --accesskey 28Co5Vyx2XhtTqj3RJgdud4ntyzrSNdUvNygAj7x**** --sts_token CAESnQMIARKAASJgnzMzlXVyJn4KI+FsysaIpTGm8ns8Y74HVEj0pOevO8ZWXrnnkz4a4rBEPBAdFkh3197GUsprujsiU78FkszxhnQPKkQKcyvPihoXqKvuukrQ/Uoudk31KAJEz5o2EjlNUREcxWjRDRSISMzkxNTc4NzUyNTczOTcyODU0KgpjbGllbnQtMDAxMKmZxIHBKjoGUnNhTUQ1Qn8KATEaegoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOkdldE9iamVjdBJICg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaLAoqYWNzOm9zczoqOio6c2FtcGxlLWJ1Y2tldC8yMDE1LzAxLzAxLyouanBnSgU0MzI3NFIFMjY4NDJaD0Fzc3VtZWRSb2xlVXNlcmAAahIzOTE1Nzg3NTI1NzM5NzI4NTRyCWVjcy1hZG1pbnjgxt7Cj/bo****
    • OSSへのアクセス

      aliyuncli oss Get oss://sample-bucket/2015/01/01/grass.jpg