このトピックでは、Resource Access Management (RAM) ロールのSecurity Token Service (STS) トークンを使用して、アプリケーションにAlibaba Cloudリソースへのアクセスを許可する方法について説明します。
背景情報
企業がElastic Compute Service (ECS) インスタンスを購入し、これらのECSインスタンスにアプリケーションをデプロイしたいと考えています。 アプリケーションは、他のAlibaba Cloudサービスのオペレーションを呼び出すためにAccessKeyペアを使用する必要があります。
この場合、企業は次のいずれかの方法を使用できます。
AccessKeyペアをアプリケーションコードに含めます。
AccessKeyペアをアプリケーションの設定ファイルに保存します。
ただし、上記の方法を使用すると、次の問題が発生する可能性があります。
AccessKeyペアの開示: AccessKeyペアがECSインスタンスに平文で保存されている場合、スナップショットとイメージが共有された後、またはイメージからECSインスタンスが作成された後に、AccessKeyペアが開示される可能性があります。
複雑なO&M: AccessKeyペアはECSインスタンスに保存されます。 AccessKeyペアのローテーションまたはユーザーIDの変更によりAccessKeyペアが変更された場合、すべてのECSインスタンスとイメージを更新して再デプロイする必要があります。 これにより、ECSインスタンスとイメージの管理が難しくなります。
解決策
上記の問題を解決するために、企業はRAMを使用してECSインスタンスの権限を管理できます。 RAMは、特定のポリシーが付与されたRAMロールを各ECSインスタンスに割り当てることができるリソースアクセス制御サービスです。 アプリケーションは、特定のRAMロールのSTSトークンを使用してAlibaba Cloud操作を呼び出すことができます。
手順
エンタープライズは、MyApplicationRoleという名前のRAMロールを作成します。
説明Alibaba Cloud Serviceが信頼できるエンティティとして選択され、Elastic Compute Serviceが信頼できるサービスとして選択されます。 これにより、ECSはRAMロールを引き受け、Alibaba Cloudリソースにアクセスできます。
詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。
エンタープライズは、必要なポリシーをRAMロールにアタッチします。
詳細については、「RAMロールへの権限の付与」をご参照ください。
説明STSトークンが必要な権限を付与できない場合、企業はビジネス要件に基づいてRAMロールにポリシーをアタッチできます。 ポリシーがアタッチされると、STSトークンにアタッチされている権限は、特定のECSインスタンスを再起動する必要なく、すぐに有効になります。
エンタープライズはAlibaba Cloudアカウントを使用してRAMユーザーを作成します。
詳細については、「RAM ユーザーの作成」をご参照ください。
エンタープライズは、必要なポリシーをRAMユーザーにアタッチします。
RAMユーザーが管理者と同じ責任を持つ場合、
AdministratorAccess
ポリシーをRAMユーザーにアタッチする必要があります。RAMユーザーが管理者と異なる責任を持つ場合、企業はRAMコンソールで次のカスタムポリシーを作成し、そのポリシーをRAMユーザーにアタッチする必要があります。
{ "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram:*:*:role/MyApplicationRole" //Replace MyApplicationRole with the name of the RAM role. } ], "Version": "1" }
説明ECSインスタンスのRAMロールを設定できるのは、許可されたRAMユーザーのみです。 これにより、RAMロールの悪用が防止されます。
ECSインスタンスのみを管理できるRAMユーザーがECSインスタンスの作成とRAMロールの設定を試みると、ECSはRAMユーザーがramロールに対して
RAM: PassRole
操作を実行できるかどうかを確認します。 RAMユーザーが許可されていない場合、ECSインスタンスの作成に失敗します。
詳細については、「RAM ユーザーへの権限の付与」をご参照ください。
ステップ3で作成されたRAMユーザーは、ステップ1で作成されたRAMロールを特定のECSインスタンスに割り当てます。
詳細については、「インスタンスRAMロールを使用した他のAlibaba CloudサービスへのECSアクセスの付与」をご参照ください。
ECSは、ECSインスタンスのメタデータにSTSトークンを含め、そのメタデータをECSインスタンスにデプロイされているアプリケーションに送信します。
Linuxシステムでは、アプリケーションはインスタンスメタデータを照会して、STSトークンとその有効期間を取得できます。 詳細については、「インスタンスRAMロールを使用した他のAlibaba Cloudリソースへのアクセス」をご参照ください。
リクエストのサンプル
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/MyApplicationRole
レスポンスの例
{ "AccessKeyId": "STS.J8XXXXXXXXXX4", "AccessKeySecret": "9PjfXXXXXXXXXBf2XAW", "Expiration": "2017-06-09T09:17:19Z", "SecurityToken": "CAIXXXXXXXXXXXwmBkleCTkyI+", "LastUpdated": "2017-06-09T08:17:19Z", "Code": "Success" }
アプリケーションがAlibaba Cloud SDKを使用している場合、SDKはECSインスタンスメタデータからRAMロールのSTSトークンを自動的に取得できます。 SDKでは、AccessKeyペア関連の設定は必要ありません。
説明ほとんどの場合、STSトークンは1時間有効です。 STSトークンが有効な場合、アプリケーションはAlibaba Cloud操作を呼び出すことができます。 STSトークンの有効期限が切れる前に、トークンはECSによって更新されます。
アプリケーションはSTSトークンを使用してAlibaba Cloud操作を呼び出します。
Function ComputeやMaxComputeなどの他のAlibaba Cloudサービスにデプロイされたアプリケーションは、RAMロールのSTSトークンを使用してAlibaba Cloud操作を呼び出すこともできます。