Python を使用してアカウント 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 用の Azure Storage クライアント ライブラリでアカウント SAS を作成する方法を示します。
アカウント SAS について
アカウント SAS は、ストレージ アカウントのレベルで作成されます。 アカウント SAS を作成すると、以下のことができます。
- Get Blob Service Properties、Set Blob Service Properties、Get Blob Service Stats など、サービス固有の SAS では現在使用できないサービス レベルの操作へのアクセスを委任します。
- ストレージ アカウント内の複数のサービスへのアクセスを一度に委任します。 たとえば、アカウント SAS を使用して、Azure Blob Storage と Azure Files 両方のリソースへのアクセスを委任できます。
保存されているアクセス ポリシーは、アカウント SAS ではサポートされていません。
アカウント SAS を作成する
アカウント SAS は、アカウント アクセス キーを使用して署名されます。 次のコード例は、generate_account_sas を呼び出してアカウント SAS トークン文字列を取得する方法を示しています。
def create_account_sas(self, account_name: str, account_key: str):
# Create an account SAS that's valid for one day
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
# Define the SAS token permissions
sas_permissions=AccountSasPermissions(read=True)
# Define the SAS token resource types
# For this example, we grant access to service-level APIs
sas_resource_types=ResourceTypes(service=True)
sas_token = generate_account_sas(
account_name=account_name,
account_key=account_key,
resource_types=sas_resource_types,
permission=sas_permissions,
expiry=expiry_time,
start=start_time
)
return sas_token
ResourceTypes コンストラクターの有効なパラメーターは次のとおりです。
- service: 既定値は
False
です。True
に設定すると、サービス レベルの API へのアクセスが許可されます。 - container: 既定値は
False
です。True
に設定すると、コンテナー レベルの API へのアクセスが許可されます。 - object: 既定値は
False
です。True
に設定すると、BLOB、キュー メッセージ、およびファイルに対するオブジェクト レベルの API へのアクセスが許可されます。
使用可能なアクセス許可については、AccountSasPermissions に関するページを参照してください。
クライアントからアカウント SAS を使用する
アカウント SAS を使用して Blob service のサービスレベルの API にアクセスするには、アカウント SAS と、ストレージ アカウントの Blob Storage エンドポイントを使用して BlobServiceClient オブジェクトを作成します。
# The SAS token string can be appended to the account URL with a ? delimiter
# or passed as the credential argument to the client constructor
account_sas_url = f"{blob_service_client.url}?{sas_token}"
# Create a BlobServiceClient object
blob_service_client_sas = BlobServiceClient(account_url=account_sas_url)
また、アカウント SAS を使用して、ContainerClient オブジェクトまたは BlobClient オブジェクトを認可して操作することもできます (これらのリソースの種類に、署名値の一部としてアクセス権が付与されている場合)。
リソース
Python 用の Azure Blob Storage クライアント ライブラリを使用したアカウント SAS の作成の詳細については、次のリソースを参照してください。