EC2インスタンスにロールを割り当てて、AWS CLIの権限を設定するのをGUIでポチポチやる
はじめに
前回書いたブログの続きで、ミニマムな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