メニュー
AWS Identity and Access Management
ユーザーガイド

AWS リソースの管理に関するポリシーの例

このセクションでは、AWS サービス内のリソースへのアクセスを制御するポリシーの例をいくつか示します。IAM ユーザーが IAM リソースを管理できるようにする方法を示すポリシー例(たとえば、ユーザーが自分のアクセスキーを変更することを許可するポリシー)については、「IAM リソースの管理に関するポリシーの例」を参照してください。

ユーザーに対し、Amazon S3 の特定のバケットにアクセスすることを許可する

以下のポリシーを IAM ユーザーまたは IAM グループにアタッチすることができます。このポリシーによって、ユーザーまたはグループのメンバーは、特定のバケットおよびそのバケット内のすべてのオブジェクトにアクセスできます。また、ユーザーはアカウント内のすべてのバケットのリストを取得できます(s3:ListAllMyBuckets 権限)。この権限があると、ユーザーは Amazon S3 コンソールを使用してその他のアクションを実行できます。

注記

次のポリシーでは、EXAMPLE-BUCKET-NAME を、使用するバケットの名前で置き換える必要があります。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::EXAMPLE-BUCKET-NAME" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::EXAMPLE-BUCKET-NAME/*" } ] }

ユーザーに対し、Amazon S3 内の個人用の「ホームディレクトリ」にアクセスすることを許可する

以下のポリシーを IAM グループにアタッチすることができます。これにより、そのグループ内の IAM ユーザーは、ユーザー名に一致する、Amazon S3 内の「ホームディレクトリ」へのアクセスにAWS マネジメントコンソールを使用できます。例えば、ユーザー Bobs3://BUCKET-NAME/home/Bob/ にアクセスできますが、s3://BUCKET-NAME/home/Alice/ にはアクセスできません。各ユーザーは自分の「ホームディレクトリ」内で、すべての Amazon S3 アクション(GetObjectListBucketPutObjectDeleteObject など)を実行できます。

注記

以下のポリシーでは、BUCKET-NAME を、作成した home フォルダや個々のユーザーに対するフォルダを格納しているバケットの名前に置き換える必要があります。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::BUCKET-NAME", "Condition": {"StringLike": {"s3:prefix": [ "", "home/", "home/${aws:username}/*" ]}} }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::BUCKET-NAME/home/${aws:username}", "arn:aws:s3:::BUCKET-NAME/home/${aws:username}/*" ] } ] }

前のポリシーの例で使用されるポリシー変数${aws:username})はランタイム時に評価され、リクエストを作成した IAM ユーザーのフレンドリ名を含みます。

コンソールベースのアクセス権限は、ListAllMyBucketsGetBucketLocation、および ListBucket アクションを含むステートメントによって付与されます。これらのアクションは、AWS マネジメントコンソール内のバケットリストを取得できるようにするために必要なものです。上記のポリシーがグループにアタッチされると、グループ内の各ユーザーは自らのホームディレクトリ内でのみ、オブジェクトの読み取り、書き取り、およびリスト化ができます。ポリシーにより、ユーザーはバケット内に存在する他のユーザーのディレクトリを表示することもできます。ただし他のユーザーのディレクトリのコンテンツの読み取り、書き取り、およびリスト化はできません。

Amazon Cognito を使用してサインインしたユーザーに対し、自分の Amazon S3 フォルダにアクセスすることを許可する

Amazon Cognito を使用すると、モバイルアプリでウェブ ID フェデレーションを簡単に使用できます。Amazon Cognito によって、IAM ユーザーを使用する代わりに、Login with Amazon、Facebook、Google などのサードパーティ ID プロバイダ、または Open-ID Connect (OIDC) 互換 ID プロバイダを使用してアプリにサインインしたユーザーに、AWS リソースへのアクセスを提供できます。ウェブ ID フェデレーションに Amazon Cognito を使用するには、フェデレーションユーザーがどのアクセス権限を得るかを決めるロールを作成します。認証されたユーザーに対して 1 つのロールを作成できます。アプリで認証されていない(ゲスト)ユーザーを許可する場合、それらのユーザー向けのアクセス権限を定義する 2 番目のロールを作成できます。

Amazon Cognito の詳細については、以下のものを参照してください。

以下の例は、Amazon Cognito を使用するモバイルアプリで使用できるポリシーを示しています。この条件のもとでは、ユーザーは、オブジェクトの名前にプロバイダ名(ここでは cognito)、アプリケーションのフレンドリ名(ここでは mynumbersgame)、およびフェデレーションユーザーの ID が含まれている場合のみ、EXAMPLE-BUCKET-NAME で表される Amazon S3 バケット内のオブジェクトにアクセスできます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::EXAMPLE-BUCKET-NAME"], "Condition": {"StringLike": {"s3:prefix": ["cognito/mynumbersgame/"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::EXAMPLE-BUCKET-NAME/cognito/mynumbersgame/${cognito-identity.amazonaws.com:sub}", "arn:aws:s3:::EXAMPLE-BUCKET-NAME/cognito/mynumbersgame/${cognito-identity.amazonaws.com:sub}/*" ] } ] }

ユーザーがユーザー名と一致する名前を持つ DynamoDB テーブルのすべてのアクションにアクセスできるようにする

以下のポリシーを IAM グループにアタッチできます。このポリシーは、ユーザーの名前と一致する DynamoDB テーブルにプログラムでアクセスする権限をユーザーに与えます。例えば、Bob という名のユーザーは、Bob という名のテーブル内のすべての DynamoDB アクションを実行できます。ポリシーは、自らの DynamoDB テーブルを管理することを許可されているユーザーが含まれているグループにアタッチすることができます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:AWS-REGION-IDENTIFIER:ACCOUNT-ID-WITHOUT-HYPHENS:table/${aws:username}" } ] }

ポリシーが使用するポリシー変数${aws:username})はランタイム時に評価され、リクエストを作成した IAM ユーザーのフレンドリ名を含みます。

ユーザーが特定のタグを持つ Amazon EBS ボリュームおよび Amazon EC2 インスタンスを管理できるようにする

以下のポリシー例は、ユーザーに対し、タグ「volume_user=IAM user name」を持つ Amazon EBS ボリュームを、タグ「department=dev」を持つ Amazon EC2 インスタンスにアタッチすること、およびそのインスタンスからボリュームをデタッチすることを許可します。このポリシーを IAM グループにアタッチすると、${aws:username} ポリシー変数は IAM ユーザーのユーザー名に解決され、ポリシーでは、グループのアクセス権限で各 IAM ユーザーに、値として IAM ユーザー名を持つ volume_user という名前のタグを持つボリュームをアタッチまたはデタッチするアクセス権限が付与されます。

Amazon EC2 リソースへのアクセスを制御する IAM ポリシーの作成の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 のリソースに対するアクセスの制御」を参照してください。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:AWS-REGION-IDENTIFIER:ACCOUNT-ID-WITHOUT-HYPHENS:instance/*", "Condition": {"StringEquals": {"ec2:ResourceTag/department": "dev"}} }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:AWS-REGION-IDENTIFIER:ACCOUNT-ID-WITHOUT-HYPHENS:volume/*", "Condition": {"StringEquals": {"ec2:ResourceTag/volume_user": "${aws:username}"}} } ] }

特定の AWS コマンドを実行するため、特定の Amazon EC2 インスタンスのみ許可する

Amazon EC2 インスタンスから呼び出される AWS コマンドは、インスタンスプロファイルにアタッチされたロールに付与されるアクセス許可により実行されます。 次のサンプルポリシーは、そのロールにアタッチされている場合、インスタンスのコマンドにより、同じインスタンスに関連付けられたボリュームをアタッチしたりデタッチしたりできます。 インスタンスのアイデンティティは Condition 要素中の ARN で指定します。 SourceInstanceArn 条件をポリシーの 一つの ステートメントに追加することにより、同様のアタッチされたポリシーのある他のインスタンスが実行できないような独特のタスクを実行できるインスタンスを例外として一群の中から特定することができます。追加しなければアクセス権限が多くの Amazon EC2 インスタンスに与えられてしまいます。 以下の例では、インスタンス ID により特定されるインスタンスのみが、独自のものも含め、アカウントのインスタンスへボリュームをアタッチ、またはデタッチできます。 ポリシーにある可能性があるそのほかのステートメントの要素は、この一つのステートメントの制限によって影響されません。

Amazon EC2 リソースへのアクセスを制御する IAM ポリシーの作成の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 のリソースに対するアクセスの制御」を参照してください。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": [ "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:instance/*" ], "Condition": { "ArnEquals": { "ec2:SourceInstanceARN": "arn:aws:ec2:region:account-id:instance/instance-id" } } } ] }

条件を使用してアクセス権限が許可される場合を制限する

次のポリシー例は、ユーザーが多要素認証 (MFA) を使用して認証を行った場合にのみ、およびアクションが 2015 年 4 月 20 日から 2015 年 4 月 24 日 (UTC) まで行われる場合にのみユーザーがすべての Amazon EC2 リソースですべての Amazon EC2 アクションを実行できるようにします。このポリシーは、論理 AND を使用して評価される複数条件の例を示しています。

Copy
{ "Version": "2012-10-17", "Statement": { "Action": "ec2:*", "Effect": "Allow", "Resource": "*", "Condition": { "Bool": {"aws:MultiFactorAuthPresent": true}, "DateGreaterThan": {"aws:CurrentTime": "2015-04-20T00:00:00Z"}, "DateLessThan": {"aws:CurrentTime": "2015-04-24T00:00:00Z"} } } }

ポリシーに条件を追加する方法の詳細については、「ポリシー要素リファレンス」の「条件」を参照してください。

AWS 製品およびリソースの特定のセットを除いて、すべてのアクセスを拒否する

次のポリシーは、以下へのアクセス権限のみをユーザーに付与します。

  • EXAMPLE-TABLE-NAME で表された名前を持つ DynamoDB テーブル。

  • EXAMPLE-BUCKET-NAME で表された名前を持つ、AWS アカウントの社内用 Amazon S3 バケット、およびそれに含まれるすべてのオブジェクト。

ポリシーは、明示的な拒否"Effect":"Deny")を含みます。NotAction および NotResource エレメントと併用することで、ユーザーは、ポリシーで指定された AWS アクションまたはリソースを除いて、すべての AWS アクションまたはリソースを使用できなくなります。別のポリシーでアクセス権限が付与されていても関係ありません。(明示的な拒否のステートメントは、許可のステートメントよりも優先されます)。詳細については、「IAM ポリシーの評価論理」を参照してください。

注記

以下のポリシーは、API アクセスに対してのみ機能します。AWS マネジメントコンソールを使用してバケットアクセス権限を付与する方法の詳細については、『Amazon Simple Storage Service 開発者ガイド』の「例: IAM ポリシーを使用したバケットへのアクセスの制御」を参照してください。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:*", "s3:*" ], "Resource": [ "arn:aws:dynamodb:AWS-REGION-IDENTIFIER:ACCOUNT-ID-WITHOUT-HYPHENS:table/EXAMPLE-TABLE-NAME", "arn:aws:s3:::EXAMPLE-BUCKET-NAME", "arn:aws:s3:::EXAMPLE-BUCKET-NAME/*" ] }, { "Effect": "Deny", "NotAction": [ "dynamodb:*", "s3:*" ], "NotResource": [ "arn:aws:dynamodb:AWS-REGION-IDENTIFIER:ACCOUNT-ID-WITHOUT-HYPHENS:table/EXAMPLE-TABLE-NAME", "arn:aws:s3:::EXAMPLE-BUCKET-NAME", "arn:aws:s3:::EXAMPLE-BUCKET-NAME/*" ] } ] }

承認された IP アドレスまたは範囲以外からのブロックリクエスト

会社のすべてのユーザーが属している IAM グループにこのポリシーを適用すると、便利な場合があります。ポリシーは、192.0.2.0 から 192.0.2.255 または 203.0.113.0 から 203.0.113.255 の IP 範囲以外からリクエストを受信すると、アカウント内のすべてのアクションへのアクセスを拒否します。(ポリシーは、会社の IP アドレスは指定された範囲内にあると仮定しています)。特定のアクションを許可する他のポリシーと組み合わせてこのポリシーを使用します。別のポリシーによってユーザーまたはグループにどのようなアクションが許可されているかにかかわらず、リクエストが会社の IP アドレスの範囲外からのものであれば、このポリシーによりすべてのアクションは拒否されることが保証されます。

重要

aws:SourceIp 条件キーは、テストされた API をユーザーとして直接呼び出す場合に IAM ポリシーでのみ機能します。代わりにサービスを使用してターゲットサービスを呼び出した場合、ターゲットサービスは元のユーザーの IP アドレスではなく呼び出し元サービスの IP アドレスを認識します。これは、AWS CloudFormation を使用して Amazon EC2 を呼び出すことでインスタンスを自動的に作成した場合などに生じることがあります。現在のところ、IAM ポリシーで評価を行うために、発信元サービスを通じて元の IP アドレスをターゲットサービスに渡す方法はありません。これらのタイプのサービス API 呼び出しでは、aws:SourceIp 条件キーを使用しないでください。

Copy
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": {"NotIpAddress": {"aws:SourceIp": [ "192.0.2.0/24", "203.0.113.0/24" ]}} } }

ユーザーによる Policy Simulator へのアクセスの許可

IAM Policy Simulator は、IAM およびリソースベースのポリシーをテストおよびトラブルシューティングするツールです。Policy Simulator の使用の詳細については、「IAMPolicy Simulator を使用した IAM ポリシーのテスト」を参照してください。デフォルトでは、ユーザーは、ユーザー、グループ、またはロールにまだアタッチされていないポリシーをテストできます。そのためには、それらのポリシーを Policy Simulator に入力またはコピーします。それらのポリシーはシミュレーションでのみ使用され、機密情報が公開されることはありません。AWS アカウントの IAM ユーザー、グループ、またはロールにアタッチされたポリシーのテストをユーザーに許可するには、それらのポリシーを取得する権限をユーザーに提供する必要があります。リソースベースのポリシーをテストするには、リソースのポリシーを取得するための権限がユーザーに必要です。

次の例は、現在の AWS アカウントのユーザー、グループ、またはロールにアタッチされているあらゆるポリシーのシミレーションを、ユーザーに許可します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iam:GetPolicy", "iam:GetUserPolicy", "iam:GetUser", "iam:ListUsers" ], "Effect": "Allow", "Resource":"*" } ] }

以下の例は、ユーザーがパス developers を所有している場合に限り、ポリシーのシミュレーションことを許可します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iam:GetPolicy", "iam:GetUserPolicy" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "iam:GetUser", "iam:ListUsers" ], "Effect": "Allow", "Resource": "arn:aws:iam::123456789012:user/developers/*" } ] }

以下の例では、ユーザーは example-bucket という名前の S3 バケットでリソースベースのポリシーをシミュレートできます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketPolicy", "s3:GetObjects" ], "Effect": "Allow", "Resource":"arn:aws:s3:::example-bucket/*" } ] }

ユーザーによる Policy Simulator API へのアクセスの許可

Policy Simulator API の GetContextKeyForPrincipalPolicy および SimulatePrincipalPolicy は、API を呼び出す IAM ユーザー、グループ、またはユーザーのロールに対して付与される、アクセス権限に関する情報を返すことができます。これらの API に対するアクセス権限を、承認されたユーザーのみに付与することができます。その他のユーザーは GetContextKeyForCustomPolicy および SimulateCustomPolicy を呼び出すことができます。これは、その他のユーザーは承認されたユーザーから提供されるポリシーを評価するだけで、機密情報が開示されることはないからです。こうすることで、IAM Policy Simulator をブラウザで使用することもできます。

次の例は、機密性の低い「カスタム」API へのアクセスを許可する方法を示しています。「プリンシパル」API はデフォルトの暗黙的な拒否によって制限されているので、ユーザーはエンティティにアタッチされているポリシーをシミュレートできません。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iam:GetContextKeysForCustomPolicy", "iam:SimulateCustomPolicy" ], "Effect": "Allow", "Resource": "*" } ] }

以下の例は、ユーザーがパス developers を所有している場合に限り、ポリシーのシミュレーションことを許可します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iam:GetContextKeysForPrincipalPolicy", "iam:SimulatePrincipalPolicy" ], "Effect": "Allow", "Resource":"arn:aws:iam::123456789012:user/developers/*" } ] }

次の例は、現在の AWS アカウントにアタッチされているあらゆるポリシーのシュミレーションを、ユーザーに許可します。

Copy
{ "Version" : "2012-10-17", "Statement" : [ { "Action" : [ "iam:GetContextKeysForCustomPolicy", "iam:GetContextKeysForPrincipalPolicy", "iam:SimulateCustomPolicy", "iam:SimulatePrincipalPolicy" ], "Effect" : "Allow", "Resource" : "*" } ] }

ユーザーがサーバー証明書をアップロードして Elastic Load Balancing で使用できるようにする

次の例では、ユーザーが SSL/TLS サーバー証明書をアップロードして管理し、Elastic Load Balancing バランサーにアタッチすることができます。

Copy
{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "iam:DeleteServerCertificate", "iam:GetServerCertificate", "iam:ListServerCertificates", "iam:UpdateServerCertificate", "iam:UploadServerCertificate", "elasticloadbalancing:SetLoadBalancerListenerSSLCertificate" ], "Resource": [ "*" ] } ] }