

# S3 Tables のアクセス管理
<a name="s3-tables-setting-up"></a>

S3 Tables リソースには、テーブルバケットとそれらに含まれるテーブルが含まれます。リソースを作成した AWS アカウントのルートユーザー (リソース所有者) と、必要なアクセス許可を持つそのアカウント内の AWS Identity and Access Management (IAM) ユーザーは、作成したリソースにアクセスできます。リソース所有者は、リソースにアクセスできる他のユーザーと、ユーザーがリソースに対して実行できるアクションを指定します。Amazon S3 には、S3 リソースへのアクセスを他のユーザーに許可するために使用できるさまざまなアクセス管理ツールがあります。テーブルを AWS Lake Formation と統合している場合は、テーブルと名前空間へのきめ細かなアクセスを管理することもできます。以下のトピックでは、S3 Tables のリソース、IAM アクション、条件キーの概要について説明します。また、S3 Tables のリソースベースポリシーとアイデンティティベースのポリシーの両方の例も示します。

**Topics**
+ [リソース](#s3-tables-resources)
+ [S3 Tables のアクション](#s3-tables-actions)
+ [S3 Tables の条件キー](#s3-tables-conditionkeys)
+ [S3 Tables の IAM アイデンティティベースのポリシー](s3-tables-identity-based-policies.md)
+ [S3 Tables 用のリソースベースのポリシー](s3-tables-resource-based-policies.md)
+ [S3 Tables の AWS マネージドポリシー](s3-tables-security-iam-awsmanpol.md)
+ [SQL セマンティクスを使用したアクセス権の付与](s3-tables-sql.md)
+ [Lake Formation を使用したテーブルまたはデータベースへのアクセスの管理](grant-permissions-tables.md)

## リソース
<a name="s3-tables-resources"></a>

S3 Tables リソースには、テーブルバケットとそれらに含まれるテーブルが含まれます。
+ テーブルバケット – テーブルバケットは、汎用 S3 バケットのセルフマネージドテーブルと比較して、テーブルとプロバイダーの 1 秒あたりのトランザクション (TPS) が高く、クエリスループットが向上するように特別に設計されています。テーブルバケットは、Amazon S3 汎用バケットと同じ耐久性、可用性、スケーラビリティ、パフォーマンス特性を提供します。
+ テーブル – テーブルバケット内のテーブルは Apache Iceberg 形式で保存されます。これらのテーブルは、Iceberg をサポートするクエリエンジンで標準 SQL を使用してクエリできます。

テーブルとテーブルバケットの Amazon リソースネーム (ARN) には、`s3tables` 名前空間、AWS リージョン、AWS アカウント ID、バケット名が含まれます。テーブルとテーブルバケットにアクセスしてアクションを実行するには、次の ARN 形式を使用する必要があります。
+ テーブル ARN 形式:

  `arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-bucket/table/demo-tableID`

## S3 Tables のアクション
<a name="s3-tables-actions"></a>

アイデンティティベースのポリシーまたはリソースベースのポリシーで、特定の IAM プリンシパルに対して、どの S3 Tables アクションを許可または拒否するかを定義します。テーブルアクションは、バケットおよびテーブルレベルの API オペレーションに対応しています。すべてのアクションは、一意の IAM 名前空間 `s3tables` の一部です。

ポリシーでアクションを使用する場合は、通常、同じ名前の API オペレーションまたは CLI コマンドへのアクセスを許可または拒否します。ただし、単独のアクションが複数のオペレーションへのアクセスを制御する場合もあります。例えば、`s3tables:GetTableData` アクションには、`GetObject`、`ListParts`、`ListMultiparts` API オペレーションのアクセス許可が含まれます。

テーブルバケットでサポートされているアクションは次のとおりです。IAM ポリシーまたはリソースポリシーの `Action` エレメントでは、以下のアクションを指定できます。


| [アクション] | 説明 | アクセスレベル | クロスアカウントアクセス | 
| --- | --- | --- | --- | 
| s3tables:CreateTableBucket | 新しいバケットを作成するアクセス許可を付与 | Write | いいえ | 
| s3tables:GetTableBucket | テーブルバケット ARN、テーブルバケット名、作成日を取得するアクセス許可を付与 | Write | はい | 
| s3tables:ListTableBuckets | このアカウント内のすべてのテーブルバケットを一覧表示するアクセス許可を付与 | Read | いいえ | 
| s3tables:CreateNamespace | テーブルバケットに名前空間を作成するアクセス許可を付与 | Write | はい | 
| s3tables:GetNamespace | 名前空間の詳細を取得するアクセス許可を付与 | Read | はい | 
| s3tables:ListNamespaces | テーブルバケット上のすべての名前空間を一覧表示するアクセス許可を付与 | Read | はい | 
| s3tables:DeleteNamespace | テーブルバケット内の名前空間を削除するアクセス許可を付与 | Write | はい | 
| s3tables:DeleteTableBucket | バケットを削除するアクセス許可を付与  | Write | はい  | 
| s3tables:PutTableBucketPolicy | バケットポリシーを追加または置き換えるアクセス許可を付与 | Permissions Management | いいえ | 
| s3tables:GetTableBucketPolicy | バケットポリシーを取得するアクセス許可を付与 | Read | いいえ | 
| s3tables:DeleteTableBucketPolicy | バケットポリシーを削除するアクセス許可を付与 | Permissions Management | いいえ | 
| s3tables:GetTableBucketMaintenanceConfiguration | テーブルバケットのメンテナンス設定を取得するアクセス許可を付与 | Read | はい  | 
| s3tables:PutTableBucketMaintenanceConfiguration | テーブルバケットのメンテナンス設定を追加または置き換えるアクセス許可を付与 | Write | はい | 
| s3tables:PutTableBucketEncryption | テーブルバケットのメンテナンス設定を追加または置換するアクセス許可を付与 | Write | いいえ | 
| s3tables:GetTableBucketEncryption | テーブルバケットの暗号化設定を取得するアクセス許可を付与 | Read | いいえ | 
| s3tables:DeleteTableBucketEncryption | テーブルバケットの暗号化設定を削除するアクセス許可を付与 | Write | いいえ | 

デーブルでは次のアクションがサポートされています。


| [アクション] | 説明 | アクセスレベル | クロスアカウントアクセス | 
| --- | --- | --- | --- | 
| s3tables:GetTableMaintenanceConfiguration | テーブルのメンテナンス設定を取得するアクセス許可を付与 | Read | はい | 
| s3tables:PutTableMaintenanceConfiguration |  テーブルのメンテナンス設定を追加または置き換えるアクセス許可を付与 | Write | はい | 
| s3tables:PutTablePolicy | テーブルポリシーを追加または置き換えるアクセス許可を付与 | Permissions Management | いいえ | 
| s3tables:GetTablePolicy | テーブルポリシーを取得するアクセス許可を付与 | Read | いいえ | 
| s3tables:DeleteTablePolicy | テーブルポリシーを削除するアクセス許可を付与 | Permissions management | いいえ | 
| s3tables:CreateTable | テーブルバケットのテーブルを作成するアクセス許可を付与 | Write | はい | 
| s3tables:GetTable | テーブル情報を取得するアクセス許可を付与 | Read | はい | 
| s3tables:GetTableMetadataLocation | テーブルルートポインタ (メタデータファイル) を取得するアクセス許可を付与 | Read | はい  | 
| s3tables:ListTables | テーブルバケット内のすべてのテーブルを一覧表示するアクセス許可を付与 | Read | はい  | 
| s3tables:RenameTable | テーブルの名前を変更するアクセス許可を付与 | Write | はい  | 
| s3tables:UpdateTableMetadataLocation | テーブルルートポインタ (メタデータファイル) を更新するアクセス許可を付与 | Write | はい  | 
| s3tables:GetTableData | テーブルバケットに保存されているテーブルメタデータとデータオブジェクトを読み取るアクセス許可を付与 | Read | はい | 
| s3tables:PutTableData | テーブルバケットに保存されているテーブルメタデータとデータオブジェクトを書き込むアクセス許可を付与 | Write | はい | 
| s3tables:GetTableEncryption  | テーブルの暗号化設定を取得するアクセス許可を付与 | Write | いいえ | 
| s3tables:PutTableEncryption  | テーブルに暗号化を追加するアクセス許可を付与 | Write | いいえ | 
| s3tables:DeleteTable | テーブルバケットからデータを削除するアクセス許可を付与 | Write | はい | 

テーブルレベルの読み取りおよび書き込みアクションを実行するために、S3 Tables は `GetObject` や `PutObject` などの Amazon S3 API オペレーションをサポートしています。次の表に、オブジェクトレベルのアクションのリストを示します。テーブルに読み取りおよび書き込みアクセス許可を付与する場合は、次のアクションを使用します。


| アクション | S3 オブジェクト API | 
| --- | --- | 
| s3tables:GetTableData | GetObject, ListParts, HeadObject | 
| s3tables:PutTableData | PutObject, CreateMultipartUpload, CompleteMultipartUpload,  UploadPart, AbortMultipartUpload | 

例えば、ユーザーが `GetTableData` アクセス許可を持っている場合、メタデータファイル、マニフェスト、マニフェストリストファイル、parquet データファイルなど、テーブルに関連付けられているすべてのファイルを読み取ることができます。

## S3 Tables の条件キー
<a name="s3-tables-conditionkeys"></a>

S3 Tables は、[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)をサポートしています。

さらに、S3 Tables では、アクセスポリシーで使用できる以下の条件キーを定義します。


| 条件キー | 説明 | タイプ | 
| --- | --- | --- | 
|  s3tables:tableName |  テーブルバケット内のテーブルの名前でアクセスをフィルタリングします。`s3tables:tableName` 条件キーを使用して、この名前条件を満たすテーブルのみにユーザーまたはアプリケーションのアクセスを制限する IAM またはテーブルバケットポリシーを記述できます。  `s3tables:tableName` 条件キーを使用してアクセスを制御すると、テーブル名の変更がこれらのポリシーに影響を与える可能性があることに注意してください。 値の例: "s3tables:tableName":"department\$1"  | String | 
|  s3tables:namespace |  テーブルバケットで作成された名前空間でアクセスをフィルタリングします。 `s3tables:namespace` 条件キーを使用して、特定の名前空間の一部であるテーブルへのユーザーまたはアプリケーションのアクセスを制限する IAM、テーブル、またはテーブルバケットポリシーを記述できます。*値の例:* `"s3tables:namespace":"hr" `  `s3tables:namespace` 条件キーを使用してアクセスを制御すると、名前空間の変更がこれらのポリシーに影響を与える可能性があることに注意してください。  | String | 
|  s3tables:SSEAlgorithm |  テーブルの暗号化に使用するサーバー側の暗号化アルゴリズムでアクセスをフィルタリングします。 `s3tables:SSEAlgorithm` 条件キーを使用して、特定の暗号化タイプで暗号化されたテーブルにユーザーまたはアプリケーションのアクセスを制限する IAM、テーブル、またはテーブルバケットポリシーを記述できます。*値の例:* `"s3tables:SSEAlgorithm":"aws:kms" `  `s3tables:SSEAlgorithm` 条件キーを使用してアクセスを制御する場合、暗号化の変更がこれらのポリシーに影響を与える可能性がある点に注意することが重要です。  | String | 
|  s3tables:KMSKeyArn |  テーブルの暗号化に使用するキーの AWS KMS キー ARN でアクセスをフィルタリングする `s3tables:KMSKeyArn` 条件キーを使用して、特定の KMS キーで暗号化したテーブルにユーザーまたはアプリケーションのアクセスを制限する IAM、テーブル、またはテーブルバケットポリシーを記述できます。 `s3tables:KMSKeyArn` 条件キーを使用してアクセスを制御する場合、KMS キーの変更がこれらのポリシーに影響を与える可能性がある点に注意することが重要です。  | ARN | 