

# Athena から Amazon S3 へのアクセスを制御する
<a name="s3-permissions"></a>

アイデンティティベースのポリシー、バケットリソースポリシー、アクセスポイントポリシー、または上記の任意の組み合わせを使用して、Amazon S3 の場所へのアクセスを許可できます。アクターが Athena とやり取りすると、そのアクセス許可が Athena を通過して Athena がアクセスできる内容が決定されます。ユーザーが Athena でクエリを実行するには、Amazon S3 バケットにアクセスする許可が必要であることを意味します。

IAM ポリシーを使用するときは、常に IAM のベストプラクティスに従うようにしてください。詳細については、「*IAM ユーザーガイド*」の「[IAM でのセキュリティベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-directory-ids.html)」を参照してください。

**Topics**
+ [アイデンティティベースのポリシー](#s3-permissions-identity-based-policies)
+ [バケットリソースポリシー](#s3-permissions-bucket-resource-policies)
+ [アクセスポイントポリシー](#s3-permissions-aliases)
+ [CalledVia コンテキストキー](#s3-permissions-calledvia)
+ [その他のリソース](#s3-permissions-additional-resources)

## Amazon S3 バケットへのアクセスを制御するために、アイデンティティベースのポリシーを使用する
<a name="s3-permissions-identity-based-policies"></a>

アイデンティティベースのポリシーは、IAM ユーザー、グループ、ロールにアタッチされます。これらのポリシーを使用すると、そのアイデンティティが実行できる内容 (そのアクセス許可) を指定できます。Amazon S3 バケットへのアクセスを制御するために、アイデンティティベースのポリシーを使用できます。

次のアイデンティティベースのポリシーでは、特定の Amazon S3 バケット内のオブジェクトへの `Read`および `Write` アクセスを許可します。このポリシーを使用するには、{{イタリック体のプレースホルダーテキスト}}をユーザー独自の値と置き換えます。

------
#### [ JSON ]

****  

```
{
    "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 バケットへのアクセスを制御する
<a name="s3-permissions-bucket-resource-policies"></a>

バケット内のオブジェクトへのアクセスを保護して、適切なアクセス許可を持つユーザーだけがそれらにアクセスできるようにするには、Amazon S3 バケットポリシーを使用します。Amazon S3 ポリシーの作成に関するガイダンスについては、「*Amazon S3 ユーザーガイド*」の「[Amazon S3 コンソールを使用したバケットポリシーの追加](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)」を参照してください。

以下に示すサンプルのアクセス許可ポリシーでは、`environment: production` タグキーと値を持つオブジェクトを読み取れるように制限しています。このサンプルポリシーは `s3:ExistingObjectTag` 条件キーを使用してタグキーと値を指定します。

------
#### [ JSON ]

****  

```
{
    "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 バケットポリシーの例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)」をご覧ください。

## Amazon S3 アクセスポイントを使用してバケットアクセスをより正確に制御する
<a name="s3-permissions-aliases"></a>

Amazon S3 バケットに共有データセットがある場合、何百ものユースケースでアクセスを管理する単一のバケットポリシーを維持することが困難な場合があります。

Amazon S3 バケットアクセスポイント、ポリシー、エイリアスは、この問題の解決に役立ちます。バケットには複数のアクセスポイントがある場合があり、それぞれに異なる方法でバケットへのアクセスを制御するポリシーがあります。

作成したアクセスポイントごとに、Amazon S3 がアクセスポイントを表すエイリアスを生成します。エイリアスは Amazon S3 バケット名形式であるため、Athena での `CREATE TABLE` ステートメントの `LOCATION` 句でエイリアスを使用できます。Athena のバケットへのアクセスが、エイリアスが表すアクセスポイントのポリシーによって制御されます。

詳細については、[Amazon S3 でテーブルの場所を指定する](tables-location-format.md) および「*Amazon S3 ユーザーガイド*」の「[アクセスポイントの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html)」を参照してください。

## CalledVia コンテキストキーを使用して、Athena から別のサービスへの呼び出しのみを許可する
<a name="s3-permissions-calledvia"></a>

セキュリティを強化するには、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) グローバル条件コンテキストキーを使用します。`aws:CalledVia` 条件キーには、別のサービスの呼び出しを許可するサービスのリストが含まれています。例えば、`aws:CalledVia` コンテキストキーの Athena サービスプリンシパル名 `InvokeFunction` を指定することで、呼び出しが Athena から行われた場合にのみ、`athena.amazonaws.com` から AWS Lambda への呼び出しを許可できます。詳細については、「[Athena に CalledVia コンテキスト キーを使用する](security-iam-athena-calledvia.md)」を参照してください。

## その他のリソース
<a name="s3-permissions-additional-resources"></a>

Amazon S3 のアクセス許可を付与する方法の詳細と例については、以下のリソースを参照してください。
+ 「*Amazon S3 ユーザーガイド*」の「[チュートリアル例: アクセスの管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access.html)」。
+ [Amazon S3 バケット内のオブジェクトへのクロスアカウントアクセスを提供するにはどうすればよいですか？](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/)(AWS ナレッジセンター)
+ [Athena で Amazon S3 バケットへのクロスアカウント アクセスを構成する](cross-account-permissions.md).