Amazon Transcribeを利用する時のIAMポリシーについて Part3

記事タイトルとURLをコピーする

前回はカスタム語彙へのアクションに必要な権限について説明しました。ジョブの実行時にカスタム語彙を指定できますが、カスタム語彙を指定したジョブを実行するときにはどんな権限が必要になるのでしょうか?

コンソールの場合

まずは以下のような権限で試してみます。ジョブ関連のアクションと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が必要になります。これはカスタム語彙を選択するときにプルダウンで一覧が表示する仕様のためだと考えられます。