AWS Key Management Service と AWS CodeCommit リポジトリの暗号化 - AWS CodeCommit

AWS Key Management Service と AWS CodeCommit リポジトリの暗号化

CodeCommit リポジトリ内のデータは、転送中と不使用時のいずれも暗号化されます。データが CodeCommit リポジトリにプッシュされると (git push を呼び出すことによってプッシュされる場合など)、リポジトリに格納されると同時に、CodeCommit は受信データを暗号化します。データが CodeCommit リポジトリからプルされると (例: git pull を呼び出す)、CodeCommit は、データを復号し、発信者にその復号データを送信します。このやり取りは、プッシュリクエストまたはプルリクエストと関連付けられた IAM ユーザーが によって認証済みであることを前提としていますAWS 送信データまたは受信データは、HTTPS または SSH で暗号化されたネットワークプロトコルを使用して送信されます。

アマゾン ウェブ サービスアカウントの新しい AWS リージョン リージョンに CodeCommit リポジトリを初めて作成すると、CodeCommit は AWS Key Management Service (AWS KMS) の同じ AWS リージョン に AWS マネージドキー (aws/codecommit キー) を作成します。このキーは CodeCommit (aws/codecommit キー) によってのみ使用されます。これは、アマゾン ウェブ サービスアカウントに保存されます。CodeCommit は、この AWS マネージドキーを使用して、この CodeCommit リポジトリ内、およびアマゾン ウェブ サービスアカウントの該当リージョン内にあるその他すべての CodeCommit リポジトリ内のデータの暗号化および復号を行います。

重要

また、CodeCommit は、デフォルトの aws/codecommit キーに対して、AWS KMS アクションを実行します。IAM ユーザーに、これらのアクションを行うための明示的なアクセス許可は不要ですが、aws/codecommit キーに対するこれらのアクションを拒否するポリシーをアタッチすることはできません。具体的には、最初のリポジトリを作成する場合、IAM ユーザーは以下のアクセス許可のいずれも deny に設定しないようにする必要があります。

  • "kms:Encrypt"

  • "kms:Decrypt"

  • "kms:ReEncrypt"(コンテキストによっては、これには kms:ReEncryptFrom

    kms:ReEncryptTo、または kms:ReEncrypt* が拒否に設定されていないことが必要になる場合があります。)

  • "kms:GenerateDataKey"

  • "kms:GenerateDataKeyWithoutPlaintext"

  • "kms:DescribeKey"

CodeCommit によって生成された AWS マネージドキーに関する情報を表示するには、次の操作を行います。

  1. AWS Management Console にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョン を変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. サービスナビゲーションペインで、[AWS マネージドキー] を選択します。キーを確認する AWS リージョンにサインインしていることを確認します。

  4. 暗号化キーのリストで、エイリアス aws/codecommit を使用して、AWS マネージドキーを選択します。AWS 所有のキーの基本情報が表示されます。

この AWS マネージドキーを変更または削除することはできません。AWS KMS のカスタマーマネージドキーを使用して、CodeCommit リポジトリ内のデータを暗号化または復号することはできません。

暗号化アルゴリズムを使用してリポジトリデータを暗号化する方法

CodeCommit では、2 つの異なる方法でデータを暗号化します。6 MB 未満の個々の Git オブジェクトは、データ整合性の検証を提供する AES-GCM-256 を使用して暗号化されます。1 つの blob の 6 MB から最大 2 GB のオブジェクトは、AES-CBC-256 を使用して暗号化されます。CodeCommit は常に暗号化コンテキストを検証します。

暗号化コンテキスト

AWS KMS と統合されている各サービスでは、暗号化オペレーションや復号オペレーションの両方に関する暗号化コンテキストが指定されています。暗号化コンテキストは、データの整合性を調べるために AWS KMS で使用される追加の認証情報です。暗号化オペレーションに対して暗号化コンテキストを指定するときは、復号オペレーションに対しても指定する必要があります。そうしないと、復号は失敗します。CodeCommit は、暗号化コンテキストに CodeCommit リポジトリ ID を使用します。get-repository コマンドまたは CodeCommit コンソールを使用してリポジトリ ID を見つけることができます。AWS CloudTrail ログで CodeCommit リポジトリ ID を検索し、CodeCommit リポジトリ内のデータを暗号化または復号するために AWS KMS のどのキーに対してどの暗号化オペレーションが行われたのかを把握します。

AWS KMS の詳細については、AWS Key Management Service 開発者ガイドを参照してください。