Włącz federację tożsamości obciążeń dla obciążeń AWS IAM

Obciążenia uruchomione w AWS mogą uwierzytelniać się w usłudze Azure Databricks bez użycia długoterminowych poświadczeń, wymieniając token tożsamości OIDC podpisany przez AWS. Zalecana ścieżka wywołuje interfejs API usługi AWS STS GetWebIdentityToken , który działa w dowolnym miejscu, w którym obciążenie ma poświadczenia platformy AWS.

Przypadki użycia

  • Funkcje lambda wywołujące interfejsy API Azure Databricks (wyzwalanie zadań, wykonywanie zapytań względem magazynów SQL)
  • Potoki ETL oparte na EC2/ECS, uwierzytelniające się w Azure Databricks bez sekretów
  • Obciążenia uczenia maszynowego oparte na EKS, uzyskujące dostęp do punktów końcowych udostępniania modeli
  • Wzorce międzykontowe, w których obciążenia robocze na jednym koncie AWS federują się z kontem Azure Databricks zarządzanym przez inny zespół
  • Poprawa poziomu zabezpieczeń przez wyeliminowanie długowiecznych tokenów PAT usługi Azure Databricks lub sekretów z usługi AWS Secrets Manager

Wymagania wstępne dotyczące platformy AWS

Aby włączyć federację tożsamości dla obciążeń AWS IAM, należy wykonać następujące kroki.

Krok 1: Włącz federację tożsamości AWS IAM dla ruchu wychodzącego

Włącz federację tożsamości wychodzących na koncie platformy AWS:

import boto3
boto3.client('iam').enable_outbound_web_identity_federation()

Można to również włączyć w konsoli IAM w obszarze Ustawienia konta>Włącz „Federację wychodzącej tożsamości sieciowej”.

Krok 2. Udzielanie sts:GetWebIdentityToken uprawnień

Nadaj roli IAM obciążenia sts:GetWebIdentityToken uprawnienie:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:GetWebIdentityToken"],
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringEquals": {
          "sts:IdentityTokenAudience": "databricks"
        },
        "NumericLessThanEquals": {
          "sts:DurationSeconds": 300
        }
      }
    }
  ]
}

Note

Warunek dotyczący grupy odbiorców zapewnia, że rola może żądać wyłącznie tokenów kierowanych do usługi Azure Databricks. Warunek czasu trwania ogranicza okres istnienia tokenu do 300 sekund. Możesz dostosować czas trwania do 3600 sekund w zależności od potrzeb związanych z obciążeniem, ale zalecane są krótsze okresy istnienia.

Krok 3. Zanotuj adres URL wystawcy specyficznego dla konta

Pobierz adres URL wystawcy specyficznego dla konta:

import boto3
info = boto3.client('iam').get_outbound_web_identity_federation_info()
print(info['IssuerUrl'])  # https://<uuid>.tokens.sts.global.api.aws

Tworzenie zasad federacji

Important

Azure Databricks zasady federacji są tworzone na poziomie konta (a nie na poziomie obszaru roboczego). Host interfejsu wiersza polecenia Azure Databricks musi być ustawiony na https://accounts.azuredatabricks.net , a użytkownik musi być administratorem konta.

Utwórz politykę federacji tożsamości obciążenia roboczego za pomocą Databricks CLI. Ustaw wystawcę na adres URL wystawcy specyficznego dla konta z kroku 3. Aby uzyskać szczegółowe instrukcje, zobacz Konfigurowanie zasad federacyjnych jednostki usługi.

databricks account service-principal-federation-policy create ${SP_ID} --json '{
  "oidc_policy": {
    "issuer": "https://<uuid>.tokens.sts.global.api.aws",
    "audiences": ["databricks"],
    "subject": "arn:aws:iam::<account-id>:role/<workload-role-name>"
  }
}'

Uwierzytelnij się w usłudze Databricks

Po utworzeniu zasad federacyjnych użyj zestawu SDK usługi Databricks do uwierzytelniania obciążeń platformy AWS. W poniższym przykładzie użyto wzorca zestawu SDK IdTokenSource do pobrania tokenu usługi AWS STS i wymiany go na token OAuth Azure Databricks.

import boto3
from databricks.sdk import WorkspaceClient
from databricks.sdk import oidc
from databricks.sdk.core import Config, credentials_strategy, oidc_credentials_provider


class AwsStsTokenSource(oidc.IdTokenSource):
    def __init__(self, audience="databricks", region="us-east-1"):
        self._audience = audience
        self._region = region

    def id_token(self) -> oidc.IdToken:
        sts = boto3.client("sts", region_name=self._region)
        resp = sts.get_web_identity_token(
            Audience=[self._audience],
            SigningAlgorithm="RS256",
            DurationSeconds=300,
        )
        return oidc.IdToken(jwt=resp["WebIdentityToken"])


@credentials_strategy("aws-sts-wif", [])
def aws_sts_wif_strategy(cfg: Config):
    return oidc_credentials_provider(cfg, AwsStsTokenSource())


w = WorkspaceClient(
    host="https://my-workspace.cloud.databricks.com",
    client_id="<service-principal-uuid>",
    credentials_strategy=aws_sts_wif_strategy
)
# No secrets needed
clusters = w.clusters.list()

Note

Zalecany jest czas trwania tokenu 300 sekund. Możesz dostosować do 3600 sekund w zależności od potrzeb związanych z obciążeniem.

Aby zapoznać się z przykładem ręcznej wymiany tokenów, zobacz Uwierzytelnianie przy użyciu tokenu dostawcy tożsamości.

Dokumentacja platformy AWS