

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# IAM 許可の設定
<a name="data-api-iam"></a>

Amazon Redshift は、`AmazonRedshiftDataFullAccess`マネージドポリシーを提供します。このポリシーは、Amazon Redshift Data API オペレーションへのフルアクセスを提供します。このポリシーでは、Amazon Redshift クラスターまたは Redshift Serverless ワークグループの認証とアクセスに必要な特定の Amazon Redshift、AWS Secrets Manager、IAM API オペレーションへのスコープ付きアクセスも許可されます。

特定のリソースへのアクセスを許可する独自の IAM ポリシーを作成することもできます。ポリシーを作成するには、`AmazonRedshiftDataFullAccess`ポリシーを開始テンプレートとして使用します。作成したポリシーは、Data API にアクセスする必要がある各ユーザーに追加します。

ユーザーに関連付けられた IAM ポリシーの以下の要件を考慮してください。
+ AWS Secrets Manager を使用して認証する場合、ポリシーでは `secretsmanager:GetSecretValue` アクションの使用が許可され、キー `RedshiftDataFullAccess` でタグ付けされたシークレットを取得できることを確認します。
+ 一時的な認証情報を使用してクラスターに対して認証する場合、ポリシーでは、クラスター内の任意のデータベースのデータベースユーザー名 `redshift_data_api_user` に対する `redshift:GetClusterCredentials` アクションの使用が許可されることを確認します。このユーザー名は、データベースにすでに作成されている必要があります。
+ 一時的な認証情報を使用してサーバーレスワークグループへの認証を行う場合は、ポリシーで `redshift-serverless:GetCredentials` キーでタグ付けされたワークグループを取得するための `RedshiftDataFullAccess` アクションの使用が許可されていることを確認します。データベースユーザーが、ソース AWS Identity and Access Management (IAM) ID に対して 1:1 にマップされています。例えば、ユーザー sample\$1user はデータベースユーザー `IAM:sample_user` にマップされ、IAM ロール sample\$1role は `IAMR:sample_role` にマップされます。IAM ID の詳細については、「IAM ユーザーガイド」の「[IAM ID (ユーザー、ユーザーグループ、ロール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)」を参照してください。
+ IAM アクション `redshift-data:GetStatementResult` は、`GetStatementResult` および `GetStatementResultV2` API オペレーションの両方へのアクセスを許可します。

次のリンクから、*IAM ユーザーガイド*で AWS Identity and Access Management についての詳細情報をご覧いただけます。
+ IAM ロールの作成については、「[IAM ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)」を参照してください。
+ IAM ポリシーの作成については、「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。
+ IAM ポリシーをユーザーに追加する方法については、「[IAM ID のアクセス許可の追加および削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)」を参照してください。

## 別のアカウントが所有するクラスターでクエリを実行する
<a name="data-api-run-query-on-others-cluster"></a>

別のアカウントが所有するクラスターでクエリを実行するには、呼び出すアカウントで Data API がロールを引き受けることができる IAM ロールを所有アカウントより提供してもらう必要があります。例えば、アカウント A がアクセスする必要のあるクラスターを、アカウント B が所有しているとします。アカウント B は、AWS マネージドポリシーの `AmazonRedshiftDataFullAccess` をアカウント B の IAM ロールにアタッチできます。次に、アカウント B は、次のような信頼ポリシーを使用してアカウント A を信頼します: ``

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/someRoleA"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

最後に、アカウント A の IAM ロールでアカウント B の IAM ロールを引き受けることができなければなりません。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::111122223333:role/someRoleB"
    }
}
```

------

## AWS アカウント 内のリソースを Amazon Redshift Serverless ワークグループおよび Amazon Redshift クラスターに制限する IAM ロールを指定します。
<a name="data-api-restrict-to-account"></a>

アイデンティティベースのポリシーでリソース ARN を指定して、AWS アカウントの Redshift Serverless ワークグループと Amazon Redshift クラスターへのアクセスを制御できます。この例では、指定した AWS アカウントのワークグループとクラスターのみに対して Data API へのアクセスを許可するポリシーを作成する方法を示します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift-data:CancelStatement",
                "redshift-data:DescribeStatement",
                "redshift-data:GetStatementResult",
                "redshift-data:ListStatements"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "redshift-data:*",
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:workgroup/*",
                "arn:aws:redshift:us-east-1:111122223333:cluster:*"
            ]
        }
    ]
}
```

------

## SQL ステートメント情報へのアクセスをステートメント所有者のみに制限する IAM ポリシーを設定する
<a name="data-api-restrict-to-statement-owner"></a>

デフォルトでは、Amazon Redshift Data API は、`ExecuteStatement` および `BatchExecuteStatement` を呼び出すときに使用される IAM ロールを SQL ステートメントの所有者として扱います。ロールを引き受けることが許可されているユーザーは、結果を含む SQL ステートメントに関する情報にアクセスできます。特定の所有者との IAM ロールセッションへの SQL ステートメント情報アクセスを制限するには、条件 `redshift-data:statement-owner-iam-userid: "${aws:userid}"` を追加します。次の IAM ポリシーは、アクセスを制限します。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift-data:CancelStatement",
                "redshift-data:DescribeStatement",
                "redshift-data:GetStatementResult",
                "redshift-data:ListStatements"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "redshift-data:statement-owner-iam-userid": "${aws:userid}"
                }
            }
        }
    ]
}
```

------

`statement-owner-iam-userid` 条件は `CancelStatement`、`DescribeStatement`、`GetStatementResult`、および `ListStatements` で使用することができます。詳細については、「[Amazon Redshift Data API で定義されるアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftdataapi.html#amazonredshiftdataapi-redshift-data_statement-owner-iam-userid)」を参照してください。

## SQL 結果へのアクセスをセッション所有者のみに制限する IAM ポリシーを設定する
<a name="data-api-restrict-session-owner"></a>

デフォルトでは、Amazon Redshift Data API は、`ExecuteStatement` と `BatchExecuteStatement` を呼び出すときに使用される IAM ロールを、SQL ステートメントを実行するデータベースセッションの所有者として扱います。ロールを引き受けることが許可されているユーザーは、データベースセッションにクエリを送信できます。特定の所有者との IAM ロールセッションへのセッションアクセスを制限するには、条件 ` redshift-data:session-owner-iam-userid: "${aws:userid}"` を追加します。次の IAM ポリシーは、アクセスを制限します。

次の IAM ポリシーでは、セッション所有者のみがステートメントの結果を取得できます。条件 `session-owner-iam-userid` は、指定された `userid` へのリソースアクセスを制限するために使用されます。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [ 
                "redshift-data:ExecuteStatement",
                "redshift-data:BatchExecuteStatement"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "redshift-data:session-owner-iam-userid": "${aws:userid}"
                }
            }
        }
    ]
}
```

------

`ExecuteStatement` および `BatchExecuteStatement` で `session-owner-iam-userid` 条件を使用することができます。詳細については、「[Amazon Redshift Data API で定義されるアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftdataapi.html#amazonredshiftdataapi-redshift-data_statement-owner-iam-userid)」を参照してください。