IAM を使用したインタラクティブセッション
ここでは、AWS Glue インタラクティブセッションのセキュリティ上の考慮事項について説明します。
トピック
インタラクティブセッションで使用する IAM プリンシパル
AWS Glue インタラクティブセッションでは、2 つの IAM プリンシパルを使用します。
-
[Client principal] (クライアントプリンシパル): クライアントプリンシパル (ユーザーまたはロール) は、プリンシパルのアイデンティティベースの認証情報で構成された AWS Glue クライアントからのインタラクティブセッションの API オペレーションを認証します。例えば、AWS Glue コンソールにアクセスするために通常使用する IAM ロールのプリンシパルがこれに該当する場合があります。また、AWS Command Line Interface に認証情報が使用される IAM ユーザー、またはインタラクティブセッション の Jupyter カーネルで使用される AWS Glue クライアントもこれに該当する場合があります。
-
ランタイムロール: ランタイムロールは、クライアントプリンシパルがインタラクティブセッション API オペレーションに渡す IAM ロールです。AWS Glue がこのロールを使用して、セッションでステートメントを実行します。例えば、このロールは AWS Glue ETL ジョブの実行に使用される場合があります。
詳しくは、「ランタイムロールを設定する 」を参照してください。
クライアントプリンシパルを設定する
インタラクティブセッション API を呼び出すには、アイデンティティポリシーをクライアントプリンシパルにアタッチする必要があります。このロールには、CreateSession
などのインタラクティブセッション API に渡す実行ロールへの iam:PassRole
アクセス権が必要です。例えば、AWSGlueConsoleFullAccess 管理ポリシーを IAM ロールにアタッチできるため、同一または類似のポリシーがアタッチされているアカウント内のすべての IAM ユーザーが、アカウントで作成されたすべてのセッション (ランタイムステートメントやキャンセルステートメントなど) にアクセスできます。
セッションを保護し、特定の IAM ロール (セッションを作成したユーザーに関連するものなど) のみのプライベートセッションにする場合は、AWS Glue インタラクティブセッションのタグベースの TagOnCreate という認可コントロールを使用できます。所有者タグベースのスコープダウンマネージドポリシーが TagOnCreate を使用してセッションをプライベートにする方法について詳しくは、「 TagOnCreate を使用してセッションをプライベートにする 」を参照してください。アイデンティティベースポリシーの詳細については、「AWS Glue のアイデンティティベースポリシー」を参照してください。
ランタイムロールを設定する
AWS Glue がインタラクティブセッションでステートメントを引き受け、実行することを許可するには、IAM ロールを CreateSession API オペレーションに渡す必要があります。ロールには、通常の AWS Glue ジョブの実行に必要なアクセス許可と同じ IAM アクセス許可が必要です。例えば、AWSGlueServiceRole ポリシーを使用して、AWS Glue がユーザーに代わって AWS サービスを呼び出すサービスロールを作成できます。AWS Glue コンソールを使用すると、ユーザーに代わってサービスロールが自動的に作成されるか、既存のものを使用します。独自の IAM ロールを作成し、独自の IAM ポリシーをアタッチして、同様の許可を許可することもできます。
セッションを保護し、作成した ユーザーのみのプライベートセッションにする場合は、AWS Glue インタラクティブセッションの TagOnCreate というタグベースの認可コントロールを使用できます。所有者タグベースのスコープダウンマネージドポリシーが TagOnCreate を使用してセッションをプライベートにする方法について詳しくは、「 TagOnCreate を使用してセッションをプライベートにする 」を参照してください。アイデンティティベースポリシーの詳細については、「AWS Glue のアイデンティティベースのポリシー」を参照してください。IAM コンソールから実行ロールを作成していて、TagOnCreate 機能を使用してサービスをプライベートにしたい場合は、以下の手順に従います。
-
ロールタイプを
Glue
に設定して IAM ロールを作成します。 -
AWS Glue マネージドポリシー AwsGlueSessionUserRestrictedServiceRole をアタッチします。
-
プレフィックスとしてロール名の先頭にポリシー名 AwsGlueSessionUserRestrictedServiceRole を付けます。例えば、AwsGlueSessionUserRestrictedServiceRole-myrole という名前のロールを作成するのであれば、AWS Glue マネージドポリシー AwsGlueSessionUserRestrictedServiceRole をアタッチします。
-
次のような信頼ポリシーをアタッチして、AWS Glue がロールを引き受けることを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }
インタラクティブセッションの Jupyter カーネルでは、iam_role
キーを AWS Command Line Interface プロファイルで指定できます。詳細については、「~/.aws/config でのセッションの設定」を参照してください。AWS Glue ノートブックを使用してインタラクティブセッションと対話している場合は、実行する最初のセルで、%iam_role
マジックの実行ロールを渡すことができます。
TagOnCreate を使用してセッションをプライベートにする
AWS Glue インタラクティブセッションは、名前付きリソースとして、インタラクティブセッション向けにタグ付けとタグベースの認可 (TBAC) をサポートしています。TagResource と UntagResource API を使用する TBAC のほかに、AWS Glue インタラクティブセッションは、CreateSession オペレーションによるセッション作成中にのみ、特定のタグでセッションに「タグ付け」する TagOnCreate 機能をサポートしています。これは、こうしたタグが DeleteSession (つまり UntagOnDelete) から削除されることも意味します。
TagonCreate は、セッションの作成者にセッションをプライベートにするための強力なセキュリティメカニズムとなります。例えば、「owner」RequestTag と ${aws:userId} の値を持つ IAM ポリシーをクライアントプリンシパル (ユーザーなど) にアタッチして、呼び出し元の userId の値と一致する「owner」タグが CreateSession リクエストの userId タグとして提供された場合にのみセッションの作成を許可することができます。このポリシーにより、AWS Glue インタラクティブセッションはセッションリソースを作成し、セッションの作成時にのみ、userId タグでセッションにタグ付けすることができます。さらに、CreateSession 中に渡された実行ロールに「owner」ResourceTag を持つ IAM ポリシーをアタッチすると、セッションへのアクセス (ステートメントの実行など) をセッションの作成者 (つまり ${aws:userId} という値を持つオーナータグ) のみに制限することができます。
TagOnCreate 機能を使用してセッションをセッションの作成者に対してプライベートにするのを簡単にするために、AWS Glue が専用の管理ポリシーとサービスロールを提供します。
IAM AssumeRole プリンシパルを使用して (つまり、IAM ロールを引き受けることによって提供される認証情報を使用して) AWS Glue インタラクティブセッションを作成し、セッションを作成者に対してプライベートにしたい場合は、それぞれ AWSGlueSessionUserRestrictedNotebookPolicy および AWSGlueSessionUserRestrictedNotebookServiceRole と同様のポリシーを使用する必要があります。これらのポリシーでは、AWS Glue が ${aws:PrincipalTag} を使用してオーナータグ値を抽出します。これには、${aws:userId} の値を持つ UserID タグを SessionTag としてロール引き受ける認証情報で渡す必要があります。「ID session tags」(ID セッションタグの受け渡し) を参照してください。認証情報を提供するインスタンスプロファイルで Amazon EC2 インスタンスを使用し、Amazon EC2 インスタンス内でセッションを作成したり、セッションと対話したりする場合は、引き受けるロールの認証情報で ${aws:userId} の値を持つ userID タグを SessionTag として渡す必要があります。
例えば、IAM AssumeRole プリンシパル認証情報を使用してセッションを作成していて、TagOnCreate 機能を使用してサービスをプライベートにする場合は、次の手順に従います。
-
IAM コンソールからランタイムロールを自分で作成します。この AWS Glue マネージドポリシー AwsGlueSessionUserRestrictedNotebookServiceRole をアタッチし、ロール名の前にポリシー名 AwsGlueSessionUserRestrictedNotebookServiceRole を付けてください。例えば、AwsGlueSessionUserRestrictedNotebookServiceRole-myrole という名前のロールを作成し、AWS Glue マネージドポリシー AwsGlueSessionUserRestrictedNotebookServiceRoleをアタッチできます。
-
AWS Glue が上記のロールを引き受けることができるように、以下のような信頼ポリシーを適用します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }
-
プレフィックス AwsGlueSessionUserRestrictedNotebookPolicy で名前が付けられた別のロールを作成し、AWS Glue マネージドポリシー AwsGlueSessionUserRestrictedNotebookPolicy をアタッチして、セッションをプライベートにします。 マネージドポリシーに加えて、次のインラインポリシーをアタッチして、ステップ 1 で作成したロールに iam:PassRole を許可してください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedNotebookServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } } ] }
-
上記の IAM AWS Glue に次のような信頼ポリシーをアタッチして、ロールを引き受けます。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] }] }
注記
オプションで、単一のロール(ノートブックロールなど)を使用して、上記の管理ポリシー AwsGlueSessionUserRestrictedNotebookServiceRole と AwsGlueSessionUserRestrictedNotebookPolicy 両方をアタッチできます また、追加のインラインポリシーをアタッチして、自分のロールの
iam:passrole
を AWS Glue に許可します。最後に、上記の信頼ポリシーをアタッチして、sts:AssumeRole
とsts:TagSession
を許可します。
AWSGlueSessionUserRestrictedNotebookPolicy
AWSGlueSessionUserRestrictedNotebookPolicy は、タグキー「owner」とプリンシパル (ユーザーまたはロール) の AWS ユーザー ID が一致する場合にのみ、ノートブックから AWS Glue インタラクティブセッションを作成するためのアクセスを提供します。詳細については、「ポリシー変数を使用する場所」を参照してください。このポリシーは、AWS Glue Studio から AWS Glue インタラクティブセッションノートブックを作成するプリンシパル (ユーザーまたはロール) にアタッチされます。また、このポリシーは、プリンシパルの AWS ユーザー ID と一致する「owner」タグの値を使用して作成された AWS Glue Studio インタラクティブセッションのリソースと対話するための AWS Glue Studio ノートブックへの十分なアクセスを許可しています。このポリシーは、セッションが作成された後に、AWS Glue セッションリソースから「owner」タグを変更または削除する許可を拒否します。
AWSGlueSessionUserRestrictedNotebookServiceRole
AWSGlueSessionUserRestrictedNotebookServiceRole は、AWS Glue Studio ノートブックを作成したプリンシパル (ユーザーまたはロール) の AWS ユーザー ID と一致する「owner」タグの値を使用して作成された AWS Glue インタラクティブセッションのリソースと対話するための、ノートブックへの十分なアクセスを提供します。詳細については、「ポリシー変数を使用する場所」を参照してください。このサービスロールポリシーは、ノートブックにマジックとして渡されたロールや、CreateSession API に実行ロールとして渡されたロールにアタッチされます。また、このポリシーは、タグキー「owner」と値がプリンシパルの AWS ユーザー ID と一致する場合のみ、ノートブックから AWS Glue インタラクティブセッションを作成することを許可します。このポリシーは、セッションが作成された後に、AWS Glue セッションリソースから「owner」タグを変更または削除する許可を拒否します。このポリシーには、Amazon S3 バケットからの書き込みと読み取り、CloudWatch ログの書き込み、AWS Glue が使用する Amazon EC2 リソースのタグの作成と削除のアクセス許可も含まれます。
ユーザーポリシーを使用してセッションをプライベートにする
AWSGlueSessionUserRestrictedPolicy をアカウント内の各ユーザーにアタッチされた IAM ロールにアタッチして、自分の ${aws:userId} と一致する値を持つ owner タグのみを使用してセッションを作成するように制限できます。AWSGlueSessionUserRestrictedNotebookPolicy および AWSGlueSessionUserRestrictedNotebookServiceRole を使用する代わりに、それぞれ AWSGlueSessionUserRestrictedPolicy および AWSGlueSessionUserRestrictedServiceRole と同様のポリシーを使用する必要があります。詳細については、「アイデンティティベースポリシーを使用する」を参照してください。このポリシーは、作成者、つまり自分の ${aws:userId} を持つ owner タグでセッションを作成したユーザーの ${aws:userId} のみに、セッションへのアクセス範囲を絞り込みます。「ランタイムロールを設定する」の手順に従って IAM コンソールを使用して実行ロールを自分で作成した場合は、AwsGlueSessionUserRestrictedPolicy マネージドポリシーをアタッチすることに加えて、アカウント内の各ユーザーに次のインラインポリシーをアタッチして、以前に作成した実行ロールに iam:PassRole
を許可します。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } }] }
AWSGlueSessionUserRestrictedPolicy
AWSGlueSessionUserRestrictedPolicy は、タグキー「owner」と AWS ユーザー ID に一致する値が提供されている場合にのみ、CreateSession API を使用して AWS Glue インタラクティブセッションを作成するアクセス権を付与します。このアイデンティティポリシーは、CreateSession API を呼び出すユーザーにアタッチされます。このポリシーでは、「owner」タグと AWS Glue ユーザー ID に一致する値を使用して作成された AWS インタラクティブセッションのリソースとの対話も許可されます。このポリシーは、セッションが作成された後に、AWS Glue セッションリソースから「owner」タグを変更または削除する許可を拒否します。
AWSGlueSessionUserRestrictedServiceRole
AWSGlueSessionUserRestrictedServiceRole - セッションを除くすべての AWS Glue リソースへのフルアクセス権限を提供し、ユーザーがユーザーに関連付けられているインタラクティブセッションのみを作成して使用できるようにします。このポリシーには、他の AWS Glue サービスで Glue リソースを管理するために、AWS が必要とするその他のアクセス許可も含まれています。このポリシーでは、その他の AWS Glue リソースの AWS サービスへのタグの追加も許可されます。
IAM ポリシーに関する考慮事項
インタラクティブセッションは AWS Glue の IAM リソースです。これらは IAM リソースであるため、セッションへのアクセスとインタラクションは IAM ポリシーによって管理されます。管理者によって設定されたクライアントプリンシパルまたは実行ロールに添付された IAM ポリシーに基づいて、クライアントプリンシパル (ユーザーまたはロール) は新しいセッションを作成し、独自のセッションや他のセッションと対話することができます。
管理者が、アカウントのすべての AWS Glue リソースにアクセスできる AWSGlueConsoleFullAccess や AWSGlueServiceRole のような IAM ポリシーをアタッチした場合、クライアントプリンシパルは相互にコラボレーションできます。例えば、ポリシーで許可されていれば、ユーザーは他のユーザーによって作成されたセッションと対話することができます。
特定のニーズに合わせたポリシーを設定したい場合は、ポリシーのリソースの設定に関する IAM ドキュメントを参照してください。例えば、あるユーザーに属するセッションを分離するには、AWS Glue インタラクティブセッションがサポートしている TagOnCreate 機能を使用できます。「 TagOnCreate を使用してセッションをプライベートにする 」を参照してください。
インタラクティブセッションは、特定の VPC 条件に基づくセッション作成の制限をサポートします。「条件キーを使って設定を制御するポリシーを制御する」を参照してください。