Storage Gateway (S3 File Gateway) のファイル共有先 S3 バケットを、SSM Fleet Manager ファイルシステム操作より操作可能か確認してみた

2024.05.07

はじめに

テクニカルサポートの 片方 です。
Storage Gateway (S3 File Gateway) のファイル共有 S3 バケットを、SSM Fleet Manager の一機能である ファイルシステムの操作 でも可能か確認してみました。

結論から

オブジェクト (ファイル) を新たに置くことは叶わないものの、SSM Fleet Manager ファイルシステムの操作では以下を実施することが可能です。

  • 共有先 S3 バケットのオブジェクト (ファイル) の確認
  • 名前の変更
  • 対象オブジェクト (ファイル) の削除
  • ディレクトリの作成

事前準備

Storage Gateway

下記弊社ブログを参考に作成しました。ブログ内同様にマウントポイントとなるディレクトリについても作成しておきます。

sh-5.2$ sudo mkdir /storage
sh-5.2$ df -h
Filesystem        Size  Used Avail Use% Mounted on
devtmpfs          4.0M     0  4.0M   0% /dev
tmpfs             3.9G     0  3.9G   0% /dev/shm
tmpfs             1.6G  420K  1.6G   1% /run
/dev/nvme0n1p1    8.0G  1.5G  6.5G  19% /
tmpfs             3.9G     0  3.9G   0% /tmp
/dev/nvme0n1p128   10M  1.3M  8.7M  13% /boot/efi
sh-5.2$ sudo mount -t nfs -o nolock,hard 10.0.14.222:/s3-storage-gateway-test-bucket /storage
sh-5.2$ df -h
Filesystem                                   Size  Used Avail Use% Mounted on
devtmpfs                                     4.0M     0  4.0M   0% /dev
tmpfs                                        3.9G     0  3.9G   0% /dev/shm
tmpfs                                        1.6G  428K  1.6G   1% /run
/dev/nvme0n1p1                               8.0G  1.5G  6.5G  19% /
tmpfs                                        3.9G     0  3.9G   0% /tmp
/dev/nvme0n1p128                              10M  1.3M  8.7M  13% /boot/efi
tmpfs                                        782M     0  782M   0% /run/user/0
10.0.14.222:/s3-storage-gateway-test-bucket  8.0E     0  8.0E   0% /storage
sh-5.2$

ファイル共有先の S3 バケット: s3-storage-gateway-test-bucket にしました。
対象 S3 バケットは以下の構成にしました。

マウント対象の EC2

マウント対象の EC2 インスタンスには、SSM Fleet Manager の一機能である ファイルシステムの操作 が出来るようにします。下記弊社ブログを参考にしてください。

確認してみた

マウント対象の EC2 インスタンスがマネージドノードに表示されていることを確認します。 ノードアクションから、ツールを選択します。その後にファイルシステムを表示させます。

検索窓にマウントポイントのディレクトリ名を記述します。例: storage

ディレクトリが存在しているのは確認できましたので、中が見えるか確認します。

ファイル共有先の S3 バケット: s3-storage-gateway-test-bucket が見れました。
次は、テキストとしてプレビュー可能かを確認します。

結果、確認可能でした。

名前の変更、対象ファイルの削除、ディレクトリの作成をやってみます。 その後、S3 バケット側でどうなっているか確認します。

  • 名前の変更 test1.txt に対して名前の変更をしました。
    test1.txt ⇒ test1-to-rename.txt

  • 対象ファイルの削除 test5.txt を対象として削除しました。

  • ディレクトリの作成 /storage/text に作成するディレクトリ名は test100 にしました。

S3 バケット側の確認

結果、共有先 S3 バケットでも全て反映されていることを確認しました。

注意点

S3 コンソールなどで直接バケット内のオブジェクト (ファイル) を操作した場合、Storage Gateway 側には反映されません。こちらを反映させるためには、キャッシュの更新が必要です。
SSM Fleet Manager ファイルシステムの操作についても同様、反映されないことに注意してください。(検証済み)

補足

CloudTrail ではどの様な操作履歴が残るのか確認しました。 例えば、対象ファイルの削除を行い確認したところ、イベント名: SendCommand が 2 回 記録され、その後にマウント対象の EC2 に関して、イベント名: UpdateInstanceInformation が記録されるようです。

以下はイベントレコードの例です ※一部マスクしています。

最初に記録された SendCommand
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "xxxxxxxxxxZEABCLN5ADA:cm-xxxxx.xxxxx",
        "arn": "arn:aws:sts::123456789012:assumed-role/cm-xxxxx.xxxxx/cm-xxxxx.xxxxx",
        "accountId": "123456789012",
        "accessKeyId": "ABCDEFGHIJK12345",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "xxxxxxxxxxZEABCLN5ADA",
                "arn": "arn:aws:iam::123456789012:role/cm-xxxxx.xxxxx",
                "accountId": "123456789012",
                "userName": "cm-xxxxx.xxxxx"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-04-19T06:04:46Z",
                "mfaAuthenticated": "true"
            }
        }
    },
    "eventTime": "2024-04-19T06:50:06Z",
    "eventSource": "ssm.amazonaws.com",
    "eventName": "SendCommand",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "124.xxx.xx.xx",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
    "requestParameters": {
        "instanceIds": [
            "i-052fcf7f6fa590e08"
        ],
        "documentName": "AWSFleetManager-DeleteFileSystemItem",
        "documentVersion": "$DEFAULT",
        "parameters": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "interactive": false
    },
    "responseElements": {
        "command": {
            "commandId": "aaaaaaaa-bbbbb-xxxx-xxxx-aaaaaaaaaaa",
            "documentName": "AWSFleetManager-DeleteFileSystemItem",
            "documentVersion": "$DEFAULT",
            "comment": "",
            "expiresAfter": "Apr 19, 2024 10:50:06 AM",
            "parameters": "HIDDEN_DUE_TO_SECURITY_REASONS",
            "instanceIds": [
                "i-052fcf7f6fa590e08"
            ],
            "targets": [],
            "requestedDateTime": "Apr 19, 2024 6:50:06 AM",
            "status": "Pending",
            "statusDetails": "Pending",
            "outputS3Region": "ap-northeast-1",
            "outputS3BucketName": "",
            "outputS3KeyPrefix": "",
            "maxConcurrency": "50",
            "maxErrors": "0",
            "targetCount": 1,
            "completedCount": 0,
            "errorCount": 0,
            "deliveryTimedOutCount": 0,
            "serviceRole": "",
            "notificationConfig": {
                "notificationArn": "",
                "notificationEvents": [],
                "notificationType": ""
            },
            "cloudWatchOutputConfig": {
                "cloudWatchLogGroupName": "",
                "cloudWatchOutputEnabled": false
            },
            "interactive": false,
            "timeoutSeconds": 3600,
            "clientName": "",
            "clientSourceId": "",
            "alarmConfiguration": {
                "ignorePollAlarmFailure": false,
                "alarms": []
            },
            "triggeredAlarms": []
        }
    },
    "requestID": "f43ff144-5b6c-xxxx-xxxx-xxxxxxxxxxxx",
    "eventID": "f82fdb02-xxxx-xxxx-aaaa-aaaaaaaaaaa",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "ssm.ap-northeast-1.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
}
次に記録された SendCommand
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "xxxxxxxxxxZEABCLN5ADA:cm-xxxxx.xxxxx",
        "arn": "arn:aws:sts::123456789012:assumed-role/cm-xxxxx.xxxxx/cm-xxxxx.xxxxx",
        "accountId": "123456789012",
        "accessKeyId": "ABCDEFGHIJK12345",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "xxxxxxxxxxZEABaaa5ADA",
                "arn": "arn:aws:iam::123456789012:role/cm-xxxxx.xxxxx",
                "accountId": "123456789012",
                "userName": "cm-xxxxx.xxxxx"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-04-19T06:04:46Z",
                "mfaAuthenticated": "true"
            }
        }
    },
    "eventTime": "2024-04-19T06:50:09Z",
    "eventSource": "ssm.amazonaws.com",
    "eventName": "SendCommand",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "124.xxx.xx.xx",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
    "requestParameters": {
        "instanceIds": [
            "i-052fcf7f6fa590e08"
        ],
        "documentName": "AWSFleetManager-GetFileSystemContent",
        "documentVersion": "$DEFAULT",
        "parameters": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "interactive": false
    },
    "responseElements": {
        "command": {
            "commandId": "c2e02a96-xxxx-xxxx-aaaa-xxxxxxxxxxxx",
            "documentName": "AWSFleetManager-GetFileSystemContent",
            "documentVersion": "$DEFAULT",
            "comment": "",
            "expiresAfter": "Apr 19, 2024 10:50:09 AM",
            "parameters": "HIDDEN_DUE_TO_SECURITY_REASONS",
            "instanceIds": [
                "i-052fcf7f6fa590e08"
            ],
            "targets": [],
            "requestedDateTime": "Apr 19, 2024 6:50:09 AM",
            "status": "Pending",
            "statusDetails": "Pending",
            "outputS3Region": "ap-northeast-1",
            "outputS3BucketName": "",
            "outputS3KeyPrefix": "",
            "maxConcurrency": "50",
            "maxErrors": "0",
            "targetCount": 1,
            "completedCount": 0,
            "errorCount": 0,
            "deliveryTimedOutCount": 0,
            "serviceRole": "",
            "notificationConfig": {
                "notificationArn": "",
                "notificationEvents": [],
                "notificationType": ""
            },
            "cloudWatchOutputConfig": {
                "cloudWatchLogGroupName": "",
                "cloudWatchOutputEnabled": false
            },
            "interactive": false,
            "timeoutSeconds": 3600,
            "clientName": "",
            "clientSourceId": "",
            "alarmConfiguration": {
                "ignorePollAlarmFailure": false,
                "alarms": []
            },
            "triggeredAlarms": []
        }
    },
    "requestID": "f43ff144-1234-xxxx-xxxx-xxxxxxxxxxxx",
    "eventID": "f82f1234-xxxx-xxxx-aaaa-aaaaaaaaaaa",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "ssm.ap-northeast-1.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
}
その後に記録された UpdateInstanceInformation
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROATxxxxxxxxxx:i-052fcf7f6fa590e08",
        "arn": "arn:aws:sts::123456789012:assumed-role/AmazonSSMManagedInstanceCore/i-052fcf7f6fa590e08",
        "accountId": "123456789012",
        "accessKeyId": "ABCDEFGHIJK12345",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROATxxxxxxxxxx",
                "arn": "arn:aws:iam::123456789012:role/AmazonSSMManagedInstanceCore",
                "accountId": "123456789012",
                "userName": "AmazonSSMManagedInstanceCore"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-04-19T05:01:41Z",
                "mfaAuthenticated": "false"
            },
            "ec2RoleDelivery": "2.0"
        }
    },
    "eventTime": "2024-04-19T06:51:46Z",
    "eventSource": "ssm.amazonaws.com",
    "eventName": "UpdateInstanceInformation",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "13.xxx.x.xxx",
    "userAgent": "aws-sdk-go/1.44.260 (go1.20.12; linux; amd64) amazon-ssm-agent/",
    "requestParameters": {
        "instanceId": "i-052fcf7f6fa590e08",
        "agentVersion": "3.3.131.0",
        "agentStatus": "Active",
        "platformType": "Linux",
        "platformName": "Amazon Linux",
        "platformVersion": "2023",
        "iPAddress": "10.0.26.39",
        "computerName": "ip-10-0-26-39.ap-northeast-1.compute.internal",
        "agentName": "amazon-ssm-agent",
        "availabilityZone": "ap-northeast-1c",
        "availabilityZoneId": "apne1-az1",
        "sSMConnectionChannel": "ssmmessages"
    },
    "responseElements": null,
    "requestID": "aaaaaaaa-bbbb-cccc-1234-xxxxxxxxxxxx",
    "eventID": "dddddddd-cccc-bbbb-aaaa-eeeeeeeeeeee",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "ssm.ap-northeast-1.amazonaws.com"
    }
}

操作したユーザー名(ロール名)が表示されるので、何らかの操作をしたことは判断可能ですが、詳細な操作履歴を確認したい場合はバケット側でサーバーアクセスのログ記録を有効にするなどご検討ください。

まとめ

本ブログが誰かの参考となれば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。