アクセスコントロールの管理 - AWS Transfer Family

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

アクセスコントロールの管理

注記

このセクションは、サービスマネージド ID プロバイダーにのみ適用されます。カスタム ID プロバイダーを使用する場合、「カスタム ID プロバイダーの使用」を参照してください。

AWS Identity and Access Management (IAM) ポリシーを使用して AWS Transfer Family リソースへのユーザーのアクセスを制御できます。IAM ポリシーは、通常は JSON 形式のステートメントで、リソースへの特定のレベルのアクセスを許可するものです。IAM ポリシーを使用して、ユーザーの実行を許可するファイル操作を定義します。IAM ポリシーを使用すると、ユーザーにアクセス権を与える Amazon S3 バケットも定義できます。ユーザー向けにこれらのポリシーを定義するには、IAM ポリシーとそれに関連付けられた信頼関係を含んでいる AWS Transfer Family の IAM ロールを作成します。

ユーザーごとにロールが割り当てられます。ユーザーがサーバーにログインすると、AWS Transfer Family は IAM ロールがユーザーにマッピングされたと見なします。Amazon S3 バケットにユーザーアクセスを提供する IAM ロールの作成方法については、以下を参照してください。ロールの作成方法とアクセス許可の委譲方法の詳細については、IAM ユーザーガイドの「AWS のサービスに許可を委任するロールの作成」を参照してください。

AWS Transfer Family で使用される IAM ロールのタイプは、サービスロールと呼ばれます。

注記

Amazon S3 バケットが AWS Key Management Service(AWS KMS) を使用して暗号化されている場合、ポリシーに追加のアクセス許可を指定する必要があります。詳細については、「データ暗号化」を参照してください。さらに、IAM ユーザーガイドでもセッションポリシーに関する詳細をご覧いただけます。

Amazon S3 バケットへの読み書きアクセスの許可

以下では、特定の Amazon S3 バケットへの読み書き込みアクセスを許可する IAM ポリシーの作成方法について説明します。この IAM ポリシーを持つ IAM ロールをユーザーに割り当てると、指定された Amazon S3 バケットへの読み書きアクセスがそのユーザーに付与されます。

以下のポリシーでは、Amazon S3 バケットへの読み書きアクセスをプログラミングによって提供します。

{ "Version": "2012-10-17", "Statement": [ { "Sid":"ReadWriteS3", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::bucketname"] }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectVersion", "s3:GetObjectACL", "s3:PutObjectACL" ], "Resource": ["arn:aws:s3:::bucketname/*"] } ] }

ListBucket アクションには、バケット自体のアクセス許可が必要です。PUTGET、および DELETE アクションにはオブジェクトのアクセス許可が必要です。さまざまなエンティティが存在するため、さまざまな Amazon リソースネーム (ARN) を使用してこれらを指定します。

バケットが AWS Key Management Service (AWS KMS) 暗号化に対して有効化されている場合は、ポリシーで追加のアクションを有効化する必要があります。AWS KMS の詳細については、「AWS Key Management Service とは」を参照してください。

さらに指定した Amazon S3 バケットの home ディレクトリのみにユーザーのアクセス権を制限するには、「Amazon S3 バケットのセッションポリシーの作成」を参照してください。

Amazon S3 バケットのセッションポリシーの作成

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

注記

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

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

注記

セッションポリシーの最大長は 2048 文字です。詳細については、API リファレンスCreateUser アクションの「ポリシーリクエストパラメータ」を参照してください。

セッションポリシーを作成するには、以下の IAM ポリシーのポリシー変数を使用します。

  • ${transfer:HomeBucket}

  • ${transfer:HomeDirectory}

  • ${transfer:HomeFolder}

  • ${transfer:UserName}

重要

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

以下のコード例にセッションポリシーの例を示します。

{ "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:HomeFoldertransfer:HomeBucket、およびtransfer:HomeDirectory ポリシーパラメータの使用に注目してください。これらのパラメータは、「HomeDirectory」と API Gateway メソッドを実装する で説明するように、ユーザー用に構成された HomeDirectory について設定されています。これらのパラメータには、次のような定義があります。

  • transfer:HomeBucket パラメータは HomeDirectory の 1 つ目のコンポーネントに置き換わります。

  • transfer:HomeFolder パラメータは HomeDirectory パラメータの残り部分に置き換わります。

  • transfer:HomeDirectory パラメータの先頭に付いていた (/) が削除され、Resource ステートメントで S3 Amazon リソースネーム (ARN) の一部としてこのパラメータを使用できるようになりました。

注記

論理ディレクトリを使用する場合 (つまり、ユーザーの homeDirectoryTypeLOGICAL である場合)、これらのポリシーパラメータ (HomeBucketHomeDirectory、およびHomeFolder) はサポートされません。

たとえば、Transfer Family ユーザー用に設定された HomeDirectory パラメータは /home/bob/amazon/stuff/ です。

  • transfer:HomeBucket/home に設定されます。

  • transfer:HomeFolder/bob/amazon/stuff/ に設定されます。

  • transfer:HomeDirectoryhome/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 のアクセス許可」を参照してください。

注記

AWS Transfer Family は、ポリシーの Amazon リソースネーム (ARN) ではなく、ポリシー JSON を保存します。したがって、IAM コンソールでポリシーを変更する場合、AWS Transfer Family コンソールに戻り、最新のポリシーコンテンツでユーザーを更新する必要があります。[User configuration] (ユーザー設定) セクションの [Policy Info] (ポリシー情報) タブの下でユーザーを更新できます。詳細については、「アクセスコントロールの管理」を参照してください。

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)"

ユーザーの実行を妨げるmkdirS3 バケットで

ユーザーに Amazon S3 バケットでのディレクトリの作成権限を制限できます。そのためには、s3:PutObject アクションを許可するが、キーが「/」(スラッシュ) で終わる場合にこのアクションを拒否する IAM ポリシーを作成します。次のポリシー例では、ユーザーに Amazon S3 バケットへのファイルのアップロードが許可されますが、mkdirAmazon S3 バケットでのコマンドを実行します。

{ "Sid":"DenyMkdir", "Action":[ "s3:PutObject" ], "Effect":"Deny", "Resource":"arn:aws:s3:::my-sftp-bucket/*/" }