MediaLiveがElemental Inferenceと連携する際に必要なIAMロール権限を確認してみた

MediaLiveがElemental Inferenceと連携する際に必要なIAMロール権限を確認してみた

AWS Elemental MediaLiveがAWS Elemental Inferenceと連携する際に必要な許可アクションを確認してみました。elemental-inferenceのPutMediaとGetMetadata権限が必要です。
2026.03.31

はじめに

清水です。先月2026年2月に発表された動画配信向けフルマネージドなAIサービスAWS Elemental Inference、以下ブログエントリでその機能概要ならびにMediaLiveとの連携を確認しました。

さて上記ブログエントリで動作検証の際、MediaLive用のIAMロールにはElemental Inferenceに関するアクションをすべて許可するといったポリシーを付与しました。これはElemental Inferenceリリース直後でありドキュメントなどからElemental InferenceのアクションのうちどれがMediaLiveとの連携の際に必要であるのかがはっきりしなかったたため、動作検証目的として割り切り設定をおこなったものでした。

Elemental Inferenceのリリースからひと月ほど経過し、MediaLive User Guideなど確認をしたところElemental Inferenceとの連携に必要なアクションについての記載が追加されていました。今回はこのMediaLiveとElemental Inference連携に必要な権限をチェックし、最適なポリシーを確認して行きたいと思います。

Elemental Inferenceリリース時の動作検証内容を振り返り

まずは先日のElemental Inferenceリリース時のブログエントリから、動作検証の際に設定したMediaLive用IAMロール内容を振り返っておきましょう。MediaLive用IAMロールの編集の節を確認します。以下のインラインポリシーを設定していました。

Temporary-ElementalInferenceAllowPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "elemental-inference:*",
            "Resource": "*"
        }
    ]
}

mi01
引用元: [NEW] 動画配信向けフルマネージドAIサービスAWS Elemental Inferenceがリリースしました! | DevelopersIO

振り返ってみると、我ながらなかなかに強引なやり方です。動作検証目的と割り切るならまだしも、本番環境などでは採りたくない手段、ポリシー内容だなと思います。なおリリース時のブログエントリにその理由なども記載していますが、VisualのPolicy editorを利用しServiceとしてElemental Inferenceを指定、そのActionをすべて許可した、という流れでした。

MediaLiveにElemental Inferenceのアクションが許可されていないときの挙動を確認

Elemental Inferenceリリース時のブログエントリで動作検証を行った際にMediaLiveにアタッチしたElemental Inference用のポリシーを確認しました。さて、そもそもこのElemental Inference用のポリシーをアタッチせず、MediaLiveにElemental Inferenceのアクションがいっさい許可されていないときの挙動はどうなるのでしょうか。リリース時のブログエントリでは確認していなかったので、この点についても改めてチェックしてみましょう。

MediaLiveやElemental Inference、配信用のMediaPackageなどのリソースはElemental Inferenceリリース時のブログエントリの構成と同じものを使用しました。MediaLiveと連携してElemental InferenceのSmart Cropping機能をつかうかたちですね、成図について再掲しておきましょう。リソース作成についての詳細についてもリリース時のブログエントリを参照ください。

mi02

MediaLive ChannelにアタッチしているIAMロールMediaLiveAccessRoleですが、Elemental Inference用に一時的に許可したポリシーTemporary-ElementalInferenceAllowPolicyをデタッチ(削除)し以下2つのみとしました。

mi03

1つめのAmazonSSMReadOnlyAccessはAWS managedで以下のルールです。

AmazonSSMReadOnlyAccess
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:Describe*",
                "ssm:Get*",
                "ssm:List*"
            ],
            "Resource": "*"
        }
    ]
}

2つめのMediaLiveCustomPolicyについてはCustomer inlineではありますが、MediaLiveのマネジメントコンソールによって更新されるポリシーです。(詳細は後述します。)この時点ではElemental Inference用のAction許可内容は存在せず、以下となっています。

MediaLiveCustomPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediastore:ListContainers",
                "mediastore:PutObject",
                "mediastore:GetObject",
                "mediastore:DeleteObject",
                "mediastore:DescribeObject"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams",
                "logs:DescribeLogGroups"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediaconnect:ManagedDescribeFlow",
                "mediaconnect:ManagedAddOutput",
                "mediaconnect:ManagedRemoveOutput"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:describeSubnets",
                "ec2:describeNetworkInterfaces",
                "ec2:createNetworkInterface",
                "ec2:createNetworkInterfacePermission",
                "ec2:deleteNetworkInterface",
                "ec2:deleteNetworkInterfacePermission",
                "ec2:describeSecurityGroups",
                "ec2:describeAddresses",
                "ec2:associateAddress"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediapackage:DescribeChannel"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediapackagev2:PutObject",
                "mediapackagev2:GetChannel"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "*"
        }
    ]
}

MediaLive ChannelをStartしてOBS Studioから映像を打ち上げます。MediaLiveのマネジメントコンソールで確認すると以下のようにActive aletsが6つ表示される状況です。

mi04

AlertのTypeとしてはFailed to Write to OutputFailed to Get HTTP Output TokenFailed to Close or Finalize the Outputなどがならび、またメッセージとしては以下のような内容でした。Elemental Inference側へのデータ連携がうまくいっていないことが推測できますね。

  • OutputDataBackground failed to send file for URL [https://xxxxxxxxxx.elemental-inference-data.us-west-2.amazonaws.com/v1/feed/xxxxxxxxxxxxxxxxxxx/input/0/media/Streams(default-video.cmfv)/Segment(1774954663)], after [3] attempts, error [http client error
  • Failed to communicate with inference service: Signature error for [MediaID5], error [http client error [403]]. The channel must use an access role that includes the appropriate elemental-inference permissions.
  • [Muxer=FMP4[5]] Failed to commit output.

MediaPackage経由で配信される映像も確認してみます。映像自体は視聴できるのですが、注目すべき対象を左右に移動させてもPortrait動画の切り出し位置が変わることはありません。Smart Croppingがうまく機能していない状況ですね。(リリース時のブログと同様に、左側がもともとのの横長映像、右側が切り出された縦長Portrait映像です。)

mi05

mi06

MediaLiveマネジメントコンソールからIAMロールをアップデート

MediaLiveにElemental Inferenceのアクションが許可されていないときの挙動が確認できたところで、Elemental Inference用にMediaLiveに許可するアクションを改めて確認していきましょう。現段階でMediaLiveがElemental Inferenceと連携するのに必要な権限についてはMediaLive User Guideに記載があるのですが、こちらについては後述するとして、まずはMediaLiveのマネジメントコンソールからのアップデートを試みます。以下のような挙動でMediaLive用IAMロールがアップデートできないか、というところです。

MediaLiveのマネジメントコンソールで(Create channel)ボタンを押下しChannel作成画面に進んでみましょう。なお、Elemental Inference利用のためオレゴンリージョンを選択した状態で行っています。

以下スクリーンショットのように、MediaLiveAccessRole policiesが更新されていないのでアップデートするよう促してくれましたね。(なお以下はChannel新規作成画面ですが、Channel編集画面でも表示されました。)そのまま(Update)ボタンを押下してみましょう。

mi07

(Update)ボタン押下後、メッセージとボタン部分が消えただけで特に変化はありません。

mi08

IAMのマネジメントコンソール、Roles画面からポリシー内容を確認してみましょう。AmazonSSMReadOnlAccessMediaLiveCustomPolicyの2つのポリシーがアタッチされている点は変わりありませんが、MediaLiveCustomPolicyに変更点がありました。(なおMediaLiveCustomPolicyのアップデート前の内容は先の「Elemental Inferenceのアクションが許可されていないときの挙動を確認」の状態と比較しています。)

具体的なアップデート前の差分としては75行目から82行目です。以下のElemental Inference向けの2つのActionがAllowとして追加されていました。どうやらElemental InferenceのPutMediaGetMetaDataの2つの権限がMediaLiveに必要なもののようですね。

Update後のMediaLiveCustomPolicy、75-82行目
        {
            "Effect": "Allow",
            "Action": [
                "elemental-inference:PutMedia",
                "elemental-inference:GetMetadata"
            ],
            "Resource": "*"
        },

mi09

MediaLiveCustomPolic全体としては以下の内容となっていました。

MediaLiveCustomPolic(Updateボタン押下後)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediastore:ListContainers",
                "mediastore:PutObject",
                "mediastore:GetObject",
                "mediastore:DeleteObject",
                "mediastore:DescribeObject"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams",
                "logs:DescribeLogGroups"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediaconnect:ManagedDescribeFlow",
                "mediaconnect:ManagedAddOutput",
                "mediaconnect:ManagedRemoveOutput"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:describeSubnets",
                "ec2:describeNetworkInterfaces",
                "ec2:createNetworkInterface",
                "ec2:createNetworkInterfacePermission",
                "ec2:deleteNetworkInterface",
                "ec2:deleteNetworkInterfacePermission",
                "ec2:describeSecurityGroups",
                "ec2:describeAddresses",
                "ec2:associateAddress"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediapackage:DescribeChannel"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "mediapackagev2:PutObject",
                "mediapackagev2:GetChannel"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "elemental-inference:PutMedia",
                "elemental-inference:GetMetadata"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "*"
        }
    ]
}

MediaLive User Guideからアクセス要件を確認してみる

MediaLiveマネジメントコンソールからMediaLiveAccessRoleを更新、Elemental InferenceのPutMediaGetMetaDataの2つの権限がMediaLiveに必要な権限であることが伺えました。ここで改めてMediaLiveのUser Guideを確認してみましょう。

MediaLive User GuideのDocument historyを確認すると、以下のように2026/03/02付けでElemetal InferenceとMediaLiveを連携させる際に必要な権限について記載の更新があった旨がわかります。

mi10
引用元: Document history for user guide - MediaLive

実際にUser Guideの該当ページ「Access requirements for the trusted entity」をチェックしてみます。MediaLiveはソースビデオをElemental Inferenceに送信する必要があること、またElemental Inferenceが生成するめデータを取得できる必要がある旨の記載がありますね。権限としては先ほど確認したElemental InferenceのGetMetadataPutMediaの2種類が明記されていました。

mi11
引用元: Access requirements for the trusted entity - MediaLive

ということで、リリース時の動作検証では"elemental-inference:*"としていたElemental Inferenceの権限について、 "elemental-inference:PutMedia"ならびに"elemental-inference:GetMetadata"の2種類のみを指定すればMediaLiveと連携可能であることが確認できました。なお、Elemental InferenceのそのほかのAction詳細については以下Service Authorization Referenceに記載があります。

Resource typesでの指定もできるようですので、より厳密に権限管理を行う必要がある場合(特定のElemental Inferenceリソースに対してのみGetMetadataならびにPutMediaを許可する場合)も対応できそうですね。

まとめ

AWS Elemental MediaLiveがAWS Elemental Inferenceと連携の際に必要な権限について確認してみました。MediaLiveとElemental Inference連携時には、MediaLiveのChannelにアタッチするIAMロール(MediaLilveAccessRole)に"elemental-inference:PutMedia"ならびに"elemental-inference:GetMetadata"の許可権限が付与されていることを確認しておきましょう。MediaLiveのマネジメントコンソールを利用していれば、自動でMediaLilveAccessRoleアップデートすることが可能です。(リリース直後は止むを得ませんでしたが、"elemental-inference:*"に対して恒久的に許可を付与するといったことはやめておきましょう。)またSmart Croppingで確認した限り、MediaLiveにElemental Inferenceに対する権限がない場合でもAlertは出ますが出力自体は可能です。しかし切り出し位置が動的に変わることはありませんでした。Elemental Inference連携でSmart Croppingを行い、切り出し位置が注目すべき対象に沿わない場合はMediaLiveの権限まわりをAlertとともに確認することもよさそうです。

ところで、MediaLilveAccessRoleについては2017年11月のMediaLiveリリース直後から度々更新を重ねてきた認識です。2018年のアップデートの記録と比べるとずいぶんMediaLiveCustomPolicyの内容も増え、つまりはMediaLiveが連携するほかAWSサービスも充実したなぁと思うしだいです。そして1つ気になるのは、惜しくも2025年11月にサービ終了してしまったAWS Elemetal MediaStoreに対するアクセス権限です。今回のようにMediaLilveAccessRoleのアップデートで削除されるのでしょうか。よりセキュアに考えるのであれば、削除されるのを待たずともサービス終了しているので自らMediaStoreに対する許可アクションを削除してしまってもよいかと思いました。(MediaStoreは個人的に思い入れのあるサービスでしたので大変名残り惜しくはありますが。)

この記事をシェアする

関連記事