Back to Checks
User customer secret key is rotated within 90 days or less
identity_user_customer_secret_keys_rotated_90_days
Service: identitySeverity: medium
OfficialBuilt-inVerified
Categories:identity-accesssecrets
Resource Type:User
OCI IAM customer secret keys are assessed by creation timestamp to determine whether their age exceeds 90 days.
Risk
Long-lived customer secret keys keep compromised or brute-forced credentials valid. Attackers can use them to list, read, write, or delete Object Storage data, enabling exfiltration, tampering, and disruption-impacting confidentiality, integrity, and availability.
Run this check with Prowler
Run in Prowler CloudRun
prowler oraclecloud --checks identity_user_customer_secret_keys_rotated_90_daysRecommendation
Rotate customer secret keys every <= 90 days. Apply least privilege, remove unused keys, and prefer short-lived identities (instance/resource principals) over static secrets. Automate rotation and alerts, avoid embedding keys in code, and continuously monitor key usage.
Remediation
CLI
oci iam customer-secret-key delete --user-id <example_resource_id> --customer-secret-key-id <example_resource_id> --forceOther
1Sign in to the Oracle Cloud Console
2Go to Identity & Security > Domains > <example_resource_name> > Users > select <example_resource_name>
3Open the Customer secret keys tab and click Generate secret key; save the Access Key and Secret
4Delete any key older than 90 days: select the old key and click Delete
Check Code
"""Check Ensure user customer secret keys rotate within 90 days or less."""
from datetime import datetime, timedelta, timezone
from prowler.lib.check.models import Check, Check_Report_OCI
from prowler.providers.oraclecloud.services.identity.identity_client import (
identity_client,
)
class identity_user_customer_secret_keys_rotated_90_days(Check):
"""Check Ensure user customer secret keys rotate within 90 days or less."""
def execute(self) -> Check_Report_OCI:
"""Execute the identity_user_customer_secret_keys_rotated_90_days check."""
findings = []
# Calculate 90 days ago from now
current_time = datetime.now(timezone.utc)
max_age = current_time - timedelta(days=90)
# Check each user's customer secret keys
for user in identity_client.users:
if not user.customer_secret_keys:
continue
for key in user.customer_secret_keys:
report = Check_Report_OCI(
metadata=self.metadata(),
resource=key,
region=user.region,
resource_name=f"{user.name} - Customer Secret Key",
resource_id=key.id,
compartment_id=user.compartment_id,
)
# Check if key is older than 90 days
key_age_days = (current_time - key.time_created).days
if key.time_created < max_age:
report.status = "FAIL"
report.status_extended = f"User '{user.name}' has a customer secret key created {key_age_days} days ago (on {key.time_created.strftime('%Y-%m-%d')}), which exceeds the 90-day rotation period."
else:
report.status = "PASS"
report.status_extended = f"User '{user.name}' has a customer secret key created {key_age_days} days ago, which is within the 90-day rotation period."
findings.append(report)
return findings