昔まだAWSが出来て間もない時代(かろうじてS3があったくらい)にPA-APIを使ったアプリを作っていたのですが、最近またPA-APIを使おうかなと思って調べたところ、未だにPA-APIを使うアプリでは認証にアマゾンのルートアカウントのアクセスキーとシークレットを使えという記事が出てきました。
PA-API以外に使うものがあんまりなかった時代ならいざしらず、AWSがこんなに使われてる現状でも未だにPA-APIにそれ用の権限とか存在しないのか…??と思ってよくよく調べてみると、最近それ用のIAMポリシーができたよう(いつできたのかは不明)なので、それを設定して使うことにしました。
これがなかったら、さすがにAWSをバリバリ使ってるアカウントのルートアカウントをPA-APIのアプリに使いたくなかったので、専用のAWSアカウントを作るところでした。
これはなにか?
PA-API用ポリシーを作って、PA-API用のIAMユーザに紐付ける手順、及びそのユーザのアクセスキー及び秘密鍵を使ってPA-APIから値を取得できるかの確認。
ポリシーの作成
まずはAWSのWebコンソールからPA-API専用のポリシーを作ります。

「独自のポリシーを作成」を選択します。

PA-APIに対するFullAccess権限を設定したポリシーにします。ポリシー名は適当なものを。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ProductAdvertisingAPI:*",
"Resource": "*"
}
]
}
念の為ポリシーの検証をしておいて、問題なければポリシーの作成です。
PA-APIアクセス用ユーザの作成
次に上記で作成したポリシーを紐付けるユーザを作成しましょう。

適当な名前をつけて「プログラムによるアクセス」にチェックを入れます。
「既存のポリシーを直接アタッチ」を選んで、先程作成したPA-API用のポリシーにチェックを入れます。
次の画面で確認して、問題なければ更に次の画面でcredentials.csvをダウンロードしておきましょう。
実際にアクセス可能な確認
取得したアクセスキーと秘密鍵が実際にPA-APIへのアクセスに使えるか念の為チェックしておきましょう。
rubyだとamazon-ecsというgemがPA-APIにアクセスするのによく使われているようです。
associate_tag
、AWS_access_key_id
、AWS_secret_key
のところは自分のものに置き換えてください。
require 'amazon/ecs'
Amazon::Ecs.options = {
associate_tag: 'xxxxxxxxxxxxxx',
AWS_access_key_id: 'xxxxxxxxxxxxxxxxxx',
AWS_secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
country: :jp
}
# Nintendo SwitchのASINを指定してみます
res = Amazon::Ecs.item_lookup('B01NCXFWIZ', response_group: 'Small')
p res.items.map {|item| item.get('ItemAttributes/Title') }
# => ["Nintendo Switch Joy-Con (L) ネオンブルー/ (R) ネオンレッド"]
OK、ちゃんと取れてるようですね。