

# SQL Server Audit の IAM ロールを手動で作成する
<a name="Appendix.SQLServer.Options.Audit.IAM"></a>

通常、新しいオプションを作成すると、AWS マネジメントコンソール は IAM ロールと IAM 信頼ポリシーを作成します。ただし、SQL Server Audits で使用する新しい IAM ロールを手動で作成して、必要に応じてその他の要件に合わせてカスタマイズできます。そのためには、Amazon RDS サービスで Amazon S3 バケットを使用できるように、IAM ロールを作成して、アクセス許可を委任します。この IAM ロールを作成したら、信頼ポリシーとアクセス許可ポリシーをアタッチします。信頼ポリシーを使用することで、Amazon RDS はこのロールを引き受けることができます。アクセス許可ポリシーでは、このロールが実行できるアクションを定義します。詳細については、*AWS Identity and Access Management ユーザーガイド*の[AWS のサービスに許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を参照してください。

必要な信頼関係とアクセス許可ポリシーは、このセクションの例を使用して作成できます。

以下の例は、SQL Server Audit の信頼関係を示しています。この例では、*サービスプリンシパル* `rds.amazonaws.com` を使用して、RDS で S3 バケットに書き込めるようにしています。*サービスプリンシパル*は、サービスにアクセス許可を付与するために使用される識別子です。このように、いつでも `rds.amazonaws.com` にアクセス許可を付与できます。これにより、RDS はお客様に代わってアクションを実行できるようになります。サービスプリンシパルの詳細については、[AWS JSON ポリシーの要素: プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)を参照してください。

**Example SQL Server Audit の信頼関係**    
****  

```
{
	    "Version":"2012-10-17",		 	 	 
	    "Statement": [
	        {
	            "Effect": "Allow",
	            "Principal": {
	                "Service": "rds.amazonaws.com"
	            },
	            "Action": "sts:AssumeRole"
	        }
	    ]
	}
```

リソースベースの信頼関係では [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) のグローバル条件コンテキストキーを使用して、サービスに付与する特定のリソースへのアクセス許可を制限することをお勧めします。これは、[混乱した使節の問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)に対する最も効果的な保護方法です。

両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合は、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。
+ 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
+ そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

信頼関係では、`aws:SourceArn` グローバル条件コンテキストキーに、必ず、ロールにアクセスするリソースの完全な Amazon リソースネーム (ARN) を使用します。SQL Server Audit の場合は、次の例に示すように、DB オプショングループと DB インスタンスの両方を必ず含めるようにしてください。

**Example SQL Server Audit のグローバル条件コンテキストキーとの信頼関係**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:my_account_ID:db:db_instance_identifier",
                        "arn:aws:rds:Region:my_account_ID:og:option_group_name"
                    ]
                }
            }
        }
    ]
}
```

SQL Server Audit のアクセス許可ポリシーの次の例では、Amazon S3 バケットの ARN を指定します。ARN を使用して、アクセス許可を付与する特定のアカウント、ユーザー、またはロールを識別します。ARN の使用の詳細については、[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) を参照してください。

**Example SQL Server Audit のアクセス許可ポリシー**    
****  

```
{
	    "Version":"2012-10-17",		 	 	 
	    "Statement": [
	        {
	            "Effect": "Allow",
	            "Action": "s3:ListAllMyBuckets",
	            "Resource": "*"
	        },
	        {
	            "Effect": "Allow",
	            "Action": [
	                "s3:ListBucket",
	                "s3:GetBucketACL",
	                "s3:GetBucketLocation"
	            ],
	            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
	        },
	        {
	            "Effect": "Allow",
	            "Action": [
	                "s3:PutObject",
	                "s3:ListMultipartUploadParts",
	                "s3:AbortMultipartUpload"
	            ],
	            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
	        }
	    ]
	}
```

**注記**  
`s3:ListAllMyBuckets` アクションは、同じ AWS アカウントが S3 バケットと SQL Server DB インスタンスの両方を所有していることを確認するために必要です。このアクションは、アカウント内のバケットの名前を一覧表示します。  
S3 バケットの名前空間はグローバルです。誤ってバケットを削除した場合は、別のユーザーが同じ名前のバケットを別のアカウントで作成できます。次に、SQL Server 監査データが新しいバケットに書き込まれます。