このトピックでは、モバイルアプリが Alibaba Cloud リソースにアクセスすることを承認するために、Resource Access Management (RAM) ロールのセキュリティトークンサービス (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 ロールを作成します。[クラウドアカウント] が信頼できるエンティティタイプとして選択されています。説明RAM ロールの作成時に、[現在のアカウント] が信頼できるエンティティとして選択されます。これにより、アカウントに属する RAM ユーザーのみが RAM ロールを引き受けることができます。
詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールを作成する」をご参照ください。
RAM ロールの作成後、企業は基本情報ページでロールに関する情報を表示できます。
この例では、RAM ロールの Alibaba Cloud Resource Name (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