はじめに
AlibabaCloudのRAMロールに触れます。
ドキュメントはこちら
ロール - ユーザーガイド| Alibaba Cloud ドキュメントセンター
ユーザーとの違い
ドキュメントには下記のとおり記載があります。
RAM ロールと通常の RAM ユーザーの違い
RAM ロールは権限が付与された実際のユーザーが引き受ける必要があります。ロールを引き受けると、実際のユーザーは、この RAM ロールの一時セキュリティトークンを受け取ります。これにより、この一時セキュリティトークンを使用して、ロールに許可されているリソースにアクセスできます。
ここの段階で、理解できるといいのですが!
なかなか難解です。
まず、ロールを作成してみましょう
これで、AdministratorAccessの権限が付与された
pocRoleというユーザーロールが完成しました。
一覧の管理から見ると、基本情報にパーミッションぽいのがあります。
ロールを使ってみる
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に対しての許可がありませんので、付与します。
基本情報ポリシーを変更する
の基本情報ポリシーを変更します。
作成したときのポリシーは下記の通りです。
{
"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
の
AKをEcsRamRoleに変更します。
[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":
まとめ
アクセスキー/シークレットキーを埋め込んで
下記の記事のようにイメージを作成しますと
アクセスキーやシークレットキーの変更が発生したときに
修正作業が大変になります。
ECSにロールを付与する形だと、フレキシブルな対応ができますので、こちらをオススメします。
おまけ
jqのフィルタのチェックは
jq play
がオススメです。