[アップデート] Amazon CloudFrontでリソースレベルとタグベースでのアクセス許可が設定できるようになりました!

AWSが提供する高速・高パフォーマンスなコンテンツ配信サービス(CDN)であるAmazon CloudFront、ディストリビューション単位やタグ情報からアクセス許可ができるようになったアップデートについて、実際にIAMポリシーを設定しながら確認してみました。
2019.08.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。AWSの細かなアップデートを追っていくコーナーです。本エントリーでお伝えするのはこちら、AWSが提供する高速・高パフォーマンスなコンテンツ配信サービス(CDN)であるAmazon CloudFrontでアクセス許可をリソースレベルならびにタグベースで行えるようになりました。(2019/08/08にポストされた内容になります。)

これまでもIAMアクセス許可ポリシーにて、CloudFrontの各アクションに対するアクセス許可が設定できました。しかしCloudFrontの各リソース(ディストリビューション)ごとのアクセス許可は設定できませんでした。この度のアップデートにて、ディストリビューション単位でリソースを指定してのアクセス許可の設定、またディストリビューションに設定したタグを用いてのアクセス許可の設定ができるようになりました。

詳細については、Amazon CloudFront Developer Guide(英語版)、「Overview of Managing Access Permissions to Your CloudFront Resources」の「Managing Access to Resources」の項目に記載があります。 *1

ディストリビューションをリソースに指定してアクセスを許可してみる

まずはディストリビューションをIAMポリシーのリソース(Resource)要素に指定してアクセス許可を行っています。今回はAWSマネジメントコンソールで操作確認してみますので、AWS管理ポリシー「ReadOnlyAccess」を付与したIAMユーザに以下のインラインポリシーを追加します。

追加するポリシーは下記です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CFResourceLevelPermission",
            "Effect": "Allow",
            "Action": [
                "cloudfront:CreateInvalidation"
            ],
            "Resource": "arn:aws:cloudfront::123456789012:distribution/EDFDVBD6EXAMPLE"
        }
    ]
}

注目すべきが10行目、Resource要素の指定箇所ですね。これまでは"Resource": "*"としか指定できませんでしたが、今回のアップデートで"arn:aws:cloudfront::[アカウントID]:distribution/[ディストリビューションID]"と指定できるようになりました。

インラインポリシー追加時に以下のようなアラートが出ますが、気にせず進めます。

インラインポリシー追加後、CloudFrontのマネジメントコンソールからResourceで対象としたディストリビューションに対してInvalidationを行ってみます。問題なくInvalidationができますね!

続いて、Resourceで対象としていないディストリビューションに対してInvalidationを行ってみましょう。今度は以下のようにエラーが出てしまいます。

きちんとディストリビューションのリソースでのアクセス制御ができていることが確認できました。

タグベースでリソースを指定してアクセスを許可してみる

続いてディストリビューションにタグを付与、このタグを用いてアクセスを許可してみます。まず操作対象となるCloudFrontディストリビューションには以下のように"stage":"prod"のタグを付与しました。

続いてIAMユーザに以下の内容のインラインポリシーを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CFTagBasedPermission",
            "Effect": "Allow",
            "Action": [
                "cloudfront:CreateInvalidation"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/stage": [
                        "prod"
                    ]
                }
            }
        }
    ]
}

Resource要素の指定は"Resource": "*"とすべてを指定していますが、その後Condition要素でタグ情報でのアクセス許可を指定しています。

このインラインポリシー追加後、CloudFrontのマネジメントコンソールからタグ"stage":"prod"を付与したディストリビューションに対してInvalidationを行ってみます。問題なくInvalidationができました。

今度はタグ"stage":"gamma"を付与したディストリビューションに対してInvalidationを行ってみましょう。こちらはInvalidation操作ができないことが確認できます。

まとめ

Amazon CloudFrontでリソースレベルとタグベースでのアクセス許可が設定できるようになったアップデートについて、実際にIAMポリシーを設定、対象のリソースのみ操作ができることを確認してみました。これまでは対象のAWSアカウントが有するすべてのディストリビューションを対象としてでしかアクセス許可が設定できませんでしたが、今回のアップデートでディストリビューションIDの指定もしくは付与したタグの情報をもとに、アクセス許可を設定できるようになりました。

脚注

  1. 2019/08/29現在、日本語版のAmazon CloudFront開発者ガイドや、AWS Identity and Access Management ユーザガイド(英語版、日本語版とも)にはまだ更新が反映されていないようです。Amazon CloudFront Developer Guide(英語版)にのみアップデート内容の反映を確認できました。