ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
AWSシークレット・マネージャからOracle Cloud Infrastructure Secrets in Vaultへのシークレットの移行
イントロダクション
Amazon Web Services (AWS)からOracle Cloud Infrastructure (OCI)にシークレットを移行する場合のメリット:
- シークレット管理の一元化:インフラストラクチャにOCIをすでに使用している場合、OCI Vaultにすべてのシークレットを保持することで、セキュリティ・ポリシーの一貫性を確保することで管理を簡素化できます。
- コンプライアンスとセキュリティ: OCI Vaultは、カスタム・キー、アクセス制御、監査ログによる暗号化を提供することで、顧客管理の制御が必要な多くのOCIのサービスと統合されています。
- コストに関する考慮事項: OCI Vaultの価格およびストレージ・オプションは、使用状況に応じて、AWS Secrets Managerと比較してコスト効率が高くなる場合があります。
OCI Vaultでサポートされているシークレット・タイプ
-
OCIシークレット・サービスでは、PASSPHRASE、SSH_KEY、BYTESなど、あらゆるタイプのシークレットがサポートされます。これらはOCIで自動生成できるタイプですが、シークレットを手動で作成する場合、これらのタイプに限定されません。AWSのシークレット・タイプがOCIで受け入れられるフォーマットに対応していることを確認します。詳細は、Vaultシークレットの管理を参照してください。
-
OCI Vaultでは、シークレット・コンテンツをbase64形式にする必要があります。これにより、バイナリ・データの安全な格納が保証されます。
目的
- このチュートリアルでは、Pythonを使用して、AWSシークレット・マネージャに格納されているシークレットをOCI Vaultに移行する方法を示します。AWSからシークレットを取得し、base64エンコーディングでVaultのOCIシークレットにセキュアに格納する方法を学習します。
前提条件
-
AWSおよびOCI SDK:
boto3
およびoci
ライブラリが環境にインストールされていることを確認します。これらはそれぞれ、AWSおよびOCI用の公式SDKです。次のコマンドを実行してインストールします。pip install boto3 oci
-
OCI Vaultの設定:
-
Vault ID:シークレットが格納されるOCI Vaultの一意の識別子。
-
キーID: OCI Vaultのシークレットを暗号化するための暗号化キー。
-
コンパートメントID:ボールトが存在するOCIコンパートメント。
-
-
AWS資格証明:
aws configure
または環境変数を使用して、OCI Cloud ShellまたはOCI CLIでAWS資格証明が適切に構成されていることを確認します。詳細は、AWS CLIのIAMユーザー資格証明を使用した認証を参照してください。 -
OCI構成:
~/.oci/config
がOCI Cloud ShellまたはOCI CLIを使用してOCI資格証明で正しく設定されていることを確認します。詳細は、CLIのインストールを参照してください。
AWSからOCIへのシークレットの移行
-
AWSシークレットを取得して表示します。AWSからシークレットを移行するには、まず転送するシークレットのリストがあることを確認します。この例では、
awssecret4
とawssecret5
の2つのシークレットを移行しています。次のスクリーンショットは、移行前のAWSシークレット・マネージャのシークレットを示しています。
-
OCIにボールトと暗号化キーを作成します。シークレットを暗号化するためのOCI Vaultおよびキーを設定するには、マスター暗号化キーの作成を参照してください。
-
Pythonスクリプトを使用してシークレットを移行します。次のPythonスクリプトをダウンロードし、
aws_to_oci_secret_migration.py
として保存します。このスクリプトは、AWSシークレットを取得し、OCI Vaultに格納するプロセスを自動化します。ノート:
your_aws_secret1
、your_aws_region
、your_oci_vault_id
などのプレースホルダを実際の値に置き換えます。指定された接頭辞は、スクリプトを使用してシークレットの作成を分離するのに役立つ、ボールト内のシークレットの作成に使用されます。スクリプト:
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()
-
スクリプトを保存したら、次のコマンドで実行します。
python3 aws_to_oci_secret_migration.py
-
スクリプトを正常に実行した後、OCI Vaultで新しく作成されたシークレットを確認できます。
次のステップ
AWSからOCIへのシークレットの移行は、特に他のクラウド・インフラストラクチャにOCIを活用している場合、業務の合理化に役立ちます。Pythonの自動化を使用することで、シークレットを効率的に転送し、セキュアに保存してOCIの暗号化標準に準拠していることを確認できます。
承認
- 著者 - Vishak Chittuvalapil (シニア・クラウド・エンジニア)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Migrate Secrets from AWS Secrets Manager to Oracle Cloud Infrastructure Secrets in Vault
G17352-02
October 2024