前回はカスタム語彙へのアクションに必要な権限について説明しました。ジョブの実行時にカスタム語彙を指定できますが、カスタム語彙を指定したジョブを実行するときにはどんな権限が必要になるのでしょうか?
コンソールの場合
まずは以下のような権限で試してみます。ジョブ関連のアクションとS3:GetObject
を許可しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"transcribe:GetTranscriptionJob",
"transcribe:StartTranscriptionJob",
"transcribe:ListTranscriptionJobs"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sample-bucket/*"
}
]
}
もちろん拒否されます。ListVocabularies
だけが足りないのか...?
次に以下のようにList*
でListVocabularies
も許可することに。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"transcribe:GetTranscriptionJob",
"transcribe:StartTranscriptionJob",
"transcribe:List*"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sample-bucket/*"
}
]
}
すると...
おっ、見えました。
もちろんジョブは正常に完了しました。
というわけで、コンソールから使用する場合はListVocabularies
権限が必要です。カスタム語彙について何か確認する必要がなければGetVocabularies
はいらないでしょう。
CLI・SDKの場合
AWS CLIやSDKから利用する場合はどうでしょう。コンソールで最初に試した権限でこちらも試してみます。Pythonでジョブを実行します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"transcribe:GetTranscriptionJob",
"transcribe:StartTranscriptionJob",
"transcribe:ListTranscriptionJobs"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sample-bucket/*"
}
]
}
Pythonでのジョブの実行は以下のようなコードになりました。
import boto3
transcribe = boto3.client("transcribe")
transcribe.start_transcription_job(
TranscriptionJobName="iam-test03",
LanguageCode="en-US",
MediaFormat="mp3",
Media={
"MediaFileUri": "https://s3.amazonaws.com/sample-bucket/sample.mp3"
},
Settings={
"VocabularyName": "test"
}
)
すると...
おや?正常に実行されました。
まとめ
Amazon Transcribeでカスタム語彙を指定してジョブを実行するとき、プログラムから実行する場合は特にカスタム語彙へのアクションの権限は必須ではありません。しかし、コンソールから実行する場合はListVocabularies
が必要になります。これはカスタム語彙を選択するときにプルダウンで一覧が表示する仕様のためだと考えられます。