

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CodeCommit でのデータ保護
<a name="data-protection"></a>

マネージドサービスであるため、AWS グローバルネットワークセキュリティで保護されています。AWSセキュリティサービスと AWS がインフラストラクチャを保護する方法については、「[AWSクラウドセキュリティ](https://aws.amazon.com/security/)」を参照してください。インフラストラクチャセキュリティのベストプラクティスを使用して AWS 環境を設計するには、*セキュリティの柱 - AWS Well-Architected Framework*の[インフラストラクチャ保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)を参照してください。

AWS 公開版 API コールを使用して、ネットワーク経由でアクセスします。クライアントは以下をサポートする必要があります。
+ Transport Layer Security (TLS)。TLS 1.2 が必須で、TLS 1.3 をお勧めします。
+ DHE (楕円ディフィー・ヘルマン鍵共有) や ECDHE (楕円曲線ディフィー・ヘルマン鍵共有) などの完全前方秘匿性 (PFS) による暗号スイート。これらのモードは Java 7 以降など、ほとんどの最新システムでサポートされています。

保存時の CodeCommit リポジトリは自動的に暗号化されます。お客様の操作は必要ありません。CodeCommit は、転送中のリポジトリデータも暗号化します。CodeCommit リポジトリでは、HTTPS プロトコル、SSH プロトコル、またはその両方を使用できます。詳細については、「[のセットアップAWS CodeCommit](setting-up.md)」を参照してください。CodeCommit リポジトリへの [cross-account アクセス](cross-account.md) を設定することもできます。

**Topics**
+ [AWS Key Management Service AWS CodeCommit および リポジトリの暗号化](encryption.md)
+ [認証情報をローテーションして AWS CodeCommit リポジトリに接続する](temporary-access.md)

# AWS Key Management Service AWS CodeCommit および リポジトリの暗号化
<a name="encryption"></a>

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

 AWS マネージドキー またはカスタマーマネージドキーを使用して、リポジトリ内のデータを暗号化および復号できます。カスタマーマネージドキーと AWS マネージドキーの違いの詳細については、「[カスタマーキーと AWS マネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)」を参照してください。カスタマーマネージドキーを指定しない場合、CodeCommit はリポジトリ内のデータの暗号化と復号に AWS マネージドキー を使用します。この AWS マネージドキー は AWS アカウントで自動的に作成されます。 AWS リージョン Amazon Web Services アカウントの新しい に CodeCommit リポジトリを初めて作成するときに、カスタマーマネージドキーを指定しない場合、CodeCommit は AWS マネージドキー () の同じ AWS リージョン に AWS Key Management Service (`aws/codecommit`キー) を作成しますAWS KMS。この `aws/codecommit` キーは CodeCommit によってのみ使用されます。これは、アマゾン ウェブ サービスアカウントに保存されます。指定した内容に応じて、CodeCommit はカスタマーマネージドキーまたは AWS マネージドキー を使用してリポジトリ内のデータを暗号化および復号します。

**重要**  
 CodeCommit は、リポジトリ内のデータの暗号化と復号に使用される AWS KMS キーに対して次の AWS KMS アクションを実行します。を使用している場合 AWS マネージドキー、ユーザーはこれらのアクションに対する明示的なアクセス許可を必要としませんが、`aws/codecommit`キーのこれらのアクションを拒否するポリシーをアタッチすることはできません。 AWS アカウント ID がそのキーのポリシープリンシパルとして設定されたカスタマーマネージドキーを使用している場合は、これらのアクセス許可を明示的に に設定する必要があります`allow`。具体的には、最初のリポジトリを作成し、リポジトリのキーを更新するときに、 を使用している場合`deny`は、次のアクセス許可を に設定しないでください。ポリシープリンシパルでカスタマーマネージドキーを使用している場合`allow`は AWS マネージドキー、 を に設定する必要があります。  
`"kms:Encrypt"`
`"kms:Decrypt"`
`"kms:ReEncrypt"` (コンテキストによっては、これには `kms:ReEncryptFrom`、  
`kms:ReEncryptTo`、または `kms:ReEncrypt*` が拒否に設定されていないことが必要になる場合があります。)
`"kms:GenerateDataKey"`
`"kms:GenerateDataKeyWithoutPlaintext"`
`"kms:DescribeKey"`

独自のカスタマーマネージドキーを使用する場合は、リポジトリが存在する AWS リージョン でキーを使用できる必要があります。CodeCommit は、単一リージョンとマルチリージョンの両方のカスタマーマネージドキーの使用をサポートします。キーマテリアルのオリジンタイプはすべてサポートされていますが、デフォルトの **[KMS]** オプションを使用することをお勧めします。**[外部キーストア]** オプションを使用する場合、ストアプロバイダによる遅延が発生する可能性があります。加えて: CodeCommit では、カスタマーマネージドキーを使用する場合、次の要件があります。
+ CodeCommit は対称キーの使用のみをサポートします。
+ キーの使用タイプは **[暗号化と復号化]** に設定する必要があります。

カスタマーマネージドキーの作成の詳細については、「[概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)」および「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。

CodeCommit によって AWS マネージドキー 生成された に関する情報を表示するには、以下を実行します。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) で AWS Key Management Service (AWS KMS) コンソールを開きます。

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

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

1. 暗号化キーのリストで、エイリアス **aws/codecommit** AWS マネージドキー を持つ を選択します。に関する基本情報 AWS 所有のキー が表示されます。

これを変更または削除することはできません AWS マネージドキー。

## 暗号化アルゴリズムを使用してリポジトリデータを暗号化する方法
<a name="encryption-algorithms"></a>

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

## 暗号化コンテキスト
<a name="encryption-context"></a>

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

詳細については AWS KMS、「 [AWS Key Management Service デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)」を参照してください。

# 認証情報をローテーションして AWS CodeCommit リポジトリに接続する
<a name="temporary-access"></a>

IAM ユーザーを設定したり、アクセスキーとシークレットキーを使用したりすることなく、 AWS CodeCommit リポジトリへのアクセスをユーザーに許可できます。フェデレーテッドアイデンティティに許可を割り当てるには、ロールを作成してそのロールの許可を定義します。フェデレーテッド ID が認証されると、その ID はロールに関連付けられ、ロールで定義されている許可が付与されます。フェデレーションのロールについては、*IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。IAM Identity Center を使用する場合は、許可セットを設定します。アイデンティティが認証後にアクセスできるものを制御するため、IAM Identity Center は、権限セットを IAM のロールに関連付けます。アクセス許可セットの詳細については、*AWS IAM アイデンティティセンター User Guide* の [Permission sets](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html) を参照してください。また、IAM ユーザーが別のアマゾン ウェブ サービスアカウントの CodeCommit リポジトリにアクセスするためのロールベースのアクセスを設定することもできます (*cross-account アクセス*と呼ばれるテクニック)。リポジトリへのクロスアカウントアクセスを設定するためのウォークスルーは、「[ロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを設定する](cross-account.md)」を参照してください。

以下のような方法で認証する必要のあるユーザーに、アクセスを設定できます。
+ Security Assertion Markup Language (SAML)
+ 多要素認証（MFA）
+ フェデレーション
+ Login with Amazon
+ Amazon Cognito
+ Facebook
+ Google
+ OpenID Connect (OIDC) 対応の ID プロバイダー

**注記**  
以下の情報は、CodeCommit リポジトリに接続するための **git-remote-codecommit**または AWS CLI 認証情報ヘルパーの使用にのみ適用されます。CodeCommit への一時アクセスまたはフェデレーティッドアクセスに対して推奨されるアプローチは **git-remote-codecommit** を設定することであるため、このトピックでは、このユーティリティの使用例を示します。詳細については、「[git-remote-codecommit AWS CodeCommit を使用した への HTTPS 接続のセットアップ手順](setting-up-git-remote-codecommit.md)」を参照してください。  
アクセス認証情報の更新や一時的なアクセス認証情報で CodeCommit リポジトリに接続するのに、SSH あるいは Git 認証情報および HTTPS を使用することはできません。

以下のすべての要件が当てはまる場合には、これらのステップを実行する必要はありません。
+ Amazon EC2 インスタンスにサインインしている。
+  AWS CLI 認証情報ヘルパーで Git と HTTPS を使用して、Amazon EC2 インスタンスから CodeCommit リポジトリに接続します。
+ Amazon EC2 インスタンスに、[ AWS CLI 認証情報ヘルパーを使用した Linux、macOS、または Unix での HTTPS 接続の場合](setting-up-https-unixes.md) または [ AWS CLI 認証情報ヘルパーを使用した Windows での HTTPS 接続の場合](setting-up-https-windows.md) で説明されているアクセス許可を含む IAM インスタンスプロファイルがアタッチされている。
+ [ AWS CLI 認証情報ヘルパーを使用した Linux、macOS、または Unix での HTTPS 接続の場合](setting-up-https-unixes.md) または [ AWS CLI 認証情報ヘルパーを使用した Windows での HTTPS 接続の場合](setting-up-https-windows.md) で説明されているように、Amazon EC2 インスタンスに Git 認証情報ヘルパーがインストールおよび設定されている。

上記の要件を満たす Amazon EC2 インスタンスは、お客様に代わって CodeCommit に一時アクセス認証情報を提供するように、既に設定されています。

**注記**  
Amazon EC2 インスタンスでは、**git-remote-codecommit** を設定および使用することができます。

ユーザーに CodeCommit リポジトリへの一時アクセスを許可するには、以下の手順を実行します。



## ステップ 1: 前提条件を満たす
<a name="temporary-access-prerequisites"></a>

設定ステップを実行し、認証情報の更新を使用して CodeCommit リポジトリへのアクセスをユーザーに許可します。
+ cross-account アクセスについては、[チュートリアル: IAM ロールを使用したアマゾン ウェブ サービスアカウント間でのアクセスの委任](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-walkthrough-crossacct.html)および [ロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを設定する](cross-account.md) を参照してください。
+ SAML とフェデレーションについては、[「組織の認証システムを使用して AWS リソースへのアクセス権を付与する](https://docs.aws.amazon.com/STS/latest/UsingSTS/STSUseCases.html#IdentityBrokerApplication)」および[「SAML 2.0 AWS STS ベースのフェデレーションについて](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSAML.html)」を参照してください。
+ MFA については、[AWSでの多要素認証 (MFA) デバイスの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingMFA.html)と[ IAM ユーザーにアクセスを許可する一時的なセキュリティ認証情報の作成](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)を参照してください。
+ Login with Amazon、Amazon Cognito、Facebook、Google、または OIDC 互換 ID プロバイダーについては、[AWS STS 「ウェブ ID フェデレーションについて](https://docs.aws.amazon.com/STS/latest/UsingSTS/web-identity-federation.html)」を参照してください。

[の認証とアクセスコントロール AWS CodeCommit](auth-and-access-control.md) の情報を使用して、ユーザーに付与する CodeCommit アクセス許可を指定します。

## ステップ 2: ロール名またはアクセス認証情報を取得する
<a name="temporary-access-get-credentials"></a>

ユーザーがロールを引き受けることによってリポジトリにアクセスできるようにするには、そのロールの Amazon リソースネーム (ARN) をユーザーに提供します。それ以外の場合、アクセス権の設定方法に応じて、ユーザーは次のいずれかの方法で認証情報の更新を取得できます。
+ クロスアカウントアクセスの場合は、 AWS CLI [assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html) コマンドを呼び出すか、 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API を呼び出します。
+ SAML の場合は、 AWS CLI [assume-role-with-saml](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-saml.html) コマンドまたは AWS STS [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API を呼び出します。
+ フェデレーションの場合は、the AWS CLI [assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html) または [get-federation-token](https://docs.aws.amazon.com/cli/latest/reference/sts/get-federation-token.html) コマンド、 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) または [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) APIs。
+ MFA の場合は、 AWS CLI [get-session-token](https://docs.aws.amazon.com/cli/latest/reference/sts/get-session-token.html) コマンドまたは AWS STS [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) API を呼び出します。
+ Login with Amazon、Amazon Cognito、Facebook、Google、または OIDC 互換 ID プロバイダーの場合は、 AWS CLI [assume-role-with-web-identity](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-web-identity.html) コマンドまたは AWS STS [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) API を呼び出します。



## ステップ 3: git-remote-codecommit をインストールして を設定する AWS CLI
<a name="temporary-access-configure-credentials"></a>

 AWS CLIで [https://pypi.org/project/git-remote-codecommit/](https://pypi.org/project/git-remote-codecommit/) をインストールしてプロファイルを設定することで、アクセス認証情報を使用するようにローカルコンピュータを設定する必要があります。

1. 「[セットアップ ](setting-up.md)」の指示に従って、 AWS CLIを設定します。1 つまたは複数のプロファイルを設定するには、**aws configure** コマンドを使用します。認証情報の更新を使用して CodeCommit リポジトリに接続するときに使用する、名前付きプロファイルを作成することを検討してください。

1. 次のいずれかの方法で、認証情報をユーザー AWS CLI の名前付きプロファイルに関連付けることができます。
   + CodeCommit にアクセスするロールを引き受ける場合は、そのロールを引き受けるのに必要な情報を含む名前付きプロファイルを設定します。例えば、Amazon Web Services アカウント 111111111111 で *CodeCommitAccess* という名前のロールを引き受ける場合は、他の AWS リソースを操作するときに使用するデフォルトプロファイルと、そのロールを引き受けるときに使用する名前付きプロファイルを設定できます。次のコマンドは、*CodeCommitAccess* という名前のロールを引き受ける、名前付きプロファイルの *CodeAccess* を作成します。*Maria\$1Garcia* というユーザー名がセッションに関連付けられ、デフォルトのプロファイルが AWS 認証情報のソースとして設定されます。

     ```
     aws configure set role_arn arn:aws:iam::111111111111:role/CodeCommitAccess --profile CodeAccess
     aws configure set source_profile default --profile CodeAccess
     aws configure set role_session_name "Maria_Garcia" --profile CodeAccess
     ```

     変更を確認する場合は、`~/.aws/config` ファイル (Linux の場合) または `%UserProfile%.aws\config`ファイル (Windows の場合) を手動で表示または編集し、名前付きプロファイルの情報を確認します。たとえば、ファイルは次のようになります。

     ```
     [default]
     region = us-east-1
     output = json
     
     [profile CodeAccess]
     source_profile = default
     role_session_name = Maria_Garcia
     role_arn = arn:aws:iam::111111111111:role/CodeCommitAccess
     ```

      名前付きプロファイルを設定したら、名前付きプロファイルを使用して **git-remote-codecommit** ユーティリティで CodeCommit リポジトリのクローンを作成できます。例えば、*MyDemoRepo* という名前のリポジトリのクローンを作成するには、次のようにします。

     ```
     git clone codecommit://CodeAccess@MyDemoRepo
     ```
   + ウェブ ID フェデレーションと OpenID Connect (OIDC) を使用している場合は、ユーザーに代わって AWS Security Token Service (AWS STS) `AssumeRoleWithWebIdentity` API コールを行い、一時的な認証情報を更新する名前付きプロファイルを設定します。**aws configure set** コマンドを使用するか、 `~/.aws/credentials` ファイル (Linux の場合) または `%UserProfile%.aws\credentials` ファイル (Windows の場合) を手動で編集して、必要な設定値を持つ AWS CLI 名前付きプロファイルを追加します。例えば、*CodeCommitAccess* ロールを引き受け、ウェブ ID トークンファイル \$1/*my-credentials**/my-token-file* を使用するプロファイルを作成するには、次のようにします。

     ```
     [CodeCommitWebIdentity]
     role_arn = arn:aws:iam::111111111111:role/CodeCommitAccess
     web_identity_token_file=~/my-credentials/my-token-file
     role_session_name = Maria_Garcia
     ```

   詳細については、*AWS Command Line Interface ユーザーガイド*の[AWS Command Line Interfaceの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)と[AWS CLIでの IAM ロールの使用](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)を参照してください。

## ステップ 4: CodeCommit リポジトリにアクセスする
<a name="temporary-access-use-credentials"></a>

ユーザーが [リポジトリへの接続](how-to-connect.md) の指示に従って CodeCommit リポジトリに接続したとすると、そのユーザーは **git-remote-codecommit** によって提供される拡張機能と Git を使用して **git clone**、**git push**、および **git pull** を呼び出し、アクセスが許可されている CodeCommit リポジトリに対して、クローン作成、プッシュ、プルを行います。たとえば、リポジトリのクローンを作成するには次のようにします。

```
git clone codecommit://CodeAccess@MyDemoRepo
```

Git のコミット、プッシュ、プルコマンドは、通常の Git 構文を使用します。

ユーザーが を使用して、ローテーションするアクセス認証情報に関連付けられた AWS CLI 名前付きプロファイルを指定する AWS CLI と、そのプロファイルにスコープされた結果が返されます。

