この記事は セゾン情報システムズ Advent Calendar 2022 6日目の記事です。
はじめに
複数のEC2に同じIAMロールをアタッチしていて、そのなかの特定のEC2にだけ新たなIAMポリシーを適用したいときの方法です。(同じIAMロールを複数のEC2にアタッチしているという状況は変えません。)
IAMポリシーのCondition要素でEC2を指定することで、ポリシーを実行できるEC2を絞ることができます。
以下、S3バケットへのフルアクセスを許可するポリシー(を追加したIAMロール)を2台のEC2にアタッチした上で、片方のEC2のみがS3にアクセスできるようにしていきたいと思います。
IAMポリシーの作成
いきなりここが肝になりますが、以下のようにIAMポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:SourceInstanceARN": "arn:aws:ec2:(リージョンID):(アカウントID):instance/(インスタンスID)"
}
}
}
]
}
Condition要素で、StringEqualsの"ec2:SourceInstanceARN" 条件キーを設定することにより、指定したarnのEC2のみが許可されたアクションを実行できるようになります。
"ec2:SourceInstanceARN": "arn:aws:ec2:(リージョンID):(アカウントID):instance/(インスタンスID)"
上記右側の「arn」から始まる部分がEC2のarn(Amazon Resource Name)になりますが、調べた限りではAWSのコンソール画面やCLIからこれを直接確認する方法はありませんでした。
ARNの構文がAWS公式にありましたので、そちらを参考に上記のように(リージョンID)、(アカウントID)、(インスタンスID)をそれぞれ代入して自分で用意する必要があります。
(※サンプル:arn:aws:ec2:ap-northeast-1:123456789123:instance/i-012345a6789b01234)
このようにConditionを設定すると、仮にアタッチされたとしても、指定したEC2以外はこのポリシーによる許可(又は制限)を受けることはありません。
ポリシーの確認画面で、画像のように「このポリシーから付与されるアクセス権限はありません。・・・」とエラー表示のようなものが出ますが、こちらは問題ありません。
IAMロールにアタッチ
こちらは特別な操作はありませんので、ポリシーが必要なロールにアタッチしてください。
いざ確認
上記で作成したIAMポリシーがアタッチされた1つのIAMロールを、以下の2台にアタッチして、想定通りの動きをするか確認します。
〇検証用EC2インスタンス
①test1(allow) ※IAMポリシーで指定したEC2
②test2(deny)
⇒①test1(allow)ではS3にアクセスできて、②test2(deny)ではS3にアクセスできなければ検証は成功です!
test1(allow) ※IAMポリシーで指定したEC2
「aws s3 ls」コマンドでs3バケットの一覧を確認できたので、動作としては想定通りです。(OK!)
test2(deny)
同じく「aws s3 ls」コマンドでs3バケットの一覧を確認しようとしましたが、Access Deniedで拒否されました。
こちらも想定通りの動作ですね。(OK!!)
以上、お役に立てば幸いです。
ご覧いただきありがとうございました。