Amazon CloudFront のアイデンティティベースのポリシー例 - Amazon CloudFront

Amazon CloudFront のアイデンティティベースのポリシー例

デフォルトでは、ユーザーおよびロールには、CloudFront リソースを作成または変更するアクセス許可がありません。また、AWS Management Console、AWS Command Line Interface (AWS CLI)、または AWS API を使用してタスクを実行することもできません。IAM 管理者は、リソースで必要なアクションを実行するための権限をユーザーに付与する IAM ポリシーを作成できます。その後、管理者はロールに IAM ポリシーを追加し、ユーザーはロールを引き継ぐことができます。

これらのサンプルの JSON ポリシードキュメントを使用して、IAM アイデンティティベースのポリシーを作成する方法については、「IAM ユーザーガイド」の「IAM ポリシーを作成する (コンソール)」を参照してください。

CloudFront が定義するアクションとリソースタイプ (リソースタイプごとの ARN の形式を含む) の詳細については、「サービス認証リファレンス」の「Actions, resources, and condition keys for Amazon CloudFront」を参照してください。

ポリシーに関するベストプラクティス

アイデンティティベースのポリシーは、アカウント内で、CloudFront リソースを作成、アクセス、または削除できるかどうかを決定します。これらのアクションを実行すると、AWS アカウントに料金が発生する可能性があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:

  • AWS マネージドポリシーを使用して開始し、最小特権の許可に移行する – ユーザーとワークロードへの許可の付与を開始するには、多くの一般的なユースケースのために許可を付与する AWS マネージドポリシーを使用します。これらは AWS アカウントで使用できます。ユースケース別に AWS カスタマーマネージドポリシーを定義して、マネージドポリシーを絞り込むことをお勧めします。詳細については、「IAM ユーザーガイド」の「AWS マネージドポリシー」または「ジョブ機能の AWS マネージドポリシー」を参照してください。

  • 最小特権を適用する – IAM ポリシーで許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、「IAM ユーザーガイド」の「IAM でのポリシーとアクセス許可」を参照してください。

  • IAM ポリシーで条件を使用してアクセスをさらに制限する - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。例えば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。また、AWS CloudFormation などの特定の AWS のサービス を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、「IAM ユーザーガイド」の「IAM JSON ポリシー要素:条件」を参照してください。

  • IAM Access Analyzer を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する - IAM Access Analyzer は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer でポリシーを検証する」を参照してください。

  • 多要素認証 (MFA) を要求する – AWS アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、「IAM ユーザーガイド」の「MFA を使用した安全な API アクセス」を参照してください。

IAM でのベストプラクティスの詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティベストプラクティス」を参照してください。

ユーザーが自分の権限を表示できるようにする

この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を IAM ユーザーに許可するポリシーの作成方法を示します。このポリシーには、コンソールで、または AWS CLI か AWS API を使用してプログラム的に、このアクションを完了する権限が含まれています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

プログラムで CloudFront にアクセスするための許可

以下に示しているのは、アクセス権限ポリシーです。Sid (ステートメント ID) はオプションです。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAllCloudFrontPermissions", "Effect": "Allow", "Action": ["cloudfront:*"], "Resource": "*" } ] }

ポリシーでは、すべての CloudFront オペレーションを実行するアクセス許可を付与します。これは、プログラムで CloudFront にアクセスするのに十分なアクセス許可です。コンソールを使用して CloudFront にアクセスする場合は、「CloudFront コンソールの使用に必要なアクセス許可」を参照してください。

各アクションを使用するアクセス許可を付与または拒否するために指定するアクションおよび ARN のリストについては、「サービス認証リファレンス」の「Actions, resources, and condition keys for Amazon CloudFront」を参照してください。

CloudFront コンソールの使用に必要なアクセス許可

CloudFront コンソールへのフルアクセスを許可するには、以下のアクセス許可ポリシーでアクセス許可を付与します。

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "acm:ListCertificates", "cloudfront:*", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "cloudwatch:GetMetricStatistics", "elasticloadbalancing:DescribeLoadBalancers", "iam:ListServerCertificates", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "waf:GetWebACL", "waf:ListWebACLs" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "s3:ListAllMyBuckets", "s3:PutBucketPolicy" ], "Resource":"arn:aws:s3:::*" } ] }

アクセス許可が必要な理由は次のとおりです。

acm:ListCertificates

CloudFront コンソールを使用してディストリビューションを作成および更新していて、ビューワーと CloudFront 間、または CloudFront とオリジン間で HTTPS を必須とするように CloudFront を設定するときに、ACM 証明書のリストを表示できるようにします。

CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

cloudfront:*

すべての CloudFront アクションを実行できるようにします。

cloudwatch:DescribeAlarmscloudwatch:PutMetricAlarm

CloudFront コンソールで CloudWatch アラームを作成および表示できるようにします。sns:ListSubscriptionsByTopicsns:ListTopics も参照してください。

CloudFront コンソールを使用していない場合、これらのアクセス許可は必要ありません。

cloudwatch:GetMetricStatistics

CloudFront コンソールで CloudWatch メトリクスを表示できるようにします。

CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

elasticloadbalancing:DescribeLoadBalancers

ディストリビューションを作成および更新するときに、使用できるオリジンのリストで、Elastic Load Balancing ロードバランサーのリストを表示できるようにします。

CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

iam:ListServerCertificates

CloudFront コンソールを使用してディストリビューションを作成および更新していて、ビューワーと CloudFront 間、または CloudFront とオリジン間で HTTPS を必須とするように CloudFront を設定するときに、IAM 証明書ストアで証明書のリストを表示できるようにします。

CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

s3:ListAllMyBuckets

ディストリビューションを作成および更新するときに、以下のオペレーションを実行できるようにします。

  • 使用できるオリジンのリストで S3 バケットのリストを表示する

  • アクセスログを保存できる S3 バケットのリストを表示する

CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

S3:PutBucketPolicy

S3 バケットへのアクセスを制限するディストリビューションを作成または更新するときに、CloudFront オリジンのアクセスアイデンティティにアクセスできるようにバケットポリシーを更新することをユーザーに許可します。詳しくは、「オリジンアクセスアイデンティティを使用する (レガシー、非推奨)」を参照してください。

CloudFront コンソールを使用していない場合、このアクセス許可は必要ありません。

sns:ListSubscriptionsByTopicsns:ListTopics

CloudFront コンソールで CloudWatch アラームを作成するときに、通知用の SNS トピックを選択できるようにします。

CloudFront コンソールを使用していない場合、これらのアクセス許可は必要ありません。

waf:GetWebACLwaf:ListWebACLs

CloudFront コンソールで AWS WAF ウェブ ACL のリストを表示できるようにします。

CloudFront コンソールを使用していない場合、これらのアクセス許可は必要ありません。

CloudFront コンソールのアクセス許可のみのアクション

[CloudFront Security Savings Bundle] ページで以下の CloudFront アクションを実行できます。以下の API アクションは、コードで呼び出すことを意図したものではなく、AWS CLI と AWS SDK には含まれていません。

アクション 説明

CreateSavingsPlan

新しい Savings Plans を作成するアクセス許可を付与します。

GetSavingsPlan

Savings Plans を取得するアクセス許可を付与します。

ListRateCards

アカウントの CloudFront レートカードを一覧表示するアクセス許可を付与します。

ListSavingsPlans

アカウント内の Savings Plans を一覧表示するアクセス許可を付与します。

ListUsages

CloudFront の使用状況を一覧表示するアクセス許可を付与します。

UpdateSavingsPlan

Savings Plans を更新するアクセス許可を付与します。

メモ

カスタマーマネージドポリシーの例

独自のカスタム IAM ポリシーを作成して、CloudFront API アクションに対するアクセス許可を付与できます。これらのカスタムポリシーは、指定されたアクセス許可が必要な IAM ユーザーまたはグループにアタッチできます。これらのポリシーは、CloudFront API、AWS SDK、または AWS CLI を使用しているときに機能します。次の例では、いくつかの一般的ユースケースのアクセス権限を示します。CloudFront へのフルアクセスをユーザーに許可するポリシーについては、「CloudFront コンソールの使用に必要なアクセス許可」を参照してください。

例 1: すべてのディストリビューションへの読み取りアクセスを許可する

以下のアクセス許可ポリシーでは、CloudFront コンソールですべてのディストリビューションを表示するアクセス許可をユーザーに付与します。

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "acm:ListCertificates", "cloudfront:GetDistribution", "cloudfront:GetDistributionConfig", "cloudfront:ListDistributions", "cloudfront:ListCloudFrontOriginAccessIdentities", "elasticloadbalancing:DescribeLoadBalancers", "iam:ListServerCertificates", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "waf:GetWebACL", "waf:ListWebACLs" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "s3:ListAllMyBuckets" ], "Resource":"arn:aws:s3:::*" } ] }

例 2: ディストリビューションの作成、更新、削除を許可する

以下のアクセス許可ポリシーでは、CloudFront コンソールを使用して、ディストリビューションを作成、更新、削除することをユーザーに許可します。

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "acm:ListCertificates", "cloudfront:CreateDistribution", "cloudfront:DeleteDistribution", "cloudfront:GetDistribution", "cloudfront:GetDistributionConfig", "cloudfront:ListDistributions", "cloudfront:UpdateDistribution", "cloudfront:ListCloudFrontOriginAccessIdentities", "elasticloadbalancing:DescribeLoadBalancers", "iam:ListServerCertificates", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "waf:GetWebACL", "waf:ListWebACLs" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "s3:ListAllMyBuckets", "s3:PutBucketPolicy" ], "Resource":"arn:aws:s3:::*" } ] }

cloudfront:ListCloudFrontOriginAccessIdentities アクセス許可では、ユーザーは、Amazon S3 バケットのオブジェクトを操作するアクセス許可が既存のオリジンアクセスアイデンティティに自動的に付与されるようにできます。また、ユーザーがオリジンアクセスアイデンティティを作成できるようにする場合は、cloudfront:CreateCloudFrontOriginAccessIdentity アクセス権限も許可する必要があります。

例 3: 無効化の作成と一覧表示を許可する

次のアクセス権限ポリシーでは、ユーザーが無効化を作成し、一覧表示できるようにします。これに CloudFront ディストリビューションへの読み取りアクセスが含まれているのは、最初にディストリビューション用の設定を表示して、無効化を作成および表示するためです。

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "acm:ListCertificates", "cloudfront:GetDistribution", "cloudfront:GetStreamingDistribution", "cloudfront:GetDistributionConfig", "cloudfront:ListDistributions", "cloudfront:ListCloudFrontOriginAccessIdentities", "cloudfront:CreateInvalidation", "cloudfront:GetInvalidation", "cloudfront:ListInvalidations", "elasticloadbalancing:DescribeLoadBalancers", "iam:ListServerCertificates", "sns:ListSubscriptionsByTopic", "sns:ListTopics", "waf:GetWebACL", "waf:ListWebACLs" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "s3:ListAllMyBuckets" ], "Resource":"arn:aws:s3:::*" } ] }

例 4: ディストリビューションの作成を許可する

次のアクセス許可ポリシーでは、CloudFront コンソールでディストリビューションを作成して表示するためのアクセス許可をユーザーに付与します。CreateDistribution アクションでは、ディストリビューション ARN (arn:aws:cloudfront::123456789012:distribution/*) のワイルドカードの代わりに、Resource のワイルドカード (*) 文字を指定します。Resource 要素の詳細については、「IAM ユーザーガイド」の「IAM JSON ポリシー要素: Resource」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "cloudfront:CreateDistribution", "Resource": "*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "cloudfront:ListDistributions", "Resource": "*" } ] }