本ページでは、Alibaba Cloud RAM を使用して、アプリケーションが RAM ロールの動的 STS トークンを取得することによって Alibaba Cloud API にアクセスできるようにする方法について説明します。
シナリオ
- AccessKeys をコードに埋め込みます。
- AccessKeys をアプリケーションの設定ファイルに保存します。
- AccessKey の開示 : AccessKey がプレーンテキストで ECS インスタンスに埋め込まれていると、スナップショットの共有、または共有イメージインスタンスを作成するイメージが原因で誤って別のユーザーに公開される可能性があります。
- O&M の複雑化 : AccessKey が変更 (AccessKey のローテーションまたはユーザー ID の変更により) されると、AccessKey が ECS インスタンスに存在するため、すべてのインスタンスとイメージを更新して再デプロイする必要があります。 その結果、インスタンスとイメージの管理が非常に複雑になります。
ソリューション
ECS インスタンスの RAM ロールを設定
- 管理者は Alibaba Cloud アカウントを使用して ECS インスタンスの RAM ロールを作成し、適切なポリシーを RAM ロールに添付します。
注 ECS インスタンスの RAM ロールは、ユーザーによって作成され、許可後ユーザーの ECS インスタンスによって使用される一種の RAM サービスロールです。
- 管理者は ECS インスタンスを起動し、RAM ロールを設定します。
- (i) ECS は、設定された RAM ロールに従って AssumeRole API を呼び出して STS にアクセスし、RAMロールの STS トークンを取得するリクエストを送信します。
- (ii) STS は ECS の ID と RAM ロールに添付されるポリシーを検証します。 検証が成功すると、STS トークンが発行されます。 検証に失敗すると、リクエストは拒否されます。
詳細は、「コンソールでのインスタンス RAM ロールの使用」または「API 呼び出しによるインスタンス RAM ロールの使用」をご参照ください。
- STS トークンを取得すると、ECS インスタンスはメタデータサービスを介して STS トークンをアプリケーションに提供します。
たとえば Linux では、STS トークンやその有効期間などのメタデータ情報の取得時に以下のコマンドを使用できます。
$ curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<roleName>
注- STS トークンが有効期間内であればアプリケーションは Alibaba Cloud API を呼び出すことができます。 STS トークンは通常 1 時間後に期限切れになります。 ECS は、期限が切れる前に STS トークンを自動的に更新します。
- STS トークンに対応する権限がない場合、管理者は関連するポリシーを RAM ロールに添付する必要があります。
- RAM ロールに関連付けられているポリシーが更新された後、STS トークンに関連付けられている権限が即時有効になり、ユーザーは ECS インスタンスを再起動する必要はありません。
- アプリケーションは STS トークンを使用して Alibaba Cloud API を呼び出します。
注 アプリケーションが Alibaba Cloud SDK を使用している場合、Alibaba Cloud SDK は ECS メタデータサービスから RAM ロールの STS トークンを取得でき、開発者は SDK に AccessKey 関連の機密情報を設定する必要はありません。
詳細は、「RamRole を設定して ECS インスタンスへの AccesKey 以外のアクセスを実現 (Configure RamRole to achieve non-AccesKey access to ECS instances)」をご参照ください。
管理者と一般ユーザーの権限を分ける
- ECS は、RAM ユーザー (たとえば ECS へのアクセス権しかなく RAM 権限管理者ではない RAM ユーザー) が ECS インスタンスを作成して RAM
ロールを設定する前に、その RAM ユーザーに RAM ロールの
ram:PassRole
権限があるかどうかチェックします。 権限が見つからない場合、RAM ユーザーは ECS インスタンスを作成できません。 - ECS インスタンスの RAM ロールを設定できるのは許可ユーザーだけです。 このように RAM ロールの使用は厳密に管理されているため、権限の悪用を防止できます。
管理者と一般ユーザーの権限を分けるには、ECS インスタンスの RAM ロールを設定し、一般ユーザーに PassRole
権限を付与 (上記の図のステップ 1.5 を参照) する必要があります。
ロール名
は RAM 名に置き換える必要があります。
{
"Statement": [
{
"Effect": "Allow",
"Action": "ram:PassRole",
"Resource": "acs:ram:*:*:role/<rolename>"
}
],
"Version": "1"
}
次のステップ
Alibaba Cloud RAM が権限アプリケーションのすべての要件を満たしていない場合は、アクセス制御機能を提供する Function Compute および MaxCompute など他の Alibaba Cloud サービスを使用して、クラウド上のユーザーやアプリケーションの ID と AccessKey を管理できます。