アクセス許可を Lake Formation で制限した後も、IAM ユーザーがデータカタログリソースにアクセスできるのはなぜですか?

最終更新日: 2021 年 3 月 25 日

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 からアクセス許可を明示的に削除します。

  1. AWS Lake Formation コンソールを開きます。
  2. ナビゲーションペイン [Data catalog] (データカタログ) を選択し、[Databases] (データベース) を選択します。
  3. 更新するデータベースの横にあるラジオボタンを選択します。
  4. [Actions] (アクション) を選択して、[Edit] (編集) を選択します。
  5. [Default permissions for newly created tables] (新しく作成されたテーブルに対するデフォルトのアクセス許可) で [Use only IAM access control for new tables in this database] (このデータベースの新しいテーブルには IAM アクセスコントロールのみを使用) をオフにします。
  6. [Save] (保存) を選択します。
  7. [Databases] (データベース) ページで、データベースが選択されていることを確認します。[Actions] (アクション)、[Revoke] (取り消し) の順に選択します。
  8. [Revoke permissions] (アクセス許可の取り消し) ダイアログボックスの [IAM users and roles] (IAM ユーザーとロール) リストで [Group] (グループ) 見出しまでスクロールし、[IAMAllowedPrincipals] を選択します。
  9. [Database permissions] (データベースのアクセス許可) で [Super] が選択されていることを確認し、[Revoke] (取り消す) を選択します。

既存のテーブルのセキュリティ設定を変更するには、次の手順を実行して各テーブル上の IAMAllowedPrincipals からアクセス許可を明示的に削除します。

  1. AWS Lake Formation コンソールを開きます。
  2. ナビゲーションペインで、[Tables] (テーブル) を選択します。
  3. [Tables] (テーブル) ページで、更新するテーブルの横にあるラジオボタンを選択します。
  4. [Actions] (アクション)、[Revoke] (取り消し) の順に選択します。
  5. [Revoke permissions] (アクセス許可の取り消し) ダイアログボックスの [IAM users and roles] (IAM ユーザーとロール) リストで [Group] (グループ) 見出しまでスクロールし、[IAMAllowedPrincipals] を選択します。
  6. [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-*"
            ]
        }
    ]
}

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?