Amazon Forecastの機能だけを使用する為に必要最低限のIAM権限定義を調査した

DA事業本部の貞松です。Forecast検証継続中です。

Forecastは時系列予測を実施する為のSaaSとして切り出されたサービスであり、普段はその他のAWSサービスを触ることがないユーザーがスポットで使用するケースも考えられます。
その際、セキュリティ観点からForecastの全機能は使用可能で、かつその他のAWSサービスは全て利用できないような必要最低限の権限を与えることが望ましいです。
本記事では、上記の要件を満たすIAMの権限設定を調査してまとめます。

公式ドキュメントを確認する

ForecastからS3バケットを操作する為の権限は下記のページが参考になりそうです。

Amazon Forecast 開発者ガイド > Amazon Forecast のアクセス許可を設定する

また、Forecastを操作するユーザー自体に付与する権限については下記ページの末尾あたりが参考になりそうです。

Amazon Forecast 開発者ガイド > Amazon Forecast でアイデンティティベースのポリシー (IAM ポリシー) を使用する

これらに沿って権限設定すれば解決!と思っていたのですが、幾つかうまくいかないケースが発生しました。

うまくいかないケース

前節の公式ドキュメントに従ってIAMの権限を設定し、Forecastを操作してみます。

Forecastのデータインポート画面で、ForecastからS3バケットを操作する為のIAMロールを選択、または作成する項目があります。

まず、作成済みのForecast用IAMロールの一覧を取得しようとして以下のエラーが発生します。

表示されたエラーメッセージの通り、iam:ListRoles の権限が足りていません。

また、ここでForecast用のIAMロールを作成しようとすると以下のエラーが発生します。

これもエラーメッセージの通り、iam:CreateRole iam:CreatePolicy iam:AttachRolePolicy の権限が足りていないために発生しています。

最終的な権限設定

前節のケースを踏まえて最終的に設定した必要最低限の権限定義は以下の通りです。

Forecastを操作するユーザー自体に付与する権限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreatePolicy",
                "iam:PassRole",
                "iam:CreateRole",
                "iam:AttachRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:policy/*",
                "arn:aws:iam::*:role/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles",
                "forecast:*"
            ],
            "Resource": "*"
        }
    ]
}

ForecastからS3にエクスポートした予測結果のCSVファイルを確認したい場合は、上記の定義にS3アクセスについての定義を追加する必要があります。

ForecastからS3バケットを操作する為の権限

事前にForecastからS3バケットを操作する為のIAMロールを用意しておいて、それを使用させる場合は以下のようなポリシー定義で設定しておきます(基本的にはForecastの画面から作成するのが簡単だとは思います)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}

まとめ

Forecastに限らず、セキュリティ観点から何でもかんでも許可する権限は作らないほうが良いのですが、最低限の権限に絞り込もうとすると逆に使いたい機能が使えなくなってしまうケースが良くありますよね。
本記事がForecast使用時の一助になれば幸いです。