Hinweis:

Secrets von AWS Secrets Manager zu Oracle Cloud Infrastructure Secrets in Vault migrieren

Einführung

Vorteile bei der Migration von Secrets von Amazon Web Services (AWS) zu Oracle Cloud Infrastructure (OCI):

Unterstützte Secret-Typen in OCI Vault

Ziele

Voraussetzungen

Secrets von AWS zu OCI migrieren

  1. AWS-Secrets abrufen und anzeigen Um Secrets aus AWS zu migrieren, stellen Sie zunächst sicher, dass Sie über eine Liste der zu übertragenden Secrets verfügen. In diesem Beispiel migrieren wir zwei Secrets: awssecret4 und awssecret5.

    Schaltfläche "Bearbeiten"

    Der folgende Screenshot zeigt die Secrets im AWS Secrets Manager vor der Migration.

    Schaltfläche "Bearbeiten"

    Schaltfläche "Bearbeiten"

  2. Erstellen Sie einen Vault und einen Verschlüsselungsschlüssel in OCI. Informationen zum Einrichten eines OCI-Vault und -Schlüssels zum Verschlüsseln von Secrets finden Sie unter Masterverschlüsselungsschlüssel erstellen.

    Schaltfläche "Bearbeiten"

    Schaltfläche "Bearbeiten"

  3. Verwenden Sie das Python-Skript, um Secrets zu migrieren. Laden Sie das folgende Python-Skript herunter, und speichern Sie es als aws_to_oci_secret_migration.py. Das Skript automatisiert den Prozess, AWS-Secrets abzurufen und in OCI Vault zu speichern.

    Hinweis: Ersetzen Sie Platzhalter wie your_aws_secret1, your_aws_region, your_oci_vault_id usw. durch Ihre tatsächlichen Werte. Das angegebene Präfix wird verwendet, um die Secrets im Vault zu erstellen und die Erstellung von Secrets mit dem Skript zu isolieren.

    Script:

    import boto3  # AWS SDK to interact with AWS services
    import oci  # OCI SDK to interact with Oracle Cloud
    import base64  # To handle base64 encoding
    from botocore.exceptions import ClientError  # For handling errors with AWS
    
    # AWS configuration
    AWS_SECRET_NAMES = ["your_aws_secret1", "your_aws_secret2"]  # List of AWS secrets to migrate
    AWS_REGION = "your_aws_region"  # AWS region where the secrets are stored
    
    # OCI configuration
    VAULT_ID = "your_oci_vault_id"  # OCI Vault ID
    COMPARTMENT_ID = "your_oci_compartment_id"  # OCI Compartment ID
    KEY_ID = "your_oci_key_id"  # OCI Key ID
    OCI_SECRET_NAME_PREFIX = "your_prefix"  # Prefix for the secret names in OCI Vault
    
    def get_aws_secret(secret_name):
        """Retrieve the secret value from AWS Secrets Manager."""
        session = boto3.session.Session()  # Create a session with AWS
        client = session.client(service_name='secretsmanager', region_name=AWS_REGION)  # Create a Secrets Manager client
    
        try:
            # Get the secret value
            get_secret_value_response = client.get_secret_value(SecretId=secret_name)
            secret = get_secret_value_response['SecretString']  # This is the actual secret data
            return secret
        except ClientError as e:
            print(f"Error retrieving secret from AWS: {e}")  # In case something goes wrong
            return None
    
    def create_oci_secret(secret_content, secret_name):
        """Create a new secret in OCI Vault."""
        config = oci.config.from_file()  # This loads your OCI configuration from ~/.oci/config
        vaults_client = oci.vault.VaultsClient(config)  # Use the VaultsClient to create a secret in OCI Vault
    
        # Encode secret content to Base64 format
        secret_content_base64 = base64.b64encode(secret_content.encode('utf-8')).decode('utf-8')  # Proper base64 encoding
    
        try:
            # Creating a new secret in OCI Vault
            create_secret_response = vaults_client.create_secret(
                create_secret_details=oci.vault.models.CreateSecretDetails(
                    vault_id=VAULT_ID,
                    compartment_id=COMPARTMENT_ID,
                    secret_name=secret_name,
                    key_id=KEY_ID,
                    secret_content=oci.vault.models.Base64SecretContentDetails(
                        content=secret_content_base64,  # Base64 encoded content
                        content_type="BASE64"  # Specifying the content type as BASE64
                    ),
                    description="Migrated from AWS Secrets Manager"  # A brief description
                )
            )
            print(f"Secret '{secret_name}' successfully created in OCI Vault.")
        except oci.exceptions.ServiceError as e:
            print(f"Error creating secret in OCI Vault: {e}")  # If something goes wrong
    
    def main():
        # Step 1: Retrieve and migrate secrets from AWS Secrets Manager
        for aws_secret_name in AWS_SECRET_NAMES:
            aws_secret_content = get_aws_secret(aws_secret_name)
    
            if aws_secret_content:
                # Generate OCI secret name based on AWS secret name
                oci_secret_name = f"{OCI_SECRET_NAME_PREFIX}_{aws_secret_name}"
                # Step 2: Create the secret in OCI Vault
                create_oci_secret(aws_secret_content, oci_secret_name)
    
    if __name__ == "__main__":
        main()
    
  4. Nachdem das Skript gespeichert wurde, führen Sie es mit dem folgenden Befehl aus.

    python3 aws_to_oci_secret_migration.py
    

    Schaltfläche "Bearbeiten"

  5. Nachdem Sie das Skript erfolgreich ausgeführt haben, können Sie die neu erstellten Secrets im OCI Vault prüfen.

    Schaltfläche "Bearbeiten"

    Schaltfläche "Bearbeiten"

Nächste Schritte

Die Migration von Secrets von AWS zu OCI kann dazu beitragen, Ihren Betrieb zu optimieren, insbesondere wenn Sie OCI für den Rest Ihrer Cloud-Infrastruktur nutzen. Durch die Verwendung der Python-Automatisierung können Sie Geheimnisse effizient übertragen und sicherstellen, dass sie sicher gespeichert sind und den Verschlüsselungsstandards von OCI entsprechen.

Danksagungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.