ワークスペースにAWS Instance Metadata Service v2を適用する

重要

サーバーレスコンピュートリソースは自動的にIMDSv2を適用するため、この設定はサーバーレスコンピュートリソースには適用されません。

インスタンスメタデータサービス(IMDS)は、AWSのコンピュートインスタンス上でローカルに実行され、インスタンスメタデータを取得するために使用されるサービスです。セキュリティ上の重要事項として、インスタンスのメタデータには、インスタンスに関連付けられたロールの資格情報も含まれます。「インスタンスメタデータとユーザーデータ」を参照してください。

IMDSに関するセキュリティ上の懸念に対応して、AWSは一般的な攻撃パターンによるリスクを軽減し、リクエストとレスポンスのフローをセッション指向のフローに置き換える IMDSv2(バージョン2)を作成しました。改善の詳細については、こちらのAWSブログ記事を参照してください。

ワークスペース管理者は、管理設定ページの [インスタンス ] タブ で AWSインスタンス メタデータ v2 を強制する] を有効にすることで、クラスター上で IMDSv2 の使用を強制できます。Databricks では、IMDSv2 を適用するようにワークスペースを構成することをお勧めします。 ワークスペースが 2022 年 10 月 1 日以降に作成された場合、ワークスペースではこの管理者設定がデフォルトで有効になっています。

要件

すべてのクラスターにIMDSv2を移行して適用する方法

警告

IMDSv2を適用すると、既存のワークロードがインスタンスメタデータのフェッチにIMDSv1を使用している場合、失敗します。

新しい非サーバーレスクラスターにIMDSv2を適用するには、以下の手順を実行します。

  1. IMDSv2の適用では、分離されたAWS Glueカタログの使用はサポートされていません。Glueカタログを使用するには、クラスターにSpark confを1行追加し、分離モードを無効にします。

    spark.databricks.hive.metastore.glueCatalog.isolation.enabled false
    
  2. IMDSv2を使用するようにコードをアップグレードします。

    1. ワークロードが使用する既存の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の記事「インスタンスメタデータを取得する」を参照してください。

    2. 変更したコードをテストして、IMDSv2で正しく動作することを確認します。

  3. ワークスペースに対するIMDSv2の適用を有効にします。

    1. ワークスペース管理者として、設定ページに移動します。

    2. コンピュートタブをクリックします。

    3. AWS インスタンスメタデータ v2 の適用をクリックします。

    4. ページを更新して、設定が有効になったことを確認します。

  4. 稼働中のクラスターを再起動し、すべてのEC2インスタンスにIMDSv2が適用されていることを確認します。クラスターがフリートインスタンスプールに接続されている場合は、新しいフリートインスタンスプールを作成し、新しいフリートインスタンスプールを使用してクラスターを再作成します。

  5. CloudWatchのメトリクスMetadataNoTokenを監視して、ワークスペースがアクティブなIMDSv1コールを行っていないことを確認します。