azure-appconfiguration-py — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited azure-appconfiguration-py (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Centralized configuration management with feature flags and dynamic settings.
pip install azure-appconfigurationAZURE_APPCONFIGURATION_CONNECTION_STRING=Endpoint=https://<name>.azconfig.io;Id=...;Secret=...
# Or for Entra ID:
AZURE_APPCONFIGURATION_ENDPOINT=https://<name>.azconfig.ioimport os
from azure.appconfiguration import AzureAppConfigurationClient
client = AzureAppConfigurationClient.from_connection_string(
os.environ["AZURE_APPCONFIGURATION_CONNECTION_STRING"]
)from azure.appconfiguration import AzureAppConfigurationClient
from azure.identity import DefaultAzureCredential
client = AzureAppConfigurationClient(
base_url=os.environ["AZURE_APPCONFIGURATION_ENDPOINT"],
credential=DefaultAzureCredential()
)Examples are independent fragments requiring azure-identity for Entra auth and project endpoint variables. Confirm store/label/key and read the current ETag before replacement/deletion; use appropriate match conditions for concurrent edits. Feature flag changes affect real users, and unlocking a setting is a separate privileged change. Use approved synthetic values, minimize listing scope, keep credentials/value payloads out of logs, and close both async credential/client on failure. Snapshots need actual creation status and tested restore procedure; schema-valid flags do not themselves implement gradual rollout or an A/B experiment.
setting = client.get_configuration_setting(key="app:settings:message")
print(f"Read setting: {setting.key}") # Do not log secret-bearing values# Labels allow environment-specific values
setting = client.get_configuration_setting(
key="app:settings:message",
label="production"
)from azure.appconfiguration import ConfigurationSetting
setting = ConfigurationSetting(
key="app:settings:message",
value="Hello, World!",
label="development",
content_type="text/plain",
tags={"environment": "dev"}
)
client.set_configuration_setting(setting)client.delete_configuration_setting(
key="app:settings:message",
label="development"
)settings = client.list_configuration_settings()
for setting in settings:
print(f"{setting.key} [{setting.label}]") # Values may be sensitivesettings = client.list_configuration_settings(
key_filter="app:settings:*"
)settings = client.list_configuration_settings(
label_filter="production"
)from azure.appconfiguration import ConfigurationSetting
import json
feature_flag = ConfigurationSetting(
key=".appconfig.featureflag/beta-feature",
value=json.dumps({
"id": "beta-feature",
"enabled": True,
"conditions": {
"client_filters": []
}
}),
content_type="application/vnd.microsoft.appconfig.ff+json;charset=utf-8"
)
client.set_configuration_setting(feature_flag)setting = client.get_configuration_setting(
key=".appconfig.featureflag/beta-feature"
)
flag_data = json.loads(setting.value)
print(f"Feature enabled: {flag_data['enabled']}")flags = client.list_configuration_settings(
key_filter=".appconfig.featureflag/*"
)
for flag in flags:
data = json.loads(flag.value)
print(f"{data['id']}: {'enabled' if data['enabled'] else 'disabled'}")# Make setting read-only
client.set_read_only(
configuration_setting=setting,
read_only=True
)
# Remove read-only
client.set_read_only(
configuration_setting=setting,
read_only=False
)from azure.appconfiguration import ConfigurationSnapshot, ConfigurationSettingsFilter
snapshot = ConfigurationSnapshot(
filters=[
ConfigurationSettingsFilter(key="app:*", label="production")
]
)
created = client.begin_create_snapshot(
name="v1-snapshot",
filters=snapshot.filters
).result()settings = client.list_configuration_settings(
snapshot_name="v1-snapshot"
)from azure.appconfiguration.aio import AzureAppConfigurationClient
from azure.identity.aio import DefaultAzureCredential
async def main():
credential = DefaultAzureCredential()
client = AzureAppConfigurationClient(
base_url=endpoint,
credential=credential
)
setting = await client.get_configuration_setting(key="app:message")
# Consume the authorized value without logging it.
await client.c~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.