調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

AWS ChaliceでDeployする時にiam Roleでてこずった話

目次

何がしたかったの?


こちらのハンズオン
www.youtube.com

全部で1時間ほどある。

ChalisはAWS APIGateway, Lambdaを利用するアプリケーションを迅速にデプロイすることができる。

ということで。ただデプロイしたかったのだ。
だが、導入を除いて最初の最初の4コマンド目ぐらいで盛大につまずいたので同じようにつまずいた人の助けになればと思って書いている。

何につまずいたの?

冒頭から、やることは
pip install chalice
chalice new-project examples
cd examples
chalice deploy <- ここ。
はやくね。たったの4コマンド。

前述の動画よりサラーっとながされてた
API Gateway, Lambdaへのアクセスが可能になっていること」が満たせていなかったのだ。

※Docker For Windows10でpython3のイメージで確認しました。

API Gateway, Lambdaは入れたよ?


そう。個人的に難解&難解なIAMのポリシーについて、
両サービスについては過剰かもしれないけどFullAccessで付与しておいた。原因はエラーを見る限り別のようだった

An error occurred (AccessDenied) when calling the CreateRole operation: User:
arn:aws:iam::[user_id]:user/chalice is not authorized to perform:
iam:CreateRole on resource: arn:aws:iam::977987134505:role/example-dev

iamに関するエラーということだけはわかった。
「iam:CreateRole」ができないんだ。そんな感じだよ。という風なとこまではギリギリ解釈できた。
それっぽいものねーかなーと漁っていたらここにたどり着いた
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_create_for-service.html
ほうほう。なんかそれらしき記述もある。ここにならって、
使ってるユーザーが所属しているグループのインラインポリシーを追加してみた。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole"
            ],
            "Resource": "arn:aws:iam::*:role/*"
        }
    ]
}

そして、再度Chalice deploy

An error occurred (AccessDenied) when calling the PutRolePolicy operation:
User: arn:aws:iam::[user-id]:user/chalice is not authorized to perform:
iam:PutRolePolicy on resource: role example-dev

エラーはかわったけど。けどだってば。はーん。

resourceがよくわからないので困り果ててた


前のCreateRoleの時は、エラーにきっちりResourceがでてて、それ追加したらえんやな。
ということでJsonもかけた。(Resourceのところが相当。*はワイルドカード
けど、2回目のエラーはなんか毛色が違うぞ。頼りにしていたresourceのところの情報がなんかおかしい。
とりあえず「user」とかあるし、こんな感じでいかんだろうか。
ということで以下を適用してみた

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PutRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:user/*"
            ]
        }
    ]
}

エラーはかわらずであった。 user/のところをrole/にしても効果なし。意味わからん。わからんわからん。
という状態なったので、とりあえず切り分けのためにリソースを「*」指定で全開放してみた。
つまりこう。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PutRolePolicy"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

すると

Resources deployed:

とか出たのでどうやらうまくデプロイできた様子。
ということはリソースの指定がおかしいのか。。。としてこんな風にやってみた。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PutRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:role/*",
                "arn:aws:iam::*:user/*"
            ]
        }
    ]
}

で、もう一度 Chalice Deploy. カモン!

Resources deployed:

やったぜ。ということでなんとかある程度最小の権限で
無事デプロイの権限を付与することができた。これどこみたらもっと解決が早かったんだろう。
スゲー悩みながらやっていた。ハンズオンおそるべし。

まとめ

Chalice Deployには「 "iam:CreateRole"」「 "iam:PutRolePolicy"」アクションの権限が必要
・「 "iam:CreateRole"」はroot/
・「 "iam:PutRolePolicy"」はroot/とuser/の両方がが必要。
ということで、もし詰まった人がいたら試してみてください。
もっとましな(というか正攻法)があるなら教えてください。

おわり。