このトピックでは、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にアクセスできます。
モバイルアプリは、アプリサーバーからSTSトークンを要求します。
企業はAlibaba Cloudアカウントを使用してRAMロールを作成し、ロールに必要な権限を付与します。
詳細については、「RAMロールの作成と必要なポリシーのロールへのアタッチ」をご参照ください。
エンタープライズは、Alibaba Cloudアカウントを使用してアプリサーバーのRAMユーザーを作成し、アプリサーバーがRAMロールを引き受けることを許可します。
詳細については、「RAMユーザーの作成とRAMロールの引き受け許可」をご参照ください。
アプリサーバーは、STS AssumeRole操作を呼び出して、RAMロールのSTSトークンを取得します。
詳細については、「RAMロールのSTSトークンの取得」をご参照ください。
アプリサーバーは、RAMロールにアタッチされたポリシーよりも少ない権限を持つSTSトークンを要求できます。 これにより、アプリサーバーはモバイルアプリからOSSへのアクセスを制御します。
詳細については、「RAMロールにアタッチされたポリシーよりも少ない権限を持つSTSトークンのリクエスト」をご参照ください。
モバイルアプリはSTSトークンを使用して、OSSにデータを直接アップロードまたはOSSからデータをダウンロードします。
詳細については、「STSトークンを使用したOSSへのアクセス」をご参照ください。
RAMロールを作成し、必要なポリシーをロールにアタッチする
このセクションで企業が使用するAlibaba CloudアカウントのIDは123456789012****
です。
エンタープライズは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" }
Alibaba Cloudアカウントを使用して、
AliyunOSSFullAccess
ポリシーをRAMロールoss-objectmanager
にアタッチします。 AliyunOSSFullAccessポリシーは、OSSの管理権限を付与します。詳細については、「RAMロールへの権限の付与」をご参照ください。
RAMユーザーを作成し、ユーザーがRAMロールを引き受けることを許可する
企業はAlibaba Cloudアカウントを使用して、
appserver
という名前のRAMユーザーを作成します。詳細については、「RAM ユーザーの作成」をご参照ください。
Alibaba Cloudアカウントを使用して、
AliyunSTSAssumeRoleAccess
ポリシーをRAMユーザーにアタッチします。 次に、RAMユーザーはRAMロールを引き受けることができます。詳細については、「RAM ユーザーへの権限の付与」をご参照ください。
RAMロールのSTSトークンの取得
アプリサーバーは、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トークンのリクエスト」をご参照ください。STSサービスはSTSトークンをアプリサーバーに送信します。 STSトークンには、
AccessKeyId
、AccessKeySecret
、および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へのアクセス
アプリサーバーはSTSトークンをモバイルアプリに送信します。
モバイルアプリは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