

# アクセスポイントを使用するための IAM ポリシーの設定
<a name="access-points-policies"></a>

Amazon S3 アクセスポイントは AWS Identity and Access Management (IAM) リソースポリシーをサポートしています。これにより、リソース、ユーザー、その他の条件別にアクセスポイントの使用を制御できます。アプリケーションやユーザーがアクセスポイントを介してオブジェクトにアクセスできるようにするには、アクセスポイントと基になるバケットまたは Amazon FSx ファイルシステムの両方でリクエストを許可する必要があります。

**重要**  
アクセスポイントポリシーに含めた制限は、そのアクセスポイントを介したリクエストにのみ適用されます。アクセスポイントをバケットにアタッチしても、基盤となるリソースの動作は変わりません。アクセスポイントを介していないバケットに対する既存のすべてのオペレーションは、以前と同じように動作します。

IAM リソースポリシーを使用する際、ポリシーを保存する前に、AWS Identity and Access Management Access Analyzer からのセキュリティ警告、エラー、一般的な警告、および提案を解決してください。IAM Access Analyzer は、IAM [ポリシーの文法](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)と[ベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)に照らしてポリシーチェックを行います。これらのチェックにより、機能的でセキュリティのベストプラクティスに準拠したポリシーを作成するのに、役立つ結果とレコメンデーションが示されます。

IAM Access Analyzer を使用したポリシーの検証の詳細については、「*IAM ユーザーガイド*」の「[IAM Access Analyzer のポリシーの検証](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)」を参照してください。IAM Access Analyzer によって返される警告、エラー、および提案のリストを表示するには、「[IAM Access Analyzer ポリシーチェックリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html)」を参照してください。

## アクセスポイントのポリシーの例
<a name="access-points-policy-examples"></a>

以下の例は、アクセスポイントを介したリクエストを制御するための IAM ポリシーの作成方法を示しています。

**注記**  
アクセスポイントポリシーで付与されるアクセス許可は、基になるバケットでも同じアクセスが許可される場合にのみ有効です。このためには以下の 2 つの方法があります。  
**(推奨)**「[アクセスポイントへのアクセスコントロールの委任](#access-points-delegating-control)」の説明に従って、バケットからアクセスポイントにアクセスコントロールを委任します。
アクセスポイントポリシーに含まれているものと同じアクセス許可を、基になるバケットのポリシーに追加します。例 1 のアクセスポイントポリシーの例は、必要なアクセスを許可するように基になるバケットポリシーを変更する方法を示しています。

**Example 1 - アクセスポイントポリシーによる付与**  
以下のアクセスポイントポリシーは、アカウント `123456789012` の IAM ユーザー `Jane` に、アカウント *`123456789012`* のアクセスポイント *`my-access-point`* を介して、オブジェクト (プレフィックスが `Jane/` であるオブジェクト) を `GET` および `PUT` するアクセス許可を付与します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Jane"
        },
        "Action": ["s3:GetObject", "s3:PutObject"],
        "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/Jane/*"
    }]
}
```

**注記**  
アクセスポイントポリシーで *`Jane`* に対して効果的にアクセスを許可するには、基になるバケットでも *`Jane`* に対して同じアクセスを許可する必要があります。「[アクセスポイントへのアクセスコントロールの委任](#access-points-delegating-control)」で説明しているように、バケットからアクセスポイントにアクセスコントロールを委任できます。または、基になるバケットに以下のポリシーを追加して、Jane に必要なアクセス許可を付与できます。`Resource` エントリはアクセスポイントとバケットのポリシーでは異なります。  

****  

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

**Example 2 - タグ条件付きのアクセスポイントポリシー**  
以下のアクセスポイントポリシーは、アカウント *`123456789012`* の IAM ユーザー *`Mateo`* に、アカウント *`123456789012`* のアクセスポイント *`my-access-point`* を介して、オブジェクト (タグキーが *`data`*、値が *`finance`* であるオブジェクト) を `GET` するアクセス許可を付与します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Mateo"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/*",
        "Condition": {
            "StringEquals": {
                "s3:ExistingObjectTag/data": "finance"
            }
        }
    }]
}
```

**Example 3 – バケットのリスト取得を許可するアクセスポイントポリシー**  
以下のアクセスポイントポリシーでは、アカウント *`123456789012`* の IAM ユーザー `Arnav` に、アカウント *`123456789012`* のアクセスポイント *`my-access-point`* の基になるバケットに含まれるオブジェクトを表示するアクセス許可を付与します。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Arnav"
        },
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point"
    }]
}
```

**Example 4 – サービスコントロールポリシー**  
次のサービスコントロールポリシーは、すべての新しいアクセスポイントを 仮想プライベートクラウド (VPC) ネットワークオリジンで作成することを要求します。このポリシーを適用すると、組織内のユーザーは、インターネットからアクセス可能なアクセスポイントを新規に作成できなくなります。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Deny",
        "Action": "s3:CreateAccessPoint",
        "Resource": "*",
        "Condition": {
            "StringNotEquals": {
                "s3:AccessPointNetworkOrigin": "VPC"
            }
        }
    }]
}
```

**Example 5 – S3 オペレーションを VPC ネットワークオリジンに制限するバケットポリシー**  
次のバケットポリシーは、すべての S3 オペレーションからバケット `amzn-s3-demo-bucket` へのアクセスを、VPC をネットワークオリジンとするアクセスポイントに制限します。  
この例で示しているようなステートメントを使用する前に、アクセスポイントでサポートされない機能 (クロスリージョンレプリケーションなど) が不要であることを確認してください。  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:BypassGovernanceRetention",
                "s3:DeleteObject",
                "s3:DeleteObjectTagging",
                "s3:DeleteObjectVersion",
                "s3:DeleteObjectVersionTagging",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectLegalHold",
                "s3:GetObjectRetention",
                "s3:GetObjectTagging",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging",
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionAcl",
                "s3:PutObjectVersionTagging",
                "s3:RestoreObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:AccessPointNetworkOrigin": "VPC"
                }
            }
        }
    ]
}
```

## 条件キー
<a name="access-points-condition-keys"></a>

S3 アクセスポイントには、IAM ポリシーでリソースへのアクセスを制御するために使用できる条件キーがあります。以下の条件キーは IAM ポリシーの一部にすぎません。すべてのポリシーの例については、「[アクセスポイントのポリシーの例](#access-points-policy-examples)」、「[アクセスポイントへのアクセスコントロールの委任](#access-points-delegating-control)」および「[クロスアカウントアクセスポイントへのアクセス許可の付与](#access-points-cross-account)」を参照してください。

**`s3:DataAccessPointArn`**  
この例は、アクセスポイントの ARN の照合に使用できる文字列です。次の例では、リージョン *`us-west-2`* の AWS アカウント *`123456789012`* のすべてのアクセスポイントを照合します。  

```
"Condition" : {
    "StringLike": {
        "s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*"
    }
}
```

**`s3:DataAccessPointAccount`**  
この例は、アクセスポイントの所有者のアカウント ID を照合するために使用できる文字列演算子です。次の例では、AWS アカウント *`123456789012`* が所有するすべてのアクセスポイントを照合します。  

```
"Condition" : {
    "StringEquals": {
        "s3:DataAccessPointAccount": "123456789012"
    }
}
```

**`s3:AccessPointNetworkOrigin`**  
この例は、ネットワークオリジン (`Internet` または `VPC`) の照合に使用できる文字列演算子です。次の例では、VPC オリジンを持つアクセスポイントのみを照合します。  

```
"Condition" : {
    "StringEquals": {
        "s3:AccessPointNetworkOrigin": "VPC"
    }
}
```

Amazon S3 での条件キーの使用についての詳細は、「サービス認可リファレンス」の「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

## アクセスポイントへのアクセスコントロールの委任
<a name="access-points-delegating-control"></a>

バケットのアクセスコントロールをバケットのアクセスポイントに委任できます。以下のバケットポリシーの例では、バケット所有者のアカウントが所有するすべてのアクセスポイントへのフルアクセスを許可しています。したがって、このバケットへのすべてのアクセスは、そのアクセスポイントにアタッチされているポリシーによってコントロールされます。バケットへの直接アクセスを必要としないすべてのユースケースでは、この方法でバケットを設定することをお勧めします。

**Example 6 - アクセスコントロールをアクセスポイントに委任するバケットポリシー**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement" : [
    {
        "Effect": "Allow",
        "Principal" : { "AWS": "*" },
        "Action" : "*",
        "Resource" : [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*"],
        "Condition": {
            "StringEquals" : { "s3:DataAccessPointAccount" : "111122223333" }
        }
    }]
}
```

## クロスアカウントアクセスポイントへのアクセス許可の付与
<a name="access-points-cross-account"></a>

別のアカウントが所有するバケットへのアクセスポイントを作成するには、まずバケット名とアカウント所有者 ID を指定してアクセスポイントを作成する必要があります。次に、バケット所有者は、アクセスポイントからのリクエストを許可するようにバケットポリシーを更新する必要があります。アクセスポイントの作成は、アクセスポイントがバケットの内容へのアクセスを提供しないという点で DNS CNAME の作成と似ています。すべてのバケットアクセスはバケットポリシーによって制御されます。次のバケットポリシーの例では、信頼できる AWS アカウント が所有するアクセスポイントからのバケットで、`GET` および `LIST` リクエストを許可します。

*Bucket ARN* は、バケットの ARN に置き換えます。

**Example 7 — 別の AWS アカウント にアクセス許可を委任するバケットポリシー**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement" : [
    {
        "Effect": "Allow",
        "Principal" : { "AWS": "*" },
        "Action" : ["s3:GetObject","s3:ListBucket"],
        "Resource" : ["arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*"],
        "Condition": {
            "StringEquals" : { "s3:DataAccessPointAccount" : "Access point owner's account ID" }
        }
    }]
}
```
クロスアカウントアクセスポイントは、S3 バケットにアタッチされたアクセスポイントでのみ使用できます。別の AWS アカウントが所有する Amazon FSx ファイルシステムのボリュームにアクセスポイントをアタッチすることはできません。