特定のDynamoDBテーブルのアイテムの操作のみ可能なIAMユーザー(ログインプロファイル)を作成する

2021.08.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 IoT事業部の若槻です。

今回は、Amazon DynamoDBの特定のテーブルのアイテムの操作のみ可能なIAMユーザー(ログインプロファイル)を作成してみました。

想定しているケース

  • AWSマネジメントコンソールにアクセスしてDynamoDBテーブル上のアイテムをメンテナンスするオペレーションを、非エンジニアなユーザーに行ってもらいたい。
  • 許可する操作は特定のDynamoDBテーブルに対するアイテムの変更(読み取り、作成、更新、削除)のみ。
  • そのためのIAMユーザー(ログインプロファイル)を発行する。

ログインプロファイルの作成

まず、IAMユーザーにアタッチするポリシーを定義したファイルを作成します。fruitsおよびvegetablesテーブルのアイテムのCRUD操作のみ可能なポリシーです。

policy.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListAndDescribe",
      "Effect": "Allow",
      "Action": ["dynamodb:ListTables"],
      "Resource": "*"
    },
    {
      "Sid": "SpecificTable",
      "Effect": "Allow",
      "Action": [
        "dynamodb:BatchGetItem",
        "dynamodb:DescribeStream",
        "dynamodb:DescribeTable",
        "dynamodb:Get*",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:BatchWriteItem",
        "dynamodb:DeleteItem",
        "dynamodb:UpdateItem",
        "dynamodb:PutItem"
      ],
      "Resource": [
        "arn:aws:dynamodb:ap-northeast-1:*:table/fruits",
        "arn:aws:dynamodb:ap-northeast-1:*:table/vegetables"
      ]
    }
  ]
}

IAMユーザーを作成します。

$ userName=ddbtable-operator
$ aws iam create-user \
  --user-name ${userName}

IAMユーザーにインラインポリシーをアタッチします。

$ policyName=ddbtable-operation
$ aws iam put-user-policy \
  --user-name ${userName} \
  --policy-name ${policyName} \
  --policy-document file://policy.json

IAMユーザーのログインプロファイルを作成します。

$ password=${password}
$ aws iam create-login-profile \
  --user-name ${userName} \
  --password ${password} \
  --password-reset-required

IAMユーザーのログインプロファイルが作成できました。

ユーザーへの情報通知

ログインプロファイルを使用するユーザーへ次の情報を通知します。

  • サインインURL:https://${accountId}.signin.aws.amazon.com/console
  • ユーザー名:${userName}
  • パスワード:${password}

DynamoDBコンソールへアクセスしてみる

まず、AWSマネジメントコンソールにアクセスします。

通知されたサインインURLをブラウザで開き、ユーザー名とパスワードを指定してサインインを行います。

初回のみパスワードの変更を要求されるので変更前後のパスワードを指定し、[パスワードの変更を確認]をクリックします。

パスワードの変更が完了し、コンソールにアクセスできました。

右上のメニューから適切なリージョン(今回は東京)を選択して変更します。

中央上部の入力欄にdynamodbを入力し、候補欄からDynamoDBを選択します。

DynamoDBのコンソールへアクセスできました。

DynamoDBの操作をいろいろ試してみる

許可されていない操作

  • 許可されていないテーブルの操作

テーブル一覧を開くと、ポリシーで許可したfruitsvegetables以外のテーブルはアクセス許可がありませんとなりアクセスが出来なくなっています。

  • テーブルの新規作成

[テーブルの作成]をクリックします。

テーブル作成画面でテーブルの情報を指定して作成しようとすると、エラーとなり作成できません。

  • テーブルの削除

テーブル一覧で次はfruitsテーブルを選択します。

[アクション] - [テーブルの削除]を選択します。

削除をしてみます。

このようなダイアログとなります。

テーブル一覧に戻ってもfruitsテーブルは削除されていません。

  • 許可されていないテーブル上のアイテムの操作

項目一覧を開き、操作を許可されていないdevicesテーブルを選択すると、操作メニューが何も表示されずロールには、テーブル fruits の情報を表示するためのアクセス許可がありませんというアクセス許可が無い旨のエラーとなりました。

許可されている操作

  • 許可されたテーブル上のアイテムの操作

操作を許可されているfruitsテーブルを選択すると今度は操作メニューが表示されました。注意点として許可されていないテーブルを選択した状態で許可されたテーブルを選択すると引き続きアクセス許可が無い旨のエラーが出ますが、これは無視して構いません。(おそらくバグです)

  • アイテムの作成

[項目の作成]をクリックします。

属性値を指定して[項目の作成]をクリックします。

fruitsテーブルにアイテムを作成できました。

  • アイテムの更新

アイテムの更新(属性の追加)も問題なくできました。

  • アイテムの削除

アイテムの削除ができました。

参考

以上