病みつきVPoEブログスマートフォン用の表示で見る病みつきVPoEブログ機械学習、Python、Scala、JavaScript、などなどこの広告は、90日以上更新していないブログに表示しています。Management)は、AWSの各種サービスに対してのアクセス制御を(結構細かく)設定するためのシステムです。いくつか掛けられる制約にも制限があり、いろいろハマるところがあったので、メモを。シナリオJenkins経由で、特定のAMIからのみ、EC2インスタンスを一時的に立ち上げたり(run-instances)、消したりしたい(terminate-instances)。停止(stop-instances)したり再開(start-instances)したり、というライフサイクルではない。誤って全然関係ないインスタンスを消せないように制約をつけたいし、関係ないAMIから立ちあげられないように制限したい。ついでにインスタンスタイプにしぼりたい。安全のため特定のIPからのみアクセスできるようにしたい。このようなシナリオでも、一応それっぽい権限で設定することができます。IAMポリシーファイルの説明IAMのポリシーファイルは、下記のような感じです。許可するのか拒否するのか。何のアクションを許可|拒否するのか。]}Statementが配列なので、いっぱい増やしていく感じ。リソース指定できるアクションに制約があるリソース指定によってIAMに制約をかけられる・・・と思いきや、全てのアクションがリソース指定できるわけではありません。DescribeInstancesなどのGET系はだいたいダメで、他にもCreateTagsもダメです。その一覧はこちら下記のようなresource指定してしまうと、そのStatementは無効になり、その操作は許可されなくなってしまいます。NGな例}アクションとリソースと条件の組み合わせに制約があるここに書いてある通りですが、アクションごとに指定できるリソースに種類があり、リソースごとに指定できる条件キーが決まっています。TerminateInstancesのアクションは、インスタンスIDに関するリソースのみ指定できます。RunInstancesはイメージ、インスタンス、キーペア、etc。逆に、指定しないとそのリソースを使うことはできません。既存のキーペアを使ってインスタンスを作成したいなら、キーペアに対するリソース指定が必要になります。RunInstancesのように複数のリソース指定をする場合に注意が必要なのが、複数のリソースで設定できる条件キーが異なることです。イメージには「InstanceType」を指定できますが、キーペアには「Region」しか指定できません。そのため、次のような設定をすると、「このキーペアにアクセスできないよ><」って言われます。}}この場合は、おとなしく2つのStatementに分割します。]}このシナリオを「リソースタグ」でクリアするのは厳しいAWSのブログにて言及されていますが、リソースタグを活用すれば「特定のAMIから、特定のタグを設定したインスタンスを作成し、特定のタグのインスタンスのみ削除できる」ということができそうです(まぁできないんですけど)。できるStatementの2つを作る、という感じ。しないといけないのですが、CreateTagsアクションにはリソース条件などが設定できないのです(=全許可しかできない)。ブログでもコメント欄で突っ込まれています。ライフサイクルであれば、この方式は良さそうです。今回の場合は、インスタンスは消し去りたかったので、この方式は取れませんでした。いう条件キーもあります。指定する場合は、一番最初にDenyしておくと良いです。}}一点注意点なのが、IPはグローバルIPとして展開されます。EC2インスタンス上からのみ「俺をTerminateしてくれ」という処理をできるように制限したい場合、グローバルIPが事前にわかっていないといけません。Simulatorは正直使いづらいです。条件に合致しないときには、「何も一致しませんでした」としか言われません。何がダメだったのかもわからないです。CLIから実際にdry-runすると良いです。t2.microこうすると、権限が不足してれば、エンコードされたエラーメッセージが出てきます。参考に、resourceという項目を見ると良いです。このresourceに対して、適切な条件が設定されていない、ということがわかります。zshの場合は、こんな感じで関数作るとデバッグが楽です(bashは知らん)。結局、うまくTerminateInstancesの条件を指定できないため、TerminateInstancesの権限を与えるのはやめました。代わりに、次の手段を取りました。しなくても、shutdownするだけで同じことができます。最終的なポリシーファイルは、下記のような感じ。思い出しながら書いてるからいろいろ間違っているかもしれんけど。Lambdaでサーバーレス楽しんでるみなさん。なるプロジェクト(JAMstack)を作るベストプラクティス月別アーカイブはてなブログをはじめよう!yamitzkyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。