他の AWS アカウントのユーザーが Amazon S3 バケットにアクセスする際、MFA を使用するように要求するにはどうすればよいですか?

最終更新日: 2020 年 12 月 8 日

セキュリティをさらに強化するために、他の AWS アカウントのユーザーが私の Amazon Simple Storage Service (Amazon S3) バケットにアクセスする際に、多要素認証 (MFA) デバイスを使用するよう要求したいと考えています。どうすればそれができますか?

解決方法

他の AWS アカウントのユーザーに MFA デバイスによる認証を要求する MFA 関連の条件をバケットポリシーに追加します。

開始する前に、他の AWS アカウントのユーザーが以下の前提条件を満たしている必要があります。

  • Amazon S3 にアクセスするためのアクセス許可が付与されていること。たとえば、AWS 管理ポリシー (AmazonS3FullAccess) が AWS Identity and Access Management (IAM) ポリシーに含まれている場合、ユーザーはこの要件を満たしています。
  • GetSessionToken を呼び出すことを許可する IAM ポリシーがアタッチされていること。
  • IAM ID で使用するようにデバイスが設定されていること。

次に、aws:MultiFactorAuthPresent 条件、または aws:MultiFactorAuthAge 条件を使用するバケットポリシーを作成します。これらの条件によって、ユーザーが MFA デバイスを使用して認証したかどうかを判断します。

たとえば、MFA デバイスを使用して認証する場合を除き、s3:PutObject、s3:PutObjectAcl、または s3:DeleteObject アクションを実行するためのアクセス許可を別のアカウントのユーザーに付与しないことを前提としています。バケットポリシーは、以下の 2 つの部分に記述することができます。

1.    1 つ目の部分では、次のように、ユーザーが MFA を使用して認証しない場合にこのアクションを明示的に拒否します (条件 "aws:MultiFactorAuthPresent": "false" となっている)。

{
    "Version": "2012-10-17",
    "Id": "Policy201612130001aa",
    "Statement": [
        {
            "Sid": "Stmt201612130001ab",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::example.accounta.bucket/*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        },
...

2.    ポリシーの 2 つ目の部分では、次のように、ユーザーが MFA を使用して認証する場合にこのアクションを明示的に許可します (条件 "aws:MultiFactorAuthPresent": "false" となっていない)。

...
        {
            "Sid": "Stmt201612130001ac",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::example.accounta.bucket",
                "arn:aws:s3:::example.accounta.bucket/*"
            ]
        }
    ]
}

同様のバケットポリシーをバケットに追加したら、ユーザーは AWS コマンドラインインターフェイス (AWS CLI) の get-session-token コマンドを実行して、バケットのリソースにアクセスするのに必要な認証情報を取得することができます。このコマンドを実行する際、ユーザーは以下を指定する必要があります。

  • MFA デバイスで生成された一時的なコード
  • デバイスのシリアル番号 (ハードウェア MFA デバイスの場合)、または Amazon リソースネーム (ARN) (ソフトウェア MFA デバイスの場合)。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

認証情報を取得する別のオプションとして、ユーザーは、一時的な認証情報を環境変数としてエクスポートすることができます。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?