質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

3回答

2763閲覧

awsのDynamoDBをpynamodbで成業する中でのエラー。

con2319

総合スコア52

Amazon DynamoDB

Amazon DynamoDBは、 AWS上のNoSQLデータベースサービスです。フルマネージド型のサービスで、スキーマレス、高速且つ安定性のある動作、自動的に容量を変更する自動スケーリングなどの特徴を持ちます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/11/30 14:06

編集2021/12/01 05:18

実現したい事
pythonでpynamodbを使用してDynamoDBを制御してテーブルを作成する。

困っている事
テーブルが作成されない。

今っている事
python manage.py init_dbを実行すると下記のようなエラーがでてコードの実行が完了されない。
エラーコード

Traceback (most recent call last): File "manage.py", line 8, in <module> manager.run() File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\flask_script\__init__.py", line 417, in run result = self.handle(argv[0], argv[1:]) File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\flask_script\__init__.py", line 386, in handle res = handle(*args, **config) File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\flask_script\commands.py", line 216, in __call__ return self.run(*args, **kwargs) File "C:\Users\user\Desktop\application\flask_blog\scripts\db.py", line 10, in run if not Entry.exists(): File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\pynamodb\models.py", line 753, in exists cls._get_connection().describe_table() File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\pynamodb\connection\table.py", line 290, in describe_table return self.connection.describe_table(self.table_name) File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\pynamodb\connection\base.py", line 748, in describe_table tbl = self.get_meta_table(table_name, refresh=True) File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\pynamodb\connection\base.py", line 548, in get_meta_table data = self.dispatch(DESCRIBE_TABLE, operation_kwargs) File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\pynamodb\connection\base.py", line 329, in dispatch data = self._make_api_call(operation_name, operation_kwargs, settings) File "C:\Users\user.virtualenvs\application-KTHLna8B\lib\site-packages\pynamodb\connection\base.py", line 440, in _make_api_call raise VerboseClientError(botocore_expected_format, operation_name, verbose_properties) pynamodb.exceptions.VerboseClientError: An error occurred (AccessDeniedException) on request (RQJV3QL0TRKS6U~) on table (serverless_blog_entries) when calling the DescribeTable operation: User: arn:aws:iam::アカウントID:user/zappa-exec-user is not authorized to perform: dynamodb:DescribeTable on resource: arn:aws:dynamodb:ap-northeast-1:アカウントID:table/serverless_blog_entries

自分の中ではuser/zappa-exec-userにtable/serverless_blog_entriesを作成する権限がないという事だと思っているのですがどうでしょうか?
ちなみに開発環境と本番環境で分かれており、今回は本番環境での実施予定になります。
可能な限り教えていただけないでしょうか?よろしくお願い致します。

追記
現状下記のようなポリシーでユーザーを作成しているのですがこれだとDynamoDBの権限としては不足しているでしょうか?

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:GetRole", "iam:CreateRole", "iam:PutRolePolicy", "apigateway:*", "cloudformation:*", "events:*", "lambda:*", "logs:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::アカウントID(数字の奴):role/*-ZappaLambdaExecutionRole" }, { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::zappa-*" } ] }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

質問の回答に対して考えて見直したとき、システム環境変数でなく、ユーザー環境変数に登録していたアクセスキーとシークレットキーがDynamoDBを扱うためのユーザーのものでなくデプロイ用のユーザーのものだったのでエラーが出てみたいなのでその部分を直したらエラーがなくなりました。

投稿2021/12/03 03:54

con2319

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

現状のポリシー追記したのですがこのポリシーだと上記の権限が伴っていないという事でしょうか?

ご提示のポリシーにはAction要素にdynamodb:xxxxx (例えば、dynamodb:DescribeTableとか)がないので、DynamoDBの権限は1つも許可されていません(明示的に許可がなければ拒否になります)。ポリシーの記述方法は先の回答のリンクをご参照ください。

またユーザー作成時にDynamoDBの権限を追加することは可能なのでしょうか?

ポリシーをIAMユーザー(またはIAMグループ)に割り当てることになります。ポリシーの割り当てはユーザー作成時もできますし、既存のユーザーに対してもできます。

ポリシーは次の2種類があります。(他にインラインポリシーというものもありますが、説明は割愛します)

  1. AWS管理ポリシー: AWSが事前に用意したポリシー。AWS利用者はカスタマイズできない。
  2. カスタマー管理ポリシー: AWS利用者が作成するポリシー。カスタマイズ可能。

DynamoDB関連のAWS管理ポリシーはAmazonDynamoDBFullAccess, AmazonDynamoDBReadOnlyAccessなど、いくつかあります。これらが要件に合わなけば、カスタマー管理ポリシーの作成をご検討ください。

追記

回答してから気づいたのですが、既にIAMユーザーにポリシーを割り当てているので、DynamoDBのAction許可のステートメントを、そのポリシーに追加すればよいと思います。

投稿2021/12/01 05:45

編集2021/12/01 07:41
jhashimoto

総合スコア838

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

con2319

2021/12/01 09:37

すみません。先ほど再度見直したところ2つのユーザーがあり一方ではDynamoDBを操作する権限がなくもう一方では権限を持っているという状況になっています。そしてDynamodbを操作する時は権限を持っているユーザーで操作するのですが、権限がないユーザーを使用しているみたいでそれでエラーが起きています。この状況に心当たりがあれば教えていただきたいのですがどうでしょうか?
jhashimoto

2021/12/01 10:39

zappa-exec-userはDynamoDB利用権限のないユーザーで、DynamoDBの権限を持つユーザー(仮にdynamodb-userとします)を利用したいということでしょうか? pynamodbでDynamoDBにアクセスしているプログラムに、zappa-exec-userの認証情報(アクセスキー/シークレットアクセスキー)を渡していると思います。これをdynamodb-userの認証情報を渡すように変更する必要があります。 どのようにして認証情報を渡しているか追記してもらえれば、何か回答できるかもしれません。
con2319

2021/12/02 07:57

何度も確認したんですけどzappa_settings.jsonファイルでの設定か、credencialsファイルの設定のどちらかのファイルだと思うんです。pyhthonでモデルクラス作成する時にアクセスキー、シークレットキー、テーブル名、region、hostを指定しているので環境変数から取得していると思うのですが。。。
jhashimoto

2021/12/03 10:08

解決できたようでよかったです。
con2319

2021/12/03 11:33

こちらこそ助かりました。
guest

0

DynamoDBは使ったことがないので、一般的なIAMの観点での回答になります。

dynamodb:DescribeTableの権限がないためアクセス拒否されています。該当IAMユーザーのIAMポリシーでdynamodb:DescribeTableが許可されているか確認してください。

尚、dynamodb:DescribeTableはテーブルの詳細を取得する権限であり、テーブルを作成するには、IAMポリシーでdynamodb:CreateTableも許可する必要があります。

IAMポリシーのサンプルです。他にも権限が必要であれば、参考にしてください。

DynamoDB テーブルに対するアクセスの読み込み、書き込み、更新、削除を行う IAM ポリシー - Amazon DynamoDB

投稿2021/11/30 23:04

編集2021/11/30 23:27
jhashimoto

総合スコア838

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

con2319

2021/12/01 05:20

現状のポリシー追記したのですがこのポリシーだと上記の権限が伴っていないという事でしょうか? またユーザー作成時にDynamoDBの権限を追加することは可能なのでしょうか? ご回答宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問