ワークスペースにAWS Instance Metadata Service v2を適用する
重要
サーバーレスコンピュートリソースは自動的にIMDSv2を適用するため、この設定はサーバーレスコンピュートリソースには適用されません。
インスタンスメタデータサービス(IMDS)は、AWSのコンピュートインスタンス上でローカルに実行され、インスタンスメタデータを取得するために使用されるサービスです。セキュリティ上の重要事項として、インスタンスのメタデータには、インスタンスに関連付けられたロールの資格情報も含まれます。「インスタンスメタデータとユーザーデータ」を参照してください。
IMDSに関するセキュリティ上の懸念に対応して、AWSは一般的な攻撃パターンによるリスクを軽減し、リクエストとレスポンスのフローをセッション指向のフローに置き換える IMDSv2(バージョン2)を作成しました。改善の詳細については、こちらのAWSブログ記事を参照してください。
ワークスペース管理者は、管理設定ページの [インスタンス ] タブ で AWSインスタンス メタデータ v2 を強制する] を有効にすることで、クラスター上で IMDSv2 の使用を強制できます。Databricks では、IMDSv2 を適用するようにワークスペースを構成することをお勧めします。 ワークスペースが 2022 年 10 月 1 日以降に作成された場合、ワークスペースではこの管理者設定がデフォルトで有効になっています。
要件
IMDSv2 の適用では、分離されたAWS Glue カタログの使用はサポートされていません。 分離を無効にするには、 「すべてのクラスターに IMDSv2 を移行して適用する方法」を参照してください。
IMDSv2の実行では、サポート対象のDatabricks Runtimeバージョンを使用する必要があります。これらのバージョンはDatabricks Runtimeリリースノートのバージョンと互換性に記載されていますが、Light 2.4 Extended Supportバージョンはサポート対象ではありません。
すべてのクラスターにIMDSv2を移行して適用する方法
警告
IMDSv2を適用すると、既存のワークロードがインスタンスメタデータのフェッチにIMDSv1を使用している場合、失敗します。
新しい非サーバーレスクラスターにIMDSv2を適用するには、以下の手順を実行します。
IMDSv2の適用では、分離されたAWS Glueカタログの使用はサポートされていません。Glueカタログを使用するには、クラスターにSpark confを1行追加し、分離モードを無効にします。
spark.databricks.hive.metastore.glueCatalog.isolation.enabled false
IMDSv2を使用するようにコードをアップグレードします。
ワークロードが使用する既存のAWS CLIとSDKをアップグレードします。Databricks RuntimeにデフォルトでインストールされるSDKは、Databricksによってすでにアップグレードされていることに注意してください。Databricksでは、安全な移行を実現するためにAWSのアップグレードガイドに従うことをお勧めしています。
ワークスペース内のすべてのノートブックを変更して、IMDSv1を使用している既存の部分を削除し、IMDSv2を使用するように置き換えます。
たとえば、以下はIMDSv1 APIクライアントのコードです。
curl http://169.254.169.254/latest/meta-data/
この例では、これをIMDSv2 APIクライアントコードに変更します。
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && \ \ curl -H "X-aws-ec2-metadata-token: $TOKEN" \ -v http://169.254.169.254/latest/meta-data/
詳細なガイダンスと例については、AWSの記事「インスタンスメタデータを取得する」を参照してください。
変更したコードをテストして、IMDSv2で正しく動作することを確認します。
ワークスペースに対するIMDSv2の適用を有効にします。
ワークスペース管理者として、設定ページに移動します。
コンピュートタブをクリックします。
AWS インスタンスメタデータ v2 の適用をクリックします。
ページを更新して、設定が有効になったことを確認します。
稼働中のクラスターを再起動し、すべてのEC2インスタンスにIMDSv2が適用されていることを確認します。クラスターがフリートインスタンスプールに接続されている場合は、新しいフリートインスタンスプールを作成し、新しいフリートインスタンスプールを使用してクラスターを再作成します。
CloudWatchのメトリクス
MetadataNoToken
を監視して、ワークスペースがアクティブなIMDSv1コールを行っていないことを確認します。