アクセス許可を Lake Formation で制限した後も、IAM ユーザーがデータカタログリソースにアクセスできるのはなぜですか?
AWS Lake Formation のユーザーのテーブルアクセス許可を制限しました (ExcludedColumnNames で SELECT を使用するなど)。しかし、ユーザーは引き続き Amazon Athena を使用してテーブルをクエリできます。
簡単な説明
Lake Formation は、デフォルトで Super アクセス許可を IAMAllowedPrincipalsグループに割り当てます。このアクセス許可は、既存のすべての AWS Glue データカタログリソースに適用されます。[Use only IAM access control] が有効になっている場合、Lake Formation では、新しいリソースへの Super アクセス許可も付与します。つまり、AWS Identity and Access Management (IAM) ポリシーは、データカタログリソースと Amazon Simple Storage Service (Amazon S3) の場所へのアクセスを制御します。詳細については、「Lake Formation 権限モデルへのアップグレードについて」を参照してください。
アクセスを制限するには、デフォルト設定を変更して、新規および既存のデータカタログリソースに対して Lake Formation アクセス許可モデルを使用していることを確認します。
解決方法
データレイク内のすべての新しいデータベースとテーブルのセキュリティ設定を更新するには、「データカタログの設定の変更」を参照してください。
特定の新しいリソースのセキュリティ設定のみを更新するには、リソースを作成し、そのリソースに対するアクセス許可のみを更新します。詳細については、「既存のデータカタログリソースの保護」を参照してください。
デフォルトのセキュリティ設定の変更は、セキュリティ設定の更新後に作成されるリソースにのみ適用されます。
既存のデータベースのセキュリティ設定を変更するには、次の手順を使用して、各データベース上の IAMAllowedPrincipals からアクセス許可を明示的に削除します。
- AWS Lake Formation コンソールを開きます。
- ナビゲーションペイン [Data catalog] (データカタログ) を選択し、[Databases] (データベース) を選択します。
- 更新するデータベースの横にあるラジオボタンを選択します。
- [Actions] (アクション) を選択して、[Edit] (編集) を選択します。
- [Default permissions for newly created tables] (新しく作成されたテーブルに対するデフォルトのアクセス許可) で [Use only IAM access control for new tables in this database] (このデータベースの新しいテーブルには IAM アクセスコントロールのみを使用) をオフにします。
- [Save] (保存) を選択します。
- [Databases] (データベース) ページで、データベースが選択されていることを確認します。[Actions] (アクション)、[Revoke] (取り消し) の順に選択します。
- [Revoke permissions] (アクセス許可の取り消し) ダイアログボックスの [IAM users and roles] (IAM ユーザーとロール) リストで [Group] (グループ) 見出しまでスクロールし、[IAMAllowedPrincipals] を選択します。
- [Database permissions] (データベースのアクセス許可) で [Super] が選択されていることを確認し、[Revoke] (取り消す) を選択します。
既存のテーブルのセキュリティ設定を変更するには、次の手順を実行して各テーブル上の IAMAllowedPrincipals からアクセス許可を明示的に削除します。
- AWS Lake Formation コンソールを開きます。
- ナビゲーションペインで、[Tables] (テーブル) を選択します。
- [Tables] (テーブル) ページで、更新するテーブルの横にあるラジオボタンを選択します。
- [Actions] (アクション)、[Revoke] (取り消し) の順に選択します。
- [Revoke permissions] (アクセス許可の取り消し) ダイアログボックスの [IAM users and roles] (IAM ユーザーとロール) リストで [Group] (グループ) 見出しまでスクロールし、[IAMAllowedPrincipals] を選択します。
- [Table permissions] (テーブルのアクセス許可) で [Super] が選択されていることを確認し、[Revoke] (取り消す) を選択します。
注: データベースまたはテーブルへの Amazon S3 パスが Lake Formation に登録されていることを確認してください。
既存のリソースのセキュリティ設定を変更した後、IAM ユーザーまたはろーふにテーブルのアクセス許可を付与します。これは、Lake Formation コンソールまたは AWS Command Line Interface (AWS CLI) を使用して実行できます。
注: AWS CLI コマンドの実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
SELECT アクセス許可を特定の列に付与する CLI コマンドの例を次に示します。
特定の列に対してのみ SELECT を許可します。
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnNames": ["prodcode","location","period","withdrawals"]}}'
列を除外します (ExcludedColumnNames で指定された列を除くすべての列で SELECT を許可します):
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnWildcard": {"ExcludedColumnNames": ["location"]}}}'
Lake Formation オペレーションを実行するには、プリンシパルに Lake Formation および IAM アクセス許可が必要です。これに加えて、Athena のテーブルをクエリするユーザーには、Athena クエリを実行するアクセス許可も必要です。たとえば、Lake Formation がアクセス許可を管理しているときに Athena からテーブルをクエリするには、次の IAM アクセス許可が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "minimumAWSGlueLakeFormationAthenapermissiontorunselectqueryontable", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:SearchTables", "glue:GetTables", "glue:GetPartitions", "glue:GetDatabases", "glue:GetTable", "glue:GetDatabase", "athena:GetNamespace", "athena:ListWorkGroups", "athena:GetCatalogs", "athena:GetNamespaces", "athena:GetExecutionEngine", "athena:GetExecutionEngines", "athena:GetTables", "athena:GetTable" ], "Resource": "*" }, { "Sid": "AthenaPermissionToRunQueryInAWorkergroup", "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery", "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution", "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery", "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution" ], "Resource": [ "arn:aws:athena:*:*:workgroup/*" ] }, { "Sid": "allowS3PermissionToSaveAthenaQueryResults", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:ListBucket", "s3:GetBucketLocation", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::aws-athena-query-results-*" ] } ] }
関連情報
関連するコンテンツ
- 質問済み 1ヶ月前lg...
- 質問済み 1年前lg...
- 質問済み 1年前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 10ヶ月前
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前