この記事は公開されてから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の操作をいろいろ試してみる
許可されていない操作
- 許可されていないテーブルの操作
テーブル一覧を開くと、ポリシーで許可したfruits
とvegetables
以外のテーブルはアクセス許可がありません
となりアクセスが出来なくなっています。
- テーブルの新規作成
[テーブルの作成]をクリックします。
テーブル作成画面でテーブルの情報を指定して作成しようとすると、エラーとなり作成できません。
- テーブルの削除
テーブル一覧で次はfruits
テーブルを選択します。
[アクション] - [テーブルの削除]を選択します。
削除をしてみます。
このようなダイアログとなります。
テーブル一覧に戻ってもfruits
テーブルは削除されていません。
- 許可されていないテーブル上のアイテムの操作
項目一覧を開き、操作を許可されていないdevices
テーブルを選択すると、操作メニューが何も表示されずロールには、テーブル fruits の情報を表示するためのアクセス許可がありません
というアクセス許可が無い旨のエラーとなりました。
許可されている操作
- 許可されたテーブル上のアイテムの操作
操作を許可されているfruits
テーブルを選択すると今度は操作メニューが表示されました。注意点として許可されていないテーブルを選択した状態で許可されたテーブルを選択すると引き続きアクセス許可が無い旨のエラーが出ますが、これは無視して構いません。(おそらくバグです)
- アイテムの作成
[項目の作成]をクリックします。
属性値を指定して[項目の作成]をクリックします。
fruitsテーブルにアイテムを作成できました。
- アイテムの更新
アイテムの更新(属性の追加)も問題なくできました。
- アイテムの削除
アイテムの削除ができました。
参考
- Amazon DynamoDB: 特定のテーブルへのアクセスを許可する - AWS Identity and Access Management
- S3の特定のバケットおよびキーのファイルの更新のみ可能なIAMユーザー(コンソールアクセスのみ)を作成してみた | DevelopersIO
以上