

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon S3 バケットのセッションポリシーの作成
<a name="users-policies-session"></a>

*セッションポリシー*は、Amazon S3 バケットの特定の部分にユーザーを制限する AWS Identity and Access Management (IAM) ポリシーです。 Amazon S3 そのために、リアルタイムでアクセスが評価されます。

**注記**  
 セッションポリシーは Amazon S3 でのみ使用されます。Amazon EFS では、POSIX ファイルパーミッションを使用してアクセスを制限します。

Amazon S3 バケットの特定の部分への同じアクセス権をユーザーのグループに付与する必要がある場合は、セッションポリシーを使用できます。たとえば、あるユーザーのグループが `home` ディレクトリのみにアクセスする必要があるとします。そのユーザーのグループは同じ IAM ロールを共有します。

**注記**  
 セッションポリシーの最大長は 2048 文字です。詳細については、*API リファレンス*で `CreateUser` アクションの「[ポリシーリクエストパラメータ](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#API_CreateUser_RequestSyntax)」を参照してください。

セッションポリシーを作成するには、以下の IAM ポリシーのポリシー変数を使用します。
+ `${transfer:HomeBucket}`
+ `${transfer:HomeDirectory}`
+ `${transfer:HomeFolder}`
+ `${transfer:UserName}`

**重要**  
管理ポリシーで先に表示されている変数を先に表示することはできません。IAM ロールの定義のリストでこれらをポリシー変数として使用することもできません。このような変数は、IAM ポリシーで作成してから、ユーザーの設定時に直接指定します。また、セッションポリシーの `${aws:Username}` 変数を使用することはできません。この変数は IAM ユーザー名を指し、 AWS Transfer Familyが要求するユーザー名ではありません。

## セッションポリシーの例
<a name="example-session-policy"></a>

次のコードは、セッションポリシーの例を示しています。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
          "Sid": "AllowListingOfUserFolder",
          "Action": [
              "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
              "arn:aws:s3:::${transfer:HomeBucket}"
          ],
          "Condition": {
              "StringLike": {
                  "s3:prefix": [
                      "${transfer:HomeFolder}/*",
                      "${transfer:HomeFolder}"
                  ]
              }
          }
      },
      {
          "Sid": "HomeDirObjectAccess",
          "Effect": "Allow",
          "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteObject",
              "s3:GetObjectVersion",
              "s3:GetObjectACL",
              "s3:PutObjectACL"
          ],
          "Resource": "arn:aws:s3:::${transfer:HomeDirectory}/*"
       }
  ]
}
```

**注記**  
前述のポリシーの例では、ユーザーのホームディレクトリがディレクトリであることを示すために、末尾のスラッシュを含むように設定されていることを前提としています。一方、ユーザーの `HomeDirectory` の末尾にスラッシュを付けない場合、それをポリシーの一部として含める必要があります。

前のポリシー例では、`transfer:HomeFolder`、`transfer:HomeBucket`、および`transfer:HomeDirectory` ポリシーパラメータの使用に注目してください。これらのパラメータは、「[HomeDirectory](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectory)」と [API Gateway メソッドを実装する](authentication-api-gateway.md#authentication-api-method) で説明するように、ユーザー用に構成された `HomeDirectory` について設定されています。これらのパラメータには、次のような定義があります。
+ `transfer:HomeBucket` パラメータは `HomeDirectory` の 1 つ目のコンポーネントに置き換わります。
+ `transfer:HomeFolder` パラメータは `HomeDirectory` パラメータの残り部分に置き換わります。
+ `transfer:HomeDirectory` パラメータの先頭に付いていた (`/`) が削除され、`Resource` ステートメントで S3 Amazon リソースネーム (ARN) の一部としてこのパラメータを使用できるようになりました。

**注記**  
 論理ディレクトリを使用する場合（つまり、ユーザーの `homeDirectoryType` が `LOGICAL` である場合）、これらのポリシーパラメータ（`HomeBucket`、`HomeDirectory`、および `HomeFolder`）はサポートされません。

たとえば、Transfer Family ユーザー用に設定された `HomeDirectory` パラメータは `/home/bob/amazon/stuff/` です。
+ `transfer:HomeBucket` は `/home` に設定されます。
+ `transfer:HomeFolder` は `/bob/amazon/stuff/` に設定されます。
+ `transfer:HomeDirectory` は `home/bob/amazon/stuff/` になります。

1 つ目の `"Sid"` は、`/home/bob/amazon/stuff/` から始まるすべてのディレクトリの一覧表示をユーザーに許可します。

2 つ目の `"Sid"` は、ユーザーの `put` およびその同じパス `/home/bob/amazon/stuff/` への `get` アクセスを制限します。

前述のポリシーが使用されている場合、ユーザーがログインすると、ユーザーはホームディレクトリにあるオブジェクトにのみアクセスできます。接続時に、 はこれらの変数をユーザーに適した値 AWS Transfer Family に置き換えます。これによって、同じポリシードキュメントを複数のユーザーに簡単に適用できます。この方法により、IAM ロールのオーバーヘッドおよび Amazon S3 バケットへのユーザーのアクセスを管理するためのポリシー管理が軽減されます。

セッションポリシーを使用すると、業務要件に基づいて、ユーザーごとにアクセス権をカスタマイズすることもできます。詳細については、*IAM ユーザーガイド*の「[AssumeRole、AssumeRoleWithSAML、AssumeRoleWithWebIdentity のアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html)」を参照してください。

**注記**  
AWS Transfer Family は、ポリシーの Amazon リソースネーム (ARN) ではなく、ポリシー JSON を保存します。したがって、IAM コンソールでポリシーを変更するときは、 AWS Transfer Family コンソールに戻り、最新のポリシーコンテンツでユーザーを更新する必要があります。[**ユーザー設定**] セクションの[**ポリシー情報**] タブでユーザーを更新できます。  
を使用している場合は AWS CLI、次のコマンドを使用してポリシーを更新できます。  

```
aws transfer update-user --server-id server --user-name user --policy \
   "$(aws iam get-policy-version --policy-arn policy --version-id version --output json)"
```

## セッションポリシーのネストされた置換
<a name="nested-variable-behavior"></a>

ネストされた置換は、Transfer Family セッションポリシーでは実行されません。セッションポリシーでは、 などのネストされた変数を使用できます`${transfer:HomeDirectory}`。ポリシーが処理されると、外部変数 (例: `${transfer:HomeDirectory}`) が別の変数 (例: \$1`amzn-s3-demo-bucket:/$(transfer:UserName}`) を含む値に置き換えられることがあります。ただし、ネストされた変数は実際のユーザー名 (**johndoe** など) に置き換えられることはありません。

つまり、Transfer Family のセッションポリシーを作成するときは、この動作を考慮し、ポリシー構造と変数の使用が適切に設計されていることを確認する必要があります。ネストされた変数は想定どおりに解決されず、ポリシーは意図したアクセス許可を付与しない場合があります。セッションポリシーを徹底的にテストして検証し、期待どおりに動作することを確認することが重要です。この動作は、Transfer Family 環境にアクセス制御とアクセス許可を実装する際の重要な考慮事項です。

この問題の解決策の 1 つは、セッションポリシーで実際の Amazon S3 バケット名を使用することです。したがって、例えば、セッションポリシー`${transfer:HomeDirectory}`で を指定するのではなく、amzn-s3-demo-bucket が実際のバケットである を使用します`${amzn-s3-demo-bucket/transfer:UserName}`。