個人ユーザーまたは企業ユーザーのAccessKeyペアが漏洩した場合、Object Storage Service (OSS) リソースにアクセスする権限を持たないユーザーは、リソースに対して操作を実行できます。 これはデータセキュリティを脅かします。 この問題を解決するために、OSSはデータセキュリティを確保するためのベストプラクティスを提供します。
以下のベストプラクティスは、完全なセキュリティソリューションではなく、一般的なセキュリティ対策です。 これらのベストプラクティスは参照用にのみ提供されており、ビジネスシナリオには適していない場合があります。 データセキュリティの脅威を認識し、必要な予防措置を講じることをお勧めします。
バケットまたはオブジェクトのACLをprivateに設定する
匿名ユーザーを含むすべてのユーザーがOSSリソースからデータを読み書きする必要がない限り、バケットまたはオブジェクトのアクセス制御リスト (ACL) をpublic-readまたはpublic-read-writeに設定しないでください。 たとえば、バケットのACLをpublic-readまたはpublic-read-writeに設定した場合、次の変更が有効になります。
Public-read-write: 匿名ユーザーを含むすべてのユーザーが、バケット内のオブジェクトからデータを読み書きできます。
警告すべてのインターネットユーザーは、バケット内のオブジェクトにアクセスし、バケットにデータを書き込むことができます。 これにより、データリークや予想外に高い料金が発生する可能性があります。 ユーザーが禁止されているデータや情報をバケット内のオブジェクトに書き込むと、正当な利益や権利が侵害される可能性があります。 必要な場合を除き、バケットACLをpublic-read-writeに設定しないことをお勧めします。
公開読み取り: バケット内のオブジェクトにデータを書き込むことができるのはバケット所有者だけです。 匿名ユーザーを含む他のユーザーは、バケット内のオブジェクトからデータを読み取ることができます。
警告すべてのインターネットユーザーがバケット内のオブジェクトにアクセスできます。 これにより、データリークや予想外に高い料金が発生する可能性があります。 バケットACLをpublic-readに設定する場合は注意してください。
パブリック読み取りアクセスまたはパブリック読み取り /書き込みアクセスを許可するバケットまたはオブジェクトは、データ侵害につながる可能性があります。 そのため、オブジェクトACLまたはバケットACLをprivateに設定することを推奨します。 バケットACLをprivateに設定した場合、バケット所有者のみがバケット内のオブジェクトからデータを読み書きできます。 したがって、オブジェクトACLまたはバケットACLをprivateに変更する前に、ビジネスに影響がないことを確認してください。
複数のメソッドを使用して、オブジェクトACLまたはバケットACLをprivateに設定できます。 詳細については、「バケットACL」および「オブジェクトのACLの設定」をご参照ください。
平文のAccessKeyペアをコードに含めないか、暗号化されたAccessKeyペアをローカルに保存しないでください
コード内のプレーンテキストAccessKeyペアがコードとともにリークされる可能性があります。 ローカルで暗号化および保存されたAccessKeyペアも、暗号化および復号化されたコンテンツがメモリに保存され、メモリ内のデータが別のデバイスに保存される可能性があるため、安全ではありません。 コンピュータ上のモバイルアプリやアプリケーションは、これらのリスクを被りやすい。 解読されたデータを取得するには、攻撃者はインジェクション、APIフッキング、動的デバッグなどのテクノロジーを使用するだけで済みます。
コード内の平文のAccessKeyペアを回避するために、サーバー上でAlibaba Cloud SDKのマネージシークレットプラグインを使用できます。 これにより、AccessKeyペアがソースコードまたはコンパイル済みコードとともにリークされるのを防ぐことができます。 Alibaba Cloud SDKのマネージドシークレットプラグインの詳細については、「Alibaba Cloud SDKのマネージドシークレットプラグイン」をご参照ください。
この方法はクライアントには適用されません。 クライアントにAccessKeyペアを埋め込まないでください。
RAMユーザーを使用したOSSへのアクセス
Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 これらの資格情報を使用してOSSで操作を実行することは、リスクの高い操作です。 RAMユーザーを使用してAPI操作を呼び出したり、ルーチンのO&Mを実行することを推奨します。
RAMユーザーを作成し、リソースへのアクセスを管理するためのさまざまな権限をRAMユーザーに付与できます。 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リソースにアクセスすることを許可できます。 この方法では、AccessKeyペアを共有する必要はありません。 これにより、データのセキュリティが向上します。
STSが提供する一時的なアクセス資格情報を使用してOSSにアクセスする方法の詳細については、「STSが提供する一時的な資格情報を使用してOSSにアクセスする」をご参照ください。
バケットポリシーの設定
バケットポリシーを設定して、他のユーザーにバケット内の特定のOSSリソースにアクセスする権限を付与できます。 たとえば、バケットポリシーを設定して、バケット内のすべてのリソースまたはリソースの一部にアクセスまたは管理する権限を他のアカウントに付与できます。 バケットポリシーを設定して、同じアカウントの異なるRAMユーザーに異なる権限を付与することもできます。
バケットポリシーを設定するときは、最小特権 (PoLP) の原則に従ってセキュリティリスクを軽減します。
バケット内のすべてのリソースにアクセスする権限をユーザーに付与しないでください
過剰な権限や不正なアクセスを防ぐために、必要なリソースパスに対してのみ権限を付与することを推奨します。
匿名アクセスを許可しない
エンドポイントとバケット名が指定されている場合、匿名アカウントを使用してOSSにアクセスできます。 ただし、エンドポイントを列挙でき、アカウントがアクセスできるオブジェクトのURLからバケット名を取得できます。 したがって、匿名アクセスはセキュリティリスクを高めます。
アクションの指定
OSSコンソールでバケットポリシーを設定する場合、4つの権限付与操作を提供するアクションは、ユーザーがポリシーを設定するための便利な方法にすぎず、指定されたアクションがビジネス要件を満たさない場合があります。 詳細設定を使用して、必要な権限のみをユーザーに付与することを推奨します。 たとえば、読み取り専用権限には、
oss:ListObjects
とoss:GetObject
があります。 ほとんどのシナリオでは、オブジェクトをダウンロードする場合、oss:GetObject
権限のみが必要です。アクセスのHTTPSを有効にする
HTTPSを有効にして、中間者攻撃やドメインハイジャックなどの問題を解決できます。 さらに、Google Chromeを使用してHTTPS Webサイトを表示する場合、WebサイトのHTTPリソースをデフォルトで読み込むことはできません。 必ずHTTPSを有効にしてください。 HTTPSは、さまざまな問題を解決するための最も費用対効果の高い方法です。
送信元IPアドレスの指定
OSSリソースへのアクセスに使用されるIPアドレスが固定されており、列挙できる場合は、IPアドレスを設定することを推奨します。
たとえば、バケットポリシーを使用して、OSS SDKまたはコマンドラインツールossutilを使用して、テストRAMユーザーにexamplebucketのログディレクトリ内のすべてのオブジェクトをダウンロードする権限を付与できます。