☁️

EC2インスタンスにロールを割り当てて、AWS CLIの権限を設定するのをGUIでポチポチやる

2021/07/28に公開

はじめに

前回書いたブログの続きで、ミニマムなEC2インスタンスにロールをアタッチするユースケースのやってみたブログを書きます。

EC2のAmazon Linux 2の作成〜AWS CLI v2を入れるまでの手順 https://zenn.dev/katoaki/articles/b62306e233d9a4

前提

EC2インスタンスが作成済で、CLIのv2が入っていることを前提とします

やってみたこと

動作確認用のDynamoDB Tableを2つ作成

次の設定でテーブルを2つ作成しました。
マネジメントコンソール上から以下のようにテーブル名とキー設定だけ実施し、他はデフォルトのまま作成しています。

  • テーブル名:table1
    • パーティションキー:id
    • ソートキー:なし
  • テーブル名:table2
    • パーティションキー:id
    • ソートキー:なし

作成したテーブルにItemを入れておきます。
適当にidが1〜6のItemを作成しました。


IAMロールの作成

マネジメントコンソール上から、table1へのアクセスだけ拒否するロールを作成してみました。

ロールの新規作成

新規作成画面へ遷移します

エンティティの種類は「AWSサービス」で、ユースケースの選択では「EC2」を選択します。

ポリシーの作成

「ポリシーの作成」ボタンからポリシーの作成画面へ遷移します。

遷移先で、サービス・アクション・リソース・リクエスト条件の設定を行います。

ポリシーの作成(サービス)

サービス欄にはDynamoDBをセットします

ポリシーの作成(アクション)

アクション欄ではすべてのDynamoDBアクションの「拒否」をセットします。


ポリシーの作成(リソース)

リソース欄ではtable1のARNを指定します



ポリシーの作成(リクエスト条件)

リクエスト条件はデフォルトのままにします

ポリシーの作成(その他)

残りはデフォルトのままで、ポリシー名(「ddb-table1-access-policy」)だけ入力して「ポリシーの作成」を選択します



ロールの新規作成(ポリシー設定編)

ロールの作成画面に戻り(閉じてしまった場合はもう一度ロールの新規作成)、作成したポリシー(「ddb-table1-access-policy」)をアタッチします。
さらに、AmazonDynamoDBFullAccess(マネージドポリシー)もアタッチします。
ロール名のみセットして、他はデフォルトのまま「ロールの作成」を選択します。

EC2の設定

EC2のダッシュボードで、作成したロールをセットします。


動作確認

table1には not authorized でアクセスできないことと、table2にはアクセスでき、Itemが取得できることを確認します。

$ aws dynamodb scan --table-name table1

An error occurred (AccessDeniedException) when calling the Scan operation: User: arn:aws:sts::xxx:assumed-role/test-ddb-access-role/i-04c292c950cf0cb25 is not authorized to perform: dynamodb:Scan on resource: arn:aws:dynamodb:ap-northeast-1:xxx:table/table1 with an explicit deny
[ec2-user@ip-172-31-36-102 ~]$ aws dynamodb scan --table-name table2
{
    "Items": [
        {
            "id": {
                "S": "6"
            }
        },
        {
            "id": {
                "S": "5"
            }
        },
        {
            "id": {
                "S": "4"
            }
        }
    ],
    "Count": 3,
    "ScannedCount": 3,
    "ConsumedCapacity": n

まとめ

  • EC2インスタンスにロールをアタッチすることで操作制限ができる
    • 例えば、DynamoDBの特定のテーブルにアクセスできる・できないという設定ができる(今回の記事でやったこと)

Discussion