この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon Macieに3種類の新しいマネージドデータ識別子が
こんにちは、のんピ(@non____97)です。
Amazon Macieに3種類の新しいマネージドデータ識別子が追加されました。
このアップデートでS3バケット内の以下情報を検出できるようになりました。
- HTTP BASIC認証ヘッダー
- HTTP Cookie
- JSON Web Token(以降JWT)
AWS公式ドキュメントのマネージド識別子一覧にも追加されています。
アプリケーションのデバッグログをS3バケットに出力していると、なんだか紛れ込みそうな情報ですよね。
早速やってみたので紹介します。
やってみた
テスト用ファイルの作成
HTTP BASIC認証ヘッダー
まず、テスト用のファイルを作成します。
Amazon Macieで検出されるためにはRFC 7617 - The 'Basic' HTTP Authentication Schemeで記載されているようなフィールド名と認証スキームを含む完全なヘッダーが必要です。
今回はAuthorizationヘッダーとProxy-Authorizationヘッダーを入力しました。
HTTP BASIC認証ヘッダーのテスト用ファイルは以下の通りです。
HTTP_BASIC_AUTH_HEADER.txt
Authorization: Basic bm9uLTk3d293d293
Proxy-Authorization: Basic bm9uLTk3cGllbnBpZW4=
ちなみにbm9uLTk3d293d293
とbm9uLTk3cGllbnBpZW4=
はBASE64でエンコードした文字列です。
> echo bm9uLTk3d293d293 | base64 -d
non-97wowwow
> echo bm9uLTk3cGllbnBpZW4= | base64 -d
non-97pienpien
HTTP Cookie
検出には完全なCookieヘッダーまたはSet-Cookieヘッダーが必要です。
HTTP Cookieのテスト用ファイルは以下の通りです。
HTTP_COOKIE.txt
Set-Cookie: id=non-97
Cookie: session=8888; lang=ja
JWT
Amazon Macieで検出されるためにはRFC 7519 - JSON Web Token (JWT)で指定された要件に準拠する必要があります。
今回はJSON Web Tokens - jwt.ioでエンコードしました。
JWTのテスト用ファイルは以下の通りです。
JSON_WEB_TOKEN.txt
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Im5vbi05NyIsImlhdCI6MTUxNjIzOTAyMn0.AqLcYeBto0xNa-4aOVtYws-UIgBbVUG2snrSWPBpxYI
エンコード元のヘッダーやペイロード、署名は以下の通りです。
JWTヘッダー
{
"alg": "HS256",
"typ": "JWT"
}
JWTペイロード
{
"sub": "1234567890",
"name": "non-97",
"iat": 1516239022
}
署名
HMACSHA256(
base64UrlEncode(JWTヘッダー) + "." +
base64UrlEncode(JWTペイロード),
non-97-secret
) secret base64 encoded
テスト用ファイルの作成が完了したら、ファイルをS3バケットにアップロードします。
Amazon Macieのジョブの作成
それでは、Amazon Macieのジョブを作成します。
まだAmazon Macieを利用していない場合は、Amazon Macieのコンソールからご利用開始にあたって
をクリックします。
Macieを有効化
をクリックします。
ちなみに作成されるIAMロールのポリシーと信頼関係は以下の通りです。
AWSServiceRoleForAmazonMacieのポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudtrail:DescribeTrails",
"cloudtrail:GetEventSelectors",
"cloudtrail:GetTrailStatus",
"cloudtrail:ListTags",
"cloudtrail:LookupEvents",
"iam:ListAccountAliases",
"organizations:DescribeAccount",
"organizations:ListAccounts",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"s3:GetBucketLogging",
"s3:GetBucketPolicy",
"s3:GetBucketPolicyStatus",
"s3:GetBucketPublicAccessBlock",
"s3:GetBucketTagging",
"s3:GetBucketVersioning",
"s3:GetBucketWebsite",
"s3:GetEncryptionConfiguration",
"s3:GetLifecycleConfiguration",
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectTagging"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cloudtrail:CreateTrail",
"cloudtrail:StartLogging",
"cloudtrail:StopLogging",
"cloudtrail:UpdateTrail",
"cloudtrail:DeleteTrail",
"cloudtrail:PutEventSelectors"
],
"Resource": "arn:aws:cloudtrail:*:*:trail/AWSMacieTrail-DO-NOT-EDIT"
},
{
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersion",
"s3:DeleteObjectVersionTagging",
"s3:PutBucketPolicy"
],
"Resource": [
"arn:aws:s3:::awsmacie-*",
"arn:aws:s3:::awsmacietrail-*",
"arn:aws:s3:::*-awsmacietrail-*"
]
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup"
],
"Resource": [
"arn:aws:logs:*:*:log-group:/aws/macie/*"
]
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"arn:aws:logs:*:*:log-group:/aws/macie/*:log-stream:*"
]
}
]
}
AWSServiceRoleForAmazonMacieの信頼関係
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "macie.amazonaws.com"
},
"Action": [
"sts:AssumeRole"
]
}
]
}
ジョブの作成はジョブ
-ジョブを作成
をクリックします。
まず、対象のS3バケットを選択します。先ほどテスト用ファイルをアップロードしたS3バケットを選択して、次へ
をクリックします。
対象のS3バケットを確認して、問題なければ次へ
をクリックします。
次にデータ検出オプションです。
今回は一回のみのジョブなので、ワンタイムジョブ
を選択して次へ
をクリックします。
次にマネージドデータ識別子オプションです。
今回は全てのマネージドデータ識別子を使用するので、All
のまま次へ
をクリックします。
次にカスタムデータ識別子の選択です。
今回はカスタムデータ識別子は使用しないので、そのまま次へ
をクリックします。
次に名前と説明の入力です。
ジョブの名前としてamazon-macie-test
を入力して次へ
をクリックします。
最後に設定内容の確認です。
問題がなければ送信
をクリックします。
ジョブの作成は以上です。
検出結果の確認
10分ほど待つとジョブの実行が完了していました。
ジョブのJSONを確認すると以下のようになっていました。
{
"clientToken": "0adeb9d9-e01c-42ed-923f-ecee801627f6",
"createdAt": "2022-04-26T04:51:18.709Z",
"customDataIdentifierIds": [],
"description": null,
"initialRun": false,
"jobArn": "arn:aws:macie2:us-east-1:<AWSアカウントID>:classification-job/912a29dc5e7c4b72e5b25961555b4320",
"jobId": "912a29dc5e7c4b72e5b25961555b4320",
"jobStatus": "COMPLETE",
"jobType": "ONE_TIME",
"lastRunErrorStatus": {
"code": "NONE"
},
"lastRunTime": "2022-04-26T04:51:23.990Z",
"managedDataIdentifierSelector": "ALL",
"name": "amazon-macie-test",
"s3JobDefinition": {
"bucketDefinitions": [
{
"accountId": "<AWSアカウントID>",
"buckets": [
"amazon-macie-test-20220426"
]
}
],
"scoping": {}
},
"samplingPercentage": 100,
"statistics": {
"approximateNumberOfObjectsToProcess": 0,
"numberOfRuns": 1
},
"tags": {}
}
検出結果を確認すると、3件検出されていました。
amazon-macie-test-20220426/HTTP_BASIC_AUTH_HEADER.txt
:SensitiveData:S3Object/Credentials
amazon-macie-test-20220426/JSON_WEB_TOKEN.txt
:SensitiveData:S3Object/Credentials
amazon-macie-test-20220426/HTTP_COOKIE.txt
:SensitiveData:S3Object/Personal
今回追加されたマネージド識別子で検出されていそうですね。
詳細をそれぞれ確認していきます。
HTTP BASIC認証ヘッダー検出の詳細は以下の通りです。
「認証情報 Http basic auth header」が2
となっており、テストファイルに入力した2行どちらも検出されたことが分かります。
JWT検出の詳細は以下の通りです。
「認証情報 Json web token」が1
となっており、テストファイルに入力した内容が検出されたことが分かります。
HTTP Cookie検出の詳細は以下の通りです。
「個人情報 Http cookie」が2
となっており、テストファイルに入力した2行どちらも検出されたことが分かります。
クレデンシャルの扱いには気をつけよう
Amazon MacieでHTTP BASIC認証ヘッダー / HTTP Cookie / JWTを検出できるようになったアップデートを紹介しました。
上手く活用すれば、「クレデンシャルがログに残ったまま運用がされていました」みたいなことを防げそうですね。
SecurityHubと連携させてアラートを飛ばすことも可能なので、Amazon Macieを使う場合はセットで使いたいです。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!