暗号化された Amazon S3 オブジェクトを分析する
AWS アカウント でAmazon Macie を有効化すると、Macieは service-linked role (サービスにリンクされたロール) を作成し、これにより、Amazon Simple Storage Service (Amazon S3) および他の AWS のサービス をユーザーに代わってコールするために必要なアクセス許可が Macie に付与されます。サービスにリンクされたロールを使用すると、サービスが自動でアクションを完了させるのに、アクセス許可を手動で追加する必要がないため、AWS のサービス の設定プロセスが簡単になります。このタイプのロールの詳細については、AWS Identity and Access Management ユーザーガイドの「IAM ロール」を参照してください。
Macie のサービスリンクロールAWSServiceRoleForAmazonMacie
のアクセス許可ポリシーにより、Macie は S3 バケットとオブジェクトに関する情報の取得および S3 バケット内のオブジェクトの取得、分析などのアクションを実行することが許可されます。お客様のアカウントが組織の Macie 管理者アカウントである場合、ポリシーにより Macie が組織のメンバーアカウントに対してユーザーに代わってこれらのアクションを実行することも許可されます。
S3 オブジェクトが暗号化されている場合、Macie サービスリンクロールのアクセス許可ポリシーは通常、オブジェクトの復号化に必要なアクセス許可を Macie に付与します。ただし、これは使用された暗号化のタイプによって異なります。それは、Macie が適切な暗号化キーの使用を許可されているかどうかによっても異なる可能性があります。
Amazon S3 オブジェクトの暗号化オプション
Amazon S3 は S3 オブジェクトの複数の暗号化オプションをサポートしています。これらのオプションのほとんどで、Amazon Macie は、ユーザーアカウントの Macie サービスリンクロールを使用してオブジェクトを復号化できます。ただし、これはオブジェクトの暗号化に使用された暗号化のタイプによって異なります。
- Amazon S3 マネージドキーを用いたサーバー側の暗号化 (SSE-S3)
-
Amazon S3 マネージドキー (SSE-S3) を用いたサーバー側の暗号化を使用してオブジェクトが暗号化されている場合、Macie はそのオブジェクトを復号化できます。
このタイプの暗号化の詳細については、Amazon Simple Storage Service ユーザーガイドのAmazon S3 マネージドキーを用いたサーバー側の暗号化を使用を参照してください。
- AWS KMS keys (DSSE-KMS および SSE-KMS) を用いたサーバー側の暗号化
-
オブジェクトが二層式サーバー側の暗号化または AWS マネージド AWS KMS key (DSSE-KMS または SSE-KMS) でのサーバー側の暗号化を使用して暗号化されている場合は、Macie はオブジェクトを復号化できます。
オブジェクトが二層式サーバー側の暗号化またはカスタマーマネージド AWS KMS key (DSSE-KMS または SSE-KMS) でのサーバー側の暗号化を使用して暗号化されている場合は、Macie は、ユーザー Macie にキーの使用を許可している場合にのみ、オブジェクトを復号化できます。これは、AWS KMS 内で完全に管理される KMS キーと、外部キーストアにある KMS キーで暗号化されたオブジェクトに当てはまります。Macie が該当の KMS キー使用を許可されていない場合、Macie はオブジェクトのメタデータの保存およびレポートのみできます。
これらのタイプの暗号化の詳細については、Amazon Simple Storage Service ユーザーガイドの「AWS KMS keysによる二層式サーバー側の暗号化の使用」と「AWS KMS keysによるサーバー側の暗号化の使用」を参照してください。
ヒント
お客様のアカウントで S3 バケット内のオブジェクトを分析するのに、Macie がアクセスする際に必要とするすべてのカスタマーマネージド AWS KMS keysのリストは、自動生成できます。これを行うには、GitHub のリポジトリ Amazon Macie スクリプト
から入手できる AWS KMS 権限アナライザースクリプトを実行します。このスクリプトでは、AWS Command Line InterfaceAWS CLIコマンドの追加のスクリプトを生成することもできます。必要に応じてこれらのコマンドを実行し、指定した KMS キーに必要な設定設定とポリシーを更新できます。 - 顧客提供のキーを用いたサーバー側の暗号化 (SSE-C)。
-
お客様が用意したキー (SSE-C) を用いたサーバー側の暗号化を使用してオブジェクトが暗号化されている場合、Macie はオブジェクトを復号化できません。Macie はオブジェクトのメタデータのみを保存およびレポートできます。
このタイプの暗号化の詳細については、Amazon Simple Storage Service ユーザーガイドのお客様が用意したキーによるサーバー側の暗号化の使用を参照してください。
- クライアント側の暗号化
-
クライアント側の暗号化を使用してオブジェクトが暗号化されている場合、Macie はオブジェクトを復号化できません。Macie はオブジェクトのメタデータのみを保存およびレポートできます。例えば、Macie はオブジェクトに関連付けられているオブジェクトとタグのサイズをレポートできます。
Amazon S3 のコンテキストでのこのタイプの暗号化詳細については、Amazon Simple Storage Service ユーザーガイドのクライアント側の暗号化を使用したデータの保護を参照してください。
Macie でバケットインベントリをフィルタリングして、特定のタイプの暗号化を使用するオブジェクトを保存する S3 バケットを判別できます。また、新しいオブジェクトを保存するときに、デフォルトで特定のタイプのサーバー側の暗号化を使用するバケットを判別することもできます。次のテーブルは、バケットインベントリに適用してこの情報を検索できるフィルターの例を示しています。
...のバケットを表示するには | ...でこのフィルターを適用 |
---|---|
SSE-C 暗号化を使用するオブジェクトを保存する | [暗号化方法別のオブジェクト数] が [カスタマー提供]、From = 1 |
DSSE-KMS 暗号化を使用するオブジェクトを保存する | [暗号化方法別のオブジェクト数] が [AWS KMS で管理]、From = 1 |
SSE-S3 暗号化を使用するオブジェクトを保存する | [暗号化方法別のオブジェクト数] が [Amazon S3 で管理]、From = 1 |
クライアント側の暗号化を使用するオブジェクトを保存する (または暗号化されていない) | 暗号化によるオブジェクトカウントは、暗号化なしおよび From = 1 |
DSSE-KMS 暗号化を使用してデフォルトで新しいオブジェクトを暗号化する | [デフォルトの暗号化] = aws:kms:dsse |
SSE-KMS 暗号化を使用してデフォルトで新しいオブジェクトを暗号化する | デフォルトの暗号化= aws:kms |
SSE-S3 暗号化を使用してデフォルトで新しいオブジェクトを暗号化する | デフォルトの暗号化= AES256 |
バケットがデフォルトで DSSE-KMS または SSE-KMS 暗号化を使用して新しいオブジェクトを暗号化するように設定されている場合は、どの AWS KMS keyが使用されるかを判別することもできます。これを行うには、S3 バケットページでバケットを選択します。バケット詳細パネルのサーバー側の暗号化の [AWS KMS key] フィールドを参照します。このフィールドには、Amazon リソースネーム (ARN) またはキーの一意の識別子 (キー ID) が表示されます。
Macie のカスタマーマネージド AWS KMS key の使用を許可する
カスタマーマネージド AWS KMS key (DSSE-KMS または SSE-KMS) を使用して Amazon S3 オブジェクトが暗号化されている場合は、そのキーの使用が許可されている場合にのみ、Amazon Macie はオブジェクトを復号できます。このアクセスを提供する方法は、キーを所有するアカウントがオブジェクトを保存する S3 バケットも所有しているかどうかによって異なります。
-
同じアカウントが AWS KMS key とバケットを所有している場合、アカウントのユーザーはキーのポリシーを更新する必要があります。
-
1 つのアカウントが AWS KMS key を所有し、別のアカウントがバケットを所有している場合、そのキーを所有するアカウントのユーザーはキーに対するクロスアカウントアクセスを許可する必要があります。
このトピックでは、これらのタスクの実行方法を説明し、両方のシナリオの例を示します。カスタマーマネージド AWS KMS keysへのアクセスを許可する方法の詳細については、AWS Key Management Service デベロッパーガイドの「KMS キーのアクセスとアクセス許可」を参照してください。
カスタマーマネージドキーへの同じアカウントのアクセスを許可する
同じアカウントが AWS KMS key と S3 バケットの両方を所有している場合、アカウントのユーザーはキーのポリシーにステートメントを追加する必要があります。追加のステートメントでは、アカウントの Macie サービスリンクロールがキーを使用してデータを復号することを許可する必要があります。キーポリシーの更新の詳細な情報については、AWS Key Management Serviceデベロッパーガイドのキーポリシーの変更を参照してください。
ステートメントにおいて:
-
Principal
要素は、AWS KMS key と S3 バケットを所有するアカウント向け Macie サービスリンクロールの Amazon リソースネーム (ARN) を指定する必要があります。アカウントがオプトイン AWS リージョン 内にある場合、ARN にはリージョンの適切なリージョンコードも含める必要があります。例えば、アカウントが、リージョンコード me-south-1 が設定されている中東 (バーレーン) リージョン内にある場合、
Principal
要素はarn:aws:iam::
を指定する必要があります。ここで、123456789012
:role/aws-service-role/macie.me-south-1.amazonaws.com/AWSServiceRoleForAmazonMacie123456789012
は、アカウントのアカウント ID です。Macie が現在利用可能なリージョンのリージョンコードのリストについては、「AWS 全般のリファレンス」の「Amazon Macie エンドポイントとクォータ」を参照してください。 -
Action
配列は、kms:Decrypt
アクションを指定する必要があります。これは、キーで暗号化される S3 オブジェクトを復号するために Macie が実行することを許可される必要がある唯一の AWS KMS アクションです。
AWS KMS key のポリシーに追加するステートメントの例を次に示します。
{ "Sid": "Allow the Macie service-linked role to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie" }, "Action": [ "kms:Decrypt" ], "Resource": "*" }
前の例では、以下のようになっています。
-
Principal
要素 のAWS
フィールドは、アカウントの Macie サービスリンクロールAWSServiceRoleForAmazonMacie
のARNを指定します。これにより、Macie サービスにリンクされたロールがポリシーステートメントで指定されたアクションを実行することを許可します。123456789012
はアカウント ID の例です。この値をKMS キーと S3 バケットを所有するアカウントのアカウント ID に置き換えます。 -
Action
配列は、Macie サービスリンクロールが KMS キーを使用して実行することを許可されたアクション (キーで暗号化される暗号文を復号) を指定します。
このステートメントをキーポリシーのどこに追加するかは、ポリシーに現在含まれている構造と要素によって異なります。ステートメントをポリシーに追加するときに、構文が有効であることを確認します。キーポリシーは JSON 形式を使用します。これは、ステートメントをポリシーのどこに追加するかに応じて、ステートメントの前後にカンマを追加する必要があることも意味します。
カスタマーマネージドキーへのクロスアカウントアクセスを許可する
1 つのアカウントが AWS KMS key を所有 (キー所有者) し、別のアカウントが S3 バケットを所有 (バケット所有者) している場合、キー所有者は KMS キーに対するクロスアカウントアクセスをバケット所有者に提供する必要があります。これを行うには、キー所有者はまず、キーのポリシーにより、バケット所有者がキーの使用とキーの付与の作成の両方を行うことを許可することを確認します。次に、バケット所有者はキーの付与を作成します。付与 は、ポリシーツールであり、付与によって指定された条件が満たされている場合、AWS プリンシパルに暗号化オペレーションで (KMS キー) の使用を許可します。この場合、許可は、関連する許可をバケット所有者のアカウントの Macie サービスリンクロールに委任します。
キーポリシーの更新の詳細な情報については、AWS Key Management Serviceデベロッパーガイドのキーポリシーの変更を参照してください。付与の詳細については、AWS Key Management Service デベロッパーガイドのAWS KMS での付与を参照してください。
ステップ 1: キーポリシーを変更する
キーポリシーでは、キー所有者は、ポリシーに 2 つのステートメントが含まれていることを確認する必要があります:
-
最初のステートメントは、バケット所有者がキーを使用してデータを復号することを許可します。
-
2 番目のステートメントは、バケット所有者が自らの (当該バケット所有者の) アカウントの Macie サービスリンクロールの許可を作成することを許可します。
最初のステートメントでは、Principal
要素は、バケット所有者のアカウントの ARN を指定する必要があります。Action
配列は、kms:Decrypt
アクションを指定する必要があります。これは、キーで暗号化されるオブジェクトを復号するために Macie が実行することを許可される必要がある唯一の AWS KMS アクションです。AWS KMS key のポリシーのこのステートメントの例を次に示します。
{ "Sid": "Allow account
111122223333
to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333
:root" }, "Action": [ "kms:Decrypt" ], "Resource": "*" }
前の例では、以下のようになっています。
-
Principal
要素のAWS
フィールドは、バケット所有者のアカウントの ARN を指定します (111122223333
)。これにより、バケット所有者がポリシーステートメントで指定されたアクションを実行することを許可します。111122223333
はアカウント ID の例です。この値をバケット所有者のアカウントのアカウント ID に置き換えます。 -
Action
配列は、バケット所有者が KMS キーを使用して実行することを許可されたアクション (キーで暗号化される暗号文を復号) を指定します。
キーポリシーの 2 番目のステートメントは、バケット所有者が自分のアカウントの Macie サービスにリンクされたロールの付与を作成することを許可します。このステートメントでは、Principal
要素は、バケットの所有者のアカウントの ARN を指定する必要があります。Action
配列は、kms:CreateGrant
アクションを指定する必要があります。Condition
要素は、ステートメントで指定された kms:CreateGrant
アクションへのアクセスをフィルタリングできます。AWS KMS key のポリシーのこのステートメントの例を次に示します。
{ "Sid": "Allow account
111122223333
to create a grant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333
:root" }, "Action": [ "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringEquals": { "kms:GranteePrincipal": "arn:aws:iam::111122223333
:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie" } } }
前の例では、以下のようになっています。
-
Principal
要素のAWS
フィールドは、バケット所有者のアカウントの ARN を指定します (111122223333
)。これにより、バケット所有者がポリシーステートメントで指定されたアクションを実行することを許可します。111122223333
はアカウント ID の例です。この値をバケット所有者のアカウントのアカウント ID に置き換えます。 -
Action
配列は、バケット所有者が KMS キーを使用して実行することを許可されたアクションを指定します (キーの付与を作成)。 -
Condition
要素は、StringEquals
条件演算子とkms:GranteePrincipal
条件キーを使用して、ポリシーステートメントで指定されたアクションへのアクセスをフィルタリングします。この場合、バケット所有者は指定されたGranteePrincipal
のためのみ許可を作成できます。これは、これらのバケット所有者のアカウントの Macie サービスリンクロールの ARN です。そのARNでは、111122223333
はアカウント ID の例です。この値をバケット所有者のアカウントのアカウント ID に置き換えます。バケット所有者のアカウントがオプトイン AWS リージョン 内にある場合、Macie サービスリンクロールの ARN に適切なリージョンコードも含めます。例えば、アカウントが、リージョンコード me-south-1 が設定されている中東 (バーレーン) リージョンにある場合は、ARN で
macie.amazonaws.com
をmacie.me-south-1.amazonaws.com
と置き換えます。Macie が現在利用可能なリージョンのリージョンコードのリストについては、「AWS 全般のリファレンス」の「Amazon Macie エンドポイントとクォータ」を参照してください。
キー所有者がこれらのステートメントをキーポリシーのどこに追加するかは、ポリシーに現在含まれている構造と要素によって異なります。キー所有者がステートメントを追加するときは、構文が有効であることを確認する必要があります。キーポリシーは JSON 形式を使用します。これは、ステートメントをポリシーのどこに追加するかに応じて、キー所有者は各ステートメントの前後にカンマを追加する必要があることも意味します。
ステップ 2: 許可を作成する
キー所有者が必要に応じてキーポリシーを更新した後、バケット所有者はキーの付与を作成する必要があります。この付与は、関連するアクセス許可を (バケット所有者の) アカウントの Macie サービスにリンクされたロールに委任します。バケット所有者が付与を作成する前に、バケット所有者はアカウントの kms:CreateGrant
アクションの実施が許可されていることを確認する必要があります。このアクションにより、ロール所有者が既存のカスタマーマネージド AWS KMS key に許可を追加することが許可されます。
付与を作成するには、バケット所有者は AWS Key Management Service APIの CreateGrant オペレーションを使用できます。バケット所有者が付与を作成するときに、必要なパラメータに次の値を指定する必要があります。
-
KeyId
– KMS キーの ARN。KMS キーへのクロスアカウントアクセスでは、この値は ARN である必要があります。キー ID にすることはできません。 -
GranteePrincipal
– アカウントの Macie サービスリンクロール (AWSServiceRoleForAmazonMacie
) の ARN この値はarn:aws:iam::
である必要があります。ここで、111122223333
:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie111122223333
は、バケット所有者のアカウントのアカウント ID です。アカウントがオプトインリージョン内にある場合、ARN には適切なリージョンコードを含める必要があります。例えば、アカウントが、リージョンコード me-south-1 が設定されている中東 (バーレーン) リージョン内にある場合、ARN は
arn:aws:iam::
である必要があります。ここで、111122223333
:role/aws-service-role/macie.me-south-1.amazonaws.com/AWSServiceRoleForAmazonMacie111122223333
は、バケット所有者のアカウント ID です。 -
Operations
– AWS KMS 復号アクション (Decrypt
)。これは、KMS キーで暗号化されるオブジェクトを復号するために Macie が実行することを許可される必要がある唯一の AWS KMS アクションです。
AWS Command Line Interface (AWS CLI) を使用してカスタマーマネージド KMS キー用の許可を作成するには、create-grant コマンドを実行します。以下の例のように指定します。この例は Microsoft Windows 用にフォーマットされており、読みやすさを向上させるためにキャレット (^) の行連結文字を使用します。
C:\>
aws kms create-grant ^ --key-id
arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab
^ --grantee-principalarn:aws:iam::111122223333:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie
^ --operations "Decrypt"
ここで、
-
key-id
は、付与を適用する KMS キーの ARN を指定します。 -
grantee-principal
は、許可によって指定されたアクションの実行を許可されたアカウントの Macie サービスリンクロールの ARN を指定します。この値は、キーポリシーの 2 番目のステートメントのkms:GranteePrincipal
条件によって指定された ARN と一致する必要があります。 -
operations
は、許可が、指定されたプリンシパルが実行することを許可するアクション (KMS キーで暗号化される暗号文の復号) を指定します。
コマンドが正常に実行された場合は、以下のような出力が表示されます。
{
"GrantToken": "<grant token>",
"GrantId": "1a2b3c4d2f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2"
}
ここで、GrantToken
は、作成された付与を表す、一意で、非シークレットで、可変長の base64 でエンコードされた文字列であり、GrantId
は、付与の一意の識別子です。