Posted at

AlibabaCloudのRAMロールってどんなの?

More than 1 year has passed since last update.


はじめに

AlibabaCloudのRAMロールに触れます。


ドキュメントはこちら

ロール - ユーザーガイド| Alibaba Cloud ドキュメントセンター


ユーザーとの違い

ドキュメントには下記のとおり記載があります。


RAM ロールと通常の RAM ユーザーの違い

RAM ロールは権限が付与された実際のユーザーが引き受ける必要があります。ロールを引き受けると、実際のユーザーは、この RAM ロールの一時セキュリティトークンを受け取ります。これにより、この一時セキュリティトークンを使用して、ロールに許可されているリソースにアクセスできます。


ここの段階で、理解できるといいのですが!

なかなか難解です。


まず、ロールを作成してみましょう

a9381f72.png

264b2044.png

今回はユーザーロールを指定します。

01eeb580.png

cc2e365a.png

5d13d51f.png

b2d9f4a3.png

69c6e2e3.png

36adc7db.png

7a2e3ff5.png

これで、AdministratorAccessの権限が付与された

pocRoleというユーザーロールが完成しました。

一覧の管理から見ると、基本情報にパーミッションぽいのがあります。

1b1eb8de.png

7ceb3c43.png


ロールを使ってみる


RAM ロールを使用する API アクセス


ドキュメントにあるこちらを試してます。


API アクセスのおさらい

クラウドサービスへのアクセス(取得、作成、更新、削除、管理など)いわゆる操作は API を使用してます。

CLIやSDKは、このAPIを使ってます。


インスタンスにRAMロールをアタッチ

Use the instance RAM role in the console - User Guide| Alibaba Cloud Documentation Center

インスタンスにRAMロールをアタッチしたいのですが

3. Attach an instance RAM role

が、コンソールから見当たりません。 (; _ ;)

ここで、CLIを使ってアタッチします。

AlibabaCloudのAuto Scaling x SLBをやってみる(ROS版)

でインスタンスを起動します。


インスタンスIDを取得

[f_prg@aliyun] $ aliyun ecs DescribeInstances|jq '.Instances.Instance[].InstanceId'

"i-6we1wb28gzq9m0mnqw8u"
"i-6we1wb28gzq9m0mnqw8t"


ロール名を取得

[f_prg@aliyun] $ aliyun ram ListRoles|jq '.Roles.Role[].RoleName'

"AliyunDTSDefaultRole"
"AliyunEHPCDefaultRole"
"AliyunEMRDefaultRole"
"AliyunESSDefaultRole"
"AliyunMTSDefaultRole"
"pocRole"


ECSにロールをアタッチします。

[f_prg@aliyun] $ aliyun ecs AttachInstanceRamRole --RamRoleName=pocRole --InstanceIds="['i-6we1wb28gzq9m0mnqw8u','i-6we1wb28gzq9m0mnqw8t']"

ERROR: SDK.ServerError
ErrorCode: InvalidRamRole.NotEcsRole
Recommend:
RequestId: 057FA38D-2375-46F3-B4C7-B77FF2FAAD35
Message: The specified ram role is not authorized for ecs, please check your role policy.

できませんでした。

pocRoleはただ作っただけの状態です。

ECSに対しての許可がありませんので、付与します。


基本情報ポリシーを変更する

7ceb3c43.png

の基本情報ポリシーを変更します。

作成したときのポリシーは下記の通りです。

{

"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::XXXXXXXXXXXXXXXX:root"
]
}
}
],
"Version": "1"
}

これに

        "Service": [

"ecs.aliyuncs.com"
]

を追加して

{

"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::XXXXXXXXXXXXXXXX:root"
],
"Service": [
"ecs.aliyuncs.com"
]
}
}
],
"Version": "1"
}

に編集します。


再びポリシーをアタッチします

[f_prg@aliyun] $ aliyun ecs AttachInstanceRamRole --RamRoleName=pocRole --InstanceIds="['i-6we1wb28gzq9m0mnqw8u','i-6we1wb28gzq9m0mnqw8t']"

{"TotalCount":2,"RequestId":"C8C8E3D7-A0E2-4179-988B-BBFFB69AC061","AttachInstanceRamRoleResults":{"AttachInstanceRamRoleResult":[{"Message":"success","InstanceId":"i-6we1wb28gzq9m0mnqw8u","Code":"200"},{"Message":"success","InstanceId":"i-6we1wb28gzq9m0mnqw8t","Code":"200"}]},"FailCount":0,"RamRoleName":"pocRole"}


サーバにログインします


メタデータでロールを確認します

[root@iz6we1wb28gzq9m0mnqw8uz ~]# curl http://100.100.100.200/latest/meta-data/ram/security-credentials/

pocRole


Alibaba Cloud CLI(Linux)をセットアップします

[root@iz6we1wb28gzq9m0mnqw8uz ~]# curl -o cli.tgz http://aliyun-cli.oss-cn-hangzhou.aliyuncs.com/aliyun-cli-linux-3.0.2-amd64.tgz?spm=a21mg.p38356.a3.4.6cec77b9VgqXFa&file=aliyun-cli-linux-3.0.2-amd64.tgz

[root@iz6we1wb28gzq9m0mnqw8uz ~]# tar vxzf cli.tgz
[root@iz6we1wb28gzq9m0mnqw8uz ~]# mv aliyun /usr/bin
[root@iz6we1wb28gzq9m0mnqw8uz ~]# which aliyun
/usr/bin/aliyun


Alibaba Cloud CLI のconfigureを設定します。

[root@iz6we1wb28gzq9m0mnqw8uz ~]# aliyun configure

Configuring profile '' in '' authenticate mode...
Access Key Id []:
Access Key Secret []:
Default Region Id []: ap-northeast-1
Default Output Format [json]: json (Only support json))
Default Language [zh|en] en:
Saving profile[] ...Done.
-----------------------------------------------
!!! Configure Failed please configure again !!!
-----------------------------------------------
AccessKeyId/AccessKeySecret is empty! run `aliyun configure` first
-----------------------------------------------
!!! Configure Failed please configure again !!!
-----------------------------------------------

アクセスキー/シークレットキーがないので、失敗します。


configファイルを編集します

GitHub - aliyun/aliyun-cli: Universal Command Line Interface for Alibaba Cloud

~/.aliyun/config.json



AKEcsRamRoleに変更します。

[root@iz6we1wb28gzq9m0mnqw8uz ~]# sed -i -e s/"AK"/"EcsRamRole"/g ~/.aliyun/config.json


CLIを実行して見ます

ECSにアタッチしたロール

pocRoleで

ecsのDescribeInstances APIにアクセスできるようになります。

[root@iz6we1wb28gzq9m0mnqw8uz ~]# aliyun ecs DescribeInstances

{"PageNumber":1,"TotalCount":2,"PageSize":10,"RequestId":


まとめ

アクセスキー/シークレットキーを埋め込んで

下記の記事のようにイメージを作成しますと

アクセスキーやシークレットキーの変更が発生したときに

修正作業が大変になります。

AlibabaCloudでカスタムイメージを作成してみた

ECSにロールを付与する形だと、フレキシブルな対応ができますので、こちらをオススメします。


おまけ

jqのフィルタのチェックは

jq play

がオススメです。