10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

セゾン情報システムズAdvent Calendar 2022

Day 6

(AWS)IAMポリシーの実行を特定のEC2インスタンスに制限する

Last updated at Posted at 2022-12-05

この記事は セゾン情報システムズ 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以外はこのポリシーによる許可(又は制限)を受けることはありません。

image.png

ポリシーの確認画面で、画像のように「このポリシーから付与されるアクセス権限はありません。・・・」とエラー表示のようなものが出ますが、こちらは問題ありません。

IAMロールにアタッチ

こちらは特別な操作はありませんので、ポリシーが必要なロールにアタッチしてください。
ポリシーのアタッチ.png

いざ確認

上記で作成したIAMポリシーがアタッチされた1つのIAMロールを、以下の2台にアタッチして、想定通りの動きをするか確認します。

〇検証用EC2インスタンス
①test1(allow) ※IAMポリシーで指定したEC2
②test2(deny)
⇒①test1(allow)ではS3にアクセスできて、②test2(deny)ではS3にアクセスできなければ検証は成功です!

test1(allow) ※IAMポリシーで指定したEC2

test1.png

「aws s3 ls」コマンドでs3バケットの一覧を確認できたので、動作としては想定通りです。(OK!)

test2(deny)

image.png
同じく「aws s3 ls」コマンドでs3バケットの一覧を確認しようとしましたが、Access Deniedで拒否されました。
こちらも想定通りの動作ですね。(OK!!)

以上、お役に立てば幸いです。
ご覧いただきありがとうございました。

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?