Athena から Amazon S3 へのアクセスを制御する
アイデンティティベースのポリシー、バケットリソースポリシー、アクセスポイントポリシー、または上記の任意の組み合わせを使用して、Amazon S3 の場所へのアクセスを許可できます。アクターが Athena とやり取りすると、そのアクセス許可が Athena を通過して Athena がアクセスできる内容が決定されます。ユーザーが Athena でクエリを実行するには、Amazon S3 バケットにアクセスする許可が必要であることを意味します。
IAM ポリシーを使用するときは、常に IAM のベストプラクティスに従うようにしてください。詳細については、「IAM ユーザーガイド」の「IAM でのセキュリティベストプラクティス」を参照してください。
Amazon S3 へのリクエストは、aws:SourceIp
で指定された送信元 IP ではなく、Athena のプライベート IPv4 アドレスから送信されることに注意してください。このため、特定の IAM ポリシーで aws:SourceIp
条件を使用して Amazon S3 アクションへのアクセスを拒否することはできません。また、aws:SourceVpc
条件キーまたは aws:SourceVpce
条件キーに基づいて、Amazon S3 リソースへのアクセスを制限または許可することもできません。
注記
IAM アイデンティティセンター認証を使用する Athena ワークグループでは、信頼できる ID 伝達 ID を使用するように S3 アクセス許可を設定する必要があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「S3 Access Grants and directory identities」を参照してください。
Amazon S3 バケットへのアクセスを制御するために、アイデンティティベースのポリシーを使用する
アイデンティティベースのポリシーは、IAM ユーザー、グループ、ロールにアタッチされます。これらのポリシーを使用すると、そのアイデンティティが実行できる内容 (そのアクセス許可) を指定できます。Amazon S3 バケットへのアクセスを制御するために、アイデンティティベースのポリシーを使用できます。
次のアイデンティティベースのポリシーでは、特定の Amazon S3 バケット内のオブジェクトへの Read
および Write
アクセスを許可します。このポリシーを使用するには、イタリック体のプレースホルダーテキストをユーザー独自の値と置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListObjectsInBucket", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"] }, { "Sid": "AllObjectActions", "Effect": "Allow", "Action": "s3:*Object", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/*"] } ] }
バケットリソースポリシーを使用して Amazon S3 バケットへのアクセスを制御する
バケット内のオブジェクトへのアクセスを保護して、適切なアクセス許可を持つユーザーだけがそれらにアクセスできるようにするには、Amazon S3 バケットポリシーを使用します。Amazon S3 ポリシーの作成に関するガイダンスについては、「Amazon S3 ユーザーガイド」の「Amazon S3 コンソールを使用したバケットポリシーの追加」を参照してください。
以下に示すサンプルのアクセス許可ポリシーでは、environment: production
タグキーと値を持つオブジェクトを読み取れるように制限しています。このサンプルポリシーは s3:ExistingObjectTag
条件キーを使用してタグキーと値を指定します。
{ "Version":"2012-10-17", "Statement": [ { "Principal":{"AWS":"arn:aws:iam::
111122223333
:role/JohnDoe
" }, "Effect":"Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals":{"s3:ExistingObjectTag/environment":"production" } ] }
バケットポリシーの例をさらに参照するには、「Amazon S3 ユーザーガイド」の「Amazon S3 バケットポリシーの例」をご覧ください。
Amazon S3 アクセスポイントを使用してバケットアクセスをより正確に制御する
Amazon S3 バケットに共有データセットがある場合、何百ものユースケースでアクセスを管理する単一のバケットポリシーを維持することが困難な場合があります。
Amazon S3 バケットアクセスポイント、ポリシー、エイリアスは、この問題の解決に役立ちます。バケットには複数のアクセスポイントがある場合があり、それぞれに異なる方法でバケットへのアクセスを制御するポリシーがあります。
作成したアクセスポイントごとに、Amazon S3 がアクセスポイントを表すエイリアスを生成します。エイリアスは Amazon S3 バケット名形式であるため、Athena での CREATE TABLE
ステートメントの LOCATION
句でエイリアスを使用できます。Athena のバケットへのアクセスが、エイリアスが表すアクセスポイントのポリシーによって制御されます。
詳細については、Amazon S3 でテーブルの場所を指定する および Amazon S3 ユーザーガイドの「アクセスポイントの使用」を参照してください。
CalledVia コンテキストキーを使用して、Athena から別のサービスへの呼び出しのみを許可する
セキュリティを強化するには、aws:CalledVia グローバル条件コンテキストキーを使用します。aws:CalledVia
条件キーには、別のサービスの呼び出しを許可するサービスのリストが含まれています。例えば、aws:CalledVia
コンテキストキーの Athena サービスプリンシパル名 InvokeFunction
を指定することで、呼び出しが Athena から行われた場合にのみ、athena.amazonaws.com
から AWS Lambda への呼び出しを許可できます。詳細については、「Athena に CalledVia コンテキスト キーを使用する」を参照してください。
追加リソース
Amazon S3 のアクセス権を付与する方法の詳細と例については、以下のリソースを参照してください。
-
「Amazon S3 ユーザーガイド」の「チュートリアル例: アクセスの管理」。
-
Amazon S3 バケット内のオブジェクトへのクロスアカウントアクセスを提供するにはどうすればよいですか?
(AWS ナレッジセンター)