

# 単一のアカウント内のリクエストのポリシー評価
<a name="reference_policies_evaluation-logic_policy-eval-basics"></a>

## IAM ロールのポリシー評価
<a name="policy-eval-basics-single-account-role"></a>

次のフローチャートは、単一のアカウント内の IAM ロールに対してポリシー評価の判定がどのように行われるかに関する詳細を示しています。

![単一アカウント内の IAM ロールの評価フローチャート](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/PolicyEvaluationSingleAccountRole.png)


## IAM ユーザーのポリシー評価
<a name="policy-eval-basics-single-account-user"></a>

次のフローチャートは、1 つのアカウント内の IAM ユーザーに対してポリシー評価の判定がどのように行われるかの詳細を示しています。

![単一アカウント内の IAM ユーザーの評価フローチャート](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/PolicyevaluationSingleAccountUser.png)


## アイデンティティベースのポリシーおよびリソースベースのポリシーの評価の例
<a name="reference_policies_evaluation-logic_policies_evaluation_example"></a>

最も一般的なポリシータイプは、アイデンティティベースのポリシーとリソースベースのポリシーです。リソースへのアクセスがリクエストされると、同じアカウント内の**少なくとも 1 つの許可**について、AWS はポリシーによって付与されたすべてのアクセス許可を評価します。これらのポリシーのいずれかが明示的に拒否された場合、許可は無効になります。

**重要**  
同じアカウント内の ID ベースのポリシーまたはリソースベースのポリシーの一方がリクエストを許可し、他方が許可しない場合でも、リクエストは許可されます。

Carlos のユーザー名が `carlossalazar` で、ファイルを Amazon S3 バケット `amzn-s3-demo-bucket-carlossalazar-logs` に保存するとします。

また、次のポリシーを IAM ユーザー `carlossalazar` にアタッチするとします。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3ListRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowS3Self",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::*log*"
        }
    ]
}
```

------

このポリシーの `AllowS3ListRead` ステートメントでは、アカウント内のすべてのバケットを一覧表示することを Carlos に許可します。`AllowS3Self` ステートメントでは、Carlos のユーザー名と同じ名前のバケットに対するフルアクセスを Carlos に許可します。`DenyS3Logs` ステートメントでは、名前に `log` が含まれている S3 バケットへのアクセスを Carlos に拒否します。

さらに、次のリソースベースのポリシー (バケットポリシー) を `amzn-s3-demo-bucket-carlossalazar` バケットにアタッチします。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:user/carlossalazar"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        }
    ]
}
```

------

このポリシーでは、`carlossalazar` ユーザーのみが `amzn-s3-demo-bucket-carlossalazar` バケットにアクセスできることを指定します。

Carlos がファイルを `amzn-s3-demo-bucket-carlossalazar-logs` バケットに保存することをリクエストすると、AWS はこのリクエストに適用されるポリシーを決定します。この例では、アイデンティティベースのポリシーとリソースベースのポリシーのみが適用されます。これらは両方ともアクセス許可ポリシーです。アクセス許可の境界は適用されないため、評価ロジックは次のロジックに限定されます。

![評価フローチャート](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/EffectivePermissionsShort.png)


AWS は、最初にリクエストのコンテキストに適用される `Deny` ステートメントの有無を確認します。アイデンティティベースのポリシーでは、Carlos に対してログ記録用の S3 バケットへのアクセスが明示的に拒否されるため、該当するステートメントが見つかります。Carlos はアクセスが拒否されます。

彼は間違いに気が付いて、ファイルを `amzn-s3-demo-bucket-carlossalazar` バケットに保存しようとします。AWS は `Deny` ステートメントを探しますが、1 つも見つかりません。次に、アクセス許可ポリシーを確認します。ID ベースのポリシーとリソースベースのポリシーの両方で、リクエストが許可されます。従って、AWS でリクエストが許可されます。どちらでもステートメントが明示的に拒否された場合、リクエストは拒否されます。いずれかのポリシータイプでリクエストが許可され、もう一方では許可されない場合でも、リクエストは許可されます。