S3のパブリックアクセスを自動でブロックする方法
目次
こんにちは。スカイアーチHRソリューションズのMiyahiraです!
今回はS3のパブリックアクセスがブロックされているか確認するAWS Configルールの作成と、設定変更されて無効になってしまった場合に自動で元に戻すAWS Configの修復アクションを設定したいと思います。
また、一発でサクッと設定したいという方のためにCloudFormationのコードも最後の方に載せているので、飛ばして見て頂いて大丈夫です!
公開しているS3バケットがない、これから公開する気もないよって方は設定しておくといいでしょう。
ブロックパブリックアクセスとは?
S3バケットを公開するかしないかの設定です。この設定を無効(パブリックアクセスをブロックしない)とした場合、誰でもS3にアクセスできてしまいます。
ウェブサイトで静的ファイルを保存して公開している場合はこれでいいのですが、機密情報などを含んでいたり外部からアクセスされたくないのであれば、有効にしてブロックしておきましょう。
この設定は、バケット単位とアカウントレベルで設定できます。アカウントレベルで設定することによって、既存のバケットからこれから作成するバケットまで、すべてでパブリックアクセスをブロックできます。
今回は、アカウントレベルでブロックパブリックアクセスを有効にします。
さっそくやってみよう!
ブロックパブリックアクセスを確認する
S3のコンソールを開き、「このアカウントのブロックパブリックアクセス設定」を確認します。現在はすべて「オフ」の状態になっており、誰でもアクセスできる状態になっています。
基本、「オン」になっている状態かと思うので、編集を押して「オフ」に変更しておいてください。
※公開したくないS3バケットがある場合は、バケットの方のパブリックアクセスは有効化しておいてください。
AWS Configルールを設定する
次に、Configのコンソールを開きルールの追加をします。
今回は、マネージドルールの「s3-account-level-public-access-blocks」を使用します。これは、必要なパブリックアクセスブロック設定がアカウントレベルから設定されているかどうかを確認するルールです。
その他、名前や変更範囲、パラメータはデフォルトのままで大丈夫です。
作成完了後に数分待ってルールを開くと、下の方に検知した情報が記載されます。
今回は、ブロックパブリックアクセスを無効にしているので「非準拠」となっています。
修復アクションを設定する
次に、修復アクションの設定を行います。これを設定することにより、ブロックパブリックアクセスを強制的に自動で有効にすることができます。
IAMポリシーの作成
Configから修復アクションを実行するための権限と、S3のブロックパブリックアクセスを有効にするための権限を追加します。
- ssm:StartAutomationExecution
- ssm:GetAutomationExecution
- s3:GetAccountPublicAccessBlock
- s3:PutAccountPublicAccessBlock
IAMロールの作成
先ほど作成したポリシーをアタッチしたロールを作成し、SSMがAssumeRoleできるように信頼します。
修復アクションの作成
作成したConfigルールを選択し、アクションから「修復の管理」から修復アクションをクリックし、下記を設定します。
- 修復方法:自動修復
- 修復アクション:AWSConfigRemediation-ConfigureS3PublicAccessBlock
- リソースIDパラメータ:AccountId
- パラメータ:
AccountId > RESOURCE_ID ※リソースIDパラメータでAccountIdを選択すると自動で入力される
AutomationAssumeRole > 作成したIAMロールのARN
RestrictPublicBuckets > True
BlockPublicAcls > True
IgnorePublicAcls > True
BlockPublicPolicy > True - その他の項目はデフォルトのままでOK
設定完了後、今回は確認のために即時修復させたいので、「修復」をクリックして手動で修復します
数分後にページを更新すると準拠になり、S3のコンソールでも ブロックパブリックアクセス がオンになっていることが確認できます。
これまでの設定を一発でやっちゃう方法!
AWSマネジメントコンソールでポチポチ設定するのもいいですが、もっと時間を短縮してパパっと構築したい!と思う方も多くいらっしゃるんじゃないでしょうか?
そんな方のためにCloudformationテンプレートを用意しました!
下記のコードをそのままコピペして.ymlでファイルを作成しCloudformationでデプロイするだけで、これまで行った設定が一発で出来ちゃいます。
Description: Config rule & RemediationConfiguration
Resources:
# Config rule
ConfigRuleS3AccountLebelPublicAccessBlocks:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: s3-account-level-public-access-blocks
Scope:
ComplianceResourceTypes:
- AWS::S3::AccountPublicAccessBlock
Source:
Owner: AWS
SourceIdentifier: S3_ACCOUNT_LEVEL_PUBLIC_ACCESS_BLOCKS
# IAM Policy
PolicySsmDocument:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- ssm:StartAutomationExecution
- ssm:GetAutomationExecution
- s3:GetAccountPublicAccessBlock
- s3:PutAccountPublicAccessBlock
Resource:
- "*"
Description: ""
ManagedPolicyName: AWSConfigRemediation-ConfigureS3PublicAccessBlock-Policy
# IAM Role
RoleSsmDocument:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- ssm.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- Ref: PolicySsmDocument
RoleName: AWSConfigRemediation-ConfigureS3PublicAccessBlock-Role
# Config rule RemediationConfiguration
AWSConfigRemediationConfigureS3PublicAccessBlock:
Type: AWS::Config::RemediationConfiguration
Properties:
Automatic: True
ConfigRuleName: s3-account-level-public-access-blocks
MaximumAutomaticAttempts: 5
Parameters:
AccountId:
ResourceValue:
Value: RESOURCE_ID
AutomationAssumeRole:
StaticValue:
Values:
- Fn::GetAtt:
- RoleSsmDocument
- Arn
IgnorePublicAcls:
StaticValue:
Values:
- True
BlockPublicPolicy:
StaticValue:
Values:
- True
BlockPublicAcls:
StaticValue:
Values:
- True
RestrictPublicBuckets:
StaticValue:
Values:
- True
RetryAttemptSeconds: 60
TargetId: AWSConfigRemediation-ConfigureS3PublicAccessBlock
TargetType: SSM_DOCUMENT
まとめ
今回は、S3のブロックパブリックアクセスを有効化し自動で修復する方法について、マネージメントコンソールでポチポチ設定する方法と、Cloudformationで設定する方法を記事にしてみました!
ウェブサイトで静的ファイルを保存して公開している場合などを除いて、基本的にパブリックアクセスはブロックしておくと思うので、ぜひこの設定をしておきましょう!
どなたかの参考になれば幸いです。