個人または企業ユーザーのアクセスキーペアが漏洩した場合、Object Storage Service (OSS) リソースへのアクセス権限を持たないユーザーがリソースに対する操作を実行できるようになり、データセキュリティに脅威をもたらします。 この問題に対処するため、OSS はデータセキュリティを確保するためのベストプラクティスを提供します。
以下のベストプラクティスは一般的なセキュリティ対策であり、完全なセキュリティソリューションではありません。 これらのベストプラクティスは参考としてのみ提供されており、お客様のビジネスシナリオには適していない場合があります。 データセキュリティの脅威を常に認識し、必要な予防措置を講じることを推奨します。
バケットまたはオブジェクトの ACL のプライベート設定
ビジネス上、匿名ユーザーを含むすべてのユーザーが OSS リソースのデータの読み取りと書き込みを行う必要がある場合を除き、バケットまたはオブジェクトのアクセス制御リスト (ACL) をパブリック読み取りまたはパブリック読み取り/書き込みに設定しないでください。 たとえば、バケットの ACL をパブリック読み取りまたはパブリック読み取り/書き込みに設定すると、次のような影響があります。
-
パブリック読み取り/書き込み:匿名ユーザーを含むすべてのユーザーが、バケット内のオブジェクトのデータの読み取りと書き込みを行えます。
警告すべてのインターネットユーザーがバケット内のオブジェクトにアクセスし、バケットにデータを書き込めるようになります。 これにより、データ漏洩や予期せぬ高額料金が発生する可能性があります。 ユーザーが禁止されているデータや情報をバケット内のオブジェクトに書き込んだ場合、お客様の正当な利益と権利が侵害されるおそれがあります。 必要がない限り、バケットの ACL をパブリック読み取り/書き込みに設定しないことを推奨します。
-
パブリック読み取り:バケット所有者のみがバケット内のオブジェクトにデータを書き込めます。 匿名ユーザーを含む他のユーザーは、バケット内のオブジェクトのデータを読み取ることができます。
警告すべてのインターネットユーザーがバケット内のオブジェクトにアクセスできるようになります。 これにより、データ漏洩や予期せぬ高額料金が発生する可能性があります。 バケットの ACL をパブリック読み取りに設定する際は、十分にご注意ください。
パブリック読み取りアクセスまたはパブリック読み取り/書き込みアクセスを許可するバケットまたはオブジェクトは、データ侵害につながるおそれがあります。 したがって、オブジェクト ACL またはバケット ACL をプライベートに設定することを推奨します。 バケット ACL をプライベートに設定した場合、バケット所有者のみがバケット内のオブジェクトのデータの読み取りと書き込みを行えます。 したがって、オブジェクト ACL またはバケット ACL をプライベートに変更する前に、ビジネスに影響がないことを確認してください。
オブジェクト ACL またはバケット ACL をプライベートに設定するには、複数の方法があります。 詳細については、「バケット ACL」および「オブジェクトの ACL の設定」をご参照ください。
プレーンテキストのアクセスキーペアのコードへの格納と、暗号化アクセスキーペアのローカル保存の回避
コード内のプレーンテキストのアクセスキーペアは、コードと一緒に漏洩するおそれがあります。 ローカルに暗号化して保存したアクセスキーペアも、暗号化・復号化されたコンテンツがメモリに保存され、そのメモリ上のデータが別のデバイスに保存されるおそれがあるため、安全ではありません。 モバイルアプリやコンピューター上のアプリケーションは、これらのリスクにさらされやすいです。 攻撃者は、インジェクション、API フック、動的デバッグなどの技術を使うだけで、復号化されたデータを取得できてしまいます。
コード内のプレーンテキストのアクセスキーペアを回避するには、サーバー上で Alibaba Cloud SDK のマネージドシークレットプラグインを使用できます。 これにより、アクセスキーペアがソースコードまたはコンパイル済みコードと一緒に漏洩するのを防ぐことができます。 Alibaba Cloud SDK のマネージドシークレットプラグインの詳細については、「Alibaba Cloud SDK のマネージドシークレットプラグイン」をご参照ください。
この方法はクライアントには適用されません。 クライアントにアクセスキーペアを埋め込まないでください。
RAM ユーザーを使用した OSS へのアクセス
Alibaba Cloud アカウントのアクセスキーペアは、すべての API 操作に対する権限を持ちます。 これらの認証情報を使用して OSS で操作を実行することは、リスクの高い操作です。 RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
RAM ユーザーを作成し、RAM ユーザーに異なる権限を付y与して、リソースへのアクセスを管理できます。 RAM は、企業の複数のユーザーが共同でクラウドリソースを管理する必要があるシナリオで、Alibaba Cloud アカウントとパスワードの機密性を厳密に維持するのに役立ちます。 また、データセキュリティを確保するために、ユーザーに必要最小限の権限を付与することもできます。 詳細については、「RAM ユーザーの作成」をご参照ください。
RAM ユーザーを作成した後、RAM ポリシーを使用して RAM ユーザーに権限を付与できます。 これにより、従業員、システム、アプリケーションなどのユーザーと、これらのユーザーがアクセスできるリソースを管理できます。 たとえば、次の RAM ポリシーを使用して、特定の RAM ユーザーが examplebucket という名前のバケットや examplebucket バケット内のオブジェクトまたはディレクトリにアクセスするのを禁止できます。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:examplebucket",
"acs:oss:*:*:examplebucket/*"
]
}
]
}
また、RAM ポリシーを使用して、RAM ユーザーがバケット内のディレクトリを削除するのを防いだり、RAM ユーザーにバケット内のリソースの読み取りのみを許可したりすることもできます。 詳細については、「RAM ポリシーの一般的な例」をご参照ください。
MFA の有効化
多要素認証 (MFA) は、使いやすく効果的な認証方法です。 MFA を有効にすると、Alibaba Cloud 管理コンソールにログインする際に、ユーザー名とパスワード、および MFA デバイスによって生成される動的な検証コードが必要になります。 これにより、パスワードが漏洩した場合でも不正アクセスをブロックし、Alibaba Cloud アカウントのセキュリティを確保できます。
Alibaba Cloud アカウントで MFA を有効にできます。 詳細については、「MFA デバイスを Alibaba Cloud アカウントにバインドする」をご参照ください。 RAM ユーザーに対して MFA を有効にすることもできます。 詳細については、「MFA デバイスを RAM ユーザーにバインドする」をご参照ください。
STS が提供する一時的なアクセス認証情報を使用した OSS へのアクセス
Security Token Service (STS) を使用して一時的なアクセス認証情報を生成し、特定の期間、RAM ユーザーによる OSS リソースへのアクセスを許可できます。 これにより、アクセスキーペアを共有する必要がなくなり、より高いデータセキュリティを確保できます。
STS が提供する一時的なアクセス認証情報を使用して OSS にアクセスする方法の詳細については、「STS が提供する一時的な認証情報を使用して OSS にアクセスする」をご参照ください。
バケットポリシーの設定
バケットポリシーを設定して、他のユーザーにバケット内の特定の OSS リソースへのアクセス権限を付与できます。 たとえば、バケットポリシーを設定して、他のアカウントにバケット内のすべてのリソースまたは一部のリソースへのアクセスまたは管理権限を付与できます。 また、バケットポリシーを設定して、同じアカウントの異なる RAM ユーザーに異なる権限を付与することもできます。
バケットポリシーを設定する際は、セキュリティリスクを低減するために、最小権限の原則 (PoLP) に従ってください。
-
ユーザーにバケット内のすべてのリソースへのアクセス権限を付与しないこと
過剰な権限や不正アクセスを防ぐために、必要なリソースパスにのみ権限を付与することを推奨します。
-
匿名アクセスを許可しないこと
エンドポイントとバケット名が提供されていれば、匿名アカウントを使用して OSS にアクセスできます。 しかし、エンドポイントは列挙可能であり、バケット名はアカウントがアクセスできるオブジェクトの URL から取得できます。 したがって、匿名アクセスはセキュリティリスクを増大させます。
-
Action の指定
OSS コンソールでバケットポリシーを設定する際、4つの認可操作が用意されている [Action] は、ポリシーを簡易的に設定するためのものですが、指定されたアクションがビジネス要件を満たさない場合があります。 [詳細設定] を使用して、ユーザーに必要な権限のみを付与することを推奨します。 たとえば、読み取り専用権限には
oss:ListObjectsとoss:GetObjectが含まれます。 ほとんどのシナリオでは、オブジェクトをダウンロードする場合、oss:GetObject権限のみが必要です。 -
アクセスに対する HTTPS の有効化
HTTPS を有効にすると、中間者攻撃やドメインハイジャックなどの問題を解決できます。 さらに、Google Chrome を使用して HTTPS の Web サイトを表示する場合、デフォルトではその Web サイトの HTTP リソースは読み込まれません。 必ず HTTPS を有効にしてください。 HTTPS は、さまざまな問題を解決するための最も費用対効果の高い方法です。
-
ソース IP アドレスの指定
OSS リソースへのアクセスに使用される IP アドレスが固定で列挙可能な場合は、IP アドレスを設定することを推奨します。
たとえば、バケットポリシーを使用して、RAM ユーザー Test に、OSS SDK またはコマンドラインツール ossutil を使用して examplebucket の log ディレクトリ内のすべてのオブジェクトをダウンロードする権限を付与できます。
[Action] で [詳細設定] を選択し、oss:GetObject を選択します。 [Effect] を [Allow] に設定します。 [Condition] セクションで、[アクセス方法] に HTTPS を選択し、[IP =] に 10.10.10.10 を入力します。 その後、[OK] をクリックします。