1. API Key Rotation for AI Workload Security on OCI

    Python

    API key rotation is a security best practice that involves periodically changing the API keys used by applications to authenticate against services and APIs. This process helps to limit the potential damage that can be done if an API key is compromised. When using Oracle Cloud Infrastructure (OCI), it's important to manage API keys associated with IAM user accounts securely.

    Pulumi provides an infrastructure as code approach to automate resource management on OCI, including API keys. Using Pulumi, we can programmatically manage the lifecycle of resources like API keys in a repeatable and version-controlled way. Here's how you could use Pulumi to implement API key rotation:

    1. Create a user in OCI Identity and Access Management (IAM).
    2. Generate an API key for the user.
    3. Store the newly generated API key securely.
    4. Periodically replace the old API key with a new one.
    5. Delete the old API key.

    In the following Pulumi program, I'll demonstrate how to create an OCI IAM user and generate an API key for that user. Note that for the actual rotation, you will need a mechanism to trigger this replacement periodically (e.g., using Pulumi automation or a CI/CD pipeline). For now, let's focus on the creation of the user and key as a starting point:

    import pulumi import pulumi_oci as oci # Create a new OCI IAM user. iam_user = oci.identity.User("aiWorkloadUser", description="User for AI workload with rotated API keys", ) # Generate an API key for the IAM user. api_key = oci.identity.ApiKey("aiWorkloadApiKey", user_id=iam_user.id, key_value=pulumi.Output.secret("<Your-Public-Key-Contents>"), # The key_value should be filled with your public key contents when rotating keys. # Make sure you store your public/private key pair securely (e.g., using a secret manager). ) # Export the user OCID and the API key's fingerprint. The key's value is not exported for security reasons. pulumi.export("user_ocid", iam_user.id) pulumi.export("api_key_fingerprint", api_key.fingerprint)

    Here’s a step-by-step explanation of what this program does:

    1. We import the Pulumi package for Oracle Cloud Infrastructure (OCI).
    2. We create a new IAM user by calling oci.identity.User. We pass a unique resource name and a description to this resource in its constructor.
    3. We then create an API key for the user by calling oci.identity.ApiKey. This resource expects a user_id which we get by referencing the id of the newly created user. We also provide it with the public key content through the key_value argument as a secret.
    4. Finally, we use pulumi.export to output the OCID of the created user and the fingerprint of the generated API key. The actual value of the API key is not exported for security reasons. The fingerprint can be used to refer to or manage this specific API key in other operations or API calls.

    Remember, in a real-world scenario, you would manage your keys more securely, possibly by using a secrets manager to store your generated keys and trigger the rotation of keys using a schedule.

    Please handle private keys and API keys securely and avoid exposing them in your code or version control systems. Always use secret management tools to store sensitive information.