S3バケットポリシーにIP制限をした状態でMediaConvertを使用する方法

2021.08.01

テクニカルサポートチームの丸屋 正志(Maruya Masashi)です。

1. 困っていた内容

S3 バケットポリシーに IP 制限を設定している状態で、バケット内の動画ファイルを MediaConvert で交換しようとすると以下のようなエラーが発生します。

Unable to open input file [s3://バケット名/動画.mp4]: [Failed probe/open: [Can't read input stream: [Failed to read data: Access denied to s3://バケット名/動画.mp4]]]

上記エラーが出る場合は、どの様に対応したら宜しいでしょうか?

但し、セキュリティを保つために IP 制限をした状態で、MediaConvert を実施したいと考えております。

全体のS3バケットポリシー

{
    "Version": "2008-10-17",
    "Id": "PolicyPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::バケット名/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "111.222.333.444/32",
                        "555.666.777.888/16"
                    ]
                }
            }
        }
    ]
}

2. どう対応すればいいの?

MediaConvert からの GetObject(ファイル取得) ができるようにするために、Deny のステートメントにて MediaConvert が利用する IAM ロールを除外するよう 【Condition 句】にて 【aws:userid 条件キー】 を利用致します。

また、aws:userid 条件キーでは IAM ロールの ARN で指定することができず、一意の識別子(RoleId) を指定する必要があります。
そして、一意の識別子はマネジメントコンソール上では確認ができないため、AWS CLI もしくは API にて確認することが出来ます。

3. やってみた

3.1. IAM ロールの作成

初めに MediaConvert 用の 『IAM ロール』を新規作成します。

  • 名前 : (例: MediaConvert-Role)
  • アクセス権限 : (例: AmazonS3FullAccess)
  • 信頼関係 : mediaconvert.amazonaws.com

実際の作成例(画像) Image from Gyazo

IAM ロールの作成方法が不明な場合については、下記をご参照くださいませ。

3.2. RoleId を確認

次に、上記で作成した IAM ロール名(例: MediaConvert-Role)の識別子(RoleId)を確認致します。

## コマンド実行例
aws iam get-role --role-name <<ROLE NAME>>

## ロール名 : 【例 : MediaConvert-Role】の場合
aws iam get-role --role-name MediaConvert-Role

実行結果例

{
    "Role": {
        "Path": "/",
        "RoleName": "<<ROLE NAME>>",
        "RoleId": "AROAXX123456789XX",  <- こちら
        "Arn": "arn:aws:iam::<<ACCOUNT ID>>:role/<<ROLE NAME>>",
(省略)

上記の 【"RoleId" : "AROAXX123456789XX"】 という形式で表示されるものが、IAM ロールの 【一意の識別子】 となります。

3.3. S3 バケットポリシーの修正

ご利用の S3 バケットポリシーの【Condition 句】にて、下記を追加していただくことで IP 制限をしていても MediaConvert などを実施することが出来るようになります。

## 記入例
"StringNotLike": {
                    "aws:userId": "【Roleldに変更】:*"
                },

## RoleId : 【例 : AROAXX123456789XX】の場合
"StringNotLike": {
                    "aws:userId": "AROAXX123456789XX:*"
                },

全体の記述例については下記をご参照くださいませ。

{
    "Version": "2008-10-17",
    "Id": "PolicyPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::バケット名/*",
            "Condition": {
                "StringNotLike": {
                    "aws:userId": "AROAXX123456789XX:*"
                },
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "111.222.333.444/32",
                        "555.666.777.888/16"
                    ]
                }
            }
        }
    ]
}

4. 参考資料