次の方法で共有


Python を使用してコンテナーまたは BLOB のサービス SAS を作成する

Shared Access Signature (SAS) を使用すると、ストレージ アカウント内のコンテナーと BLOB への制限付きアクセスを許可できます。 SAS を作成するときに、クライアントがアクセスできる Azure Storage リソース、それらのリソースに対するアクセス許可、SAS の有効期間などの制約を指定します。

すべての SAS はキーによって署名されます。 次の 2 つの方法のいずれかで SAS に署名できます。

  • Microsoft Entra 資格情報を使用して作成されたキーを使用します。 Microsoft Entra の資格情報を使用して署名された SAS は、"ユーザー委任" SAS です。 ユーザー委任 SAS を作成するクライアントには、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含む Azure RBAC ロールを割り当てる必要があります。 詳細については、「ユーザー委任 SAS の作成」を参照してください。
  • ストレージ アカウント キーを使用する。 サービス SASアカウント SAS は、どちらもストレージ アカウント キーを使用して署名されます。 サービス SAS を作成するクライアントには、アカウント キーへの直接アクセス権を付与するか、Microsoft.Storage/storageAccounts/listkeys/action アクセス許可を割り当てる必要があります。 詳細については、「サービス SAS の作成」または「アカウント SAS の作成」を参照してください。

注意

ユーザー委任 SAS により、ストレージ アカウント キーで署名された SAS のセキュリティが向上します。 Microsoft では、ユーザー委任 SAS を可能な限り使用することを推奨しています。 詳細については、「Shared Access Signatures (SAS) でデータの制限付きアクセスを付与する」を参照してください。

この記事では、ストレージ アカウント キーを使用して、Python 用の Blob Storage クライアント ライブラリでコンテナーまたは BLOB のサービス SAS を作成する方法を示します。

サービス SAS について

サービス SAS は、ストレージ アカウント アクセス キーを使用して署名されます。 サービス SAS は、Blob Storage など、単一の Azure Storage サービス内のリソースへのアクセスを委任します。

また、保存されているアクセス ポリシーを使用して、SAS のアクセス許可と期間を定義することもできます。 既存の保存されているアクセス ポリシーの名前が指定されている場合、そのポリシーは、SAS に関連付けられます。 保存されているアクセス ポリシーの詳細については、「保存されているアクセス ポリシーの定義」を参照してください。 保存されているアクセス ポリシーが指定されていない場合は、この記事のコード例に示されている SAS のアクセス許可と期間を定義する方法を参照してください。

サービス SAS を作成する

アプリのニーズに基づいて、コンテナーまたは BLOB 用のサービス SAS を作成できます。

次のメソッドを使用して、コンテナー リソースへの制限付きアクセスを委任するサービス SAS を作成できます。

SAS の署名に使用されるストレージ アカウント アクセス キーは、メソッドに引数 account_key として渡されます。 許可されるアクセス許可は、メソッドに permission 引数として渡され、ContainerSasPermissions クラス内で定義されます。

次のコード例は、コンテナー リソースに対して読み取りアクセス許可を含むサービス SAS を作成する方法を示しています。

def create_service_sas_container(self, container_client: ContainerClient, account_key: str):
    # Create a SAS token that's valid for one day, as an example
    start_time = datetime.datetime.now(datetime.timezone.utc)
    expiry_time = start_time + datetime.timedelta(days=1)

    sas_token = generate_container_sas(
        account_name=container_client.account_name,
        container_name=container_client.container_name,
        account_key=account_key,
        permission=ContainerSasPermissions(read=True),
        expiry=expiry_time,
        start=start_time
    )

    return sas_token

サービス SAS を使用してクライアント オブジェクトを認可する

SAS で付与されたアクセス許可に基づいて、コンテナーまたは BLOB に対する操作を実行するクライアント オブジェクトを承認するために、サービス SAS を使用できます。

次のコード例は、前の例で作成したサービス SAS を使用して ContainerClient オブジェクトを認可する方法を示しています。 このクライアント オブジェクトを使用すると、SAS によって付与されたアクセス許可に基づいてコンテナー リソースに対する操作を実行できます。

# The SAS token string can be appended to the resource URL with a ? delimiter
# or passed as the credential argument to the client constructor
sas_url = f"{container_client.url}?{sas_token}"

# Create a ContainerClient object with SAS authorization
container_client_sas = ContainerClient.from_container_url(container_url=sas_url)

リソース

Python 用 Azure Blob Storage クライアント ライブラリの使用に関する詳細については、次のリソースを参照してください。

コード サンプル

クライアント ライブラリのリソース

関連項目